什么是复杂度? (比特,元素数量......)

时间:2015-05-03 07:46:27

标签: algorithm complexity-theory

我已经读过,测试素性的天真方法具有指数复杂性,因为您可以根据输入的大小来判断算法。神秘的是,人们坚持认为,在讨论整数的素数时,输入大小的适当度量是位数(不是n,整数本身)。

然而,在讨论像Floyd这样的算法时,通常根据节点数来说明复杂性,而不考虑存储这些节点所需的比特数。

我不想在这里争论。老实说,我不理解这个推理。请解释。感谢。

3 个答案:

答案 0 :(得分:2)

传统上讲,复杂性是根据输入的大小来衡量的。

在数字的情况下,输入的大小是该数字的对数(因为它是它的二进制表示),在图形的情况下,所有边和顶点必须以某种方式在输入中表示,因此大小输入在|V||E|中是线性的。

例如,在数字本身的线性时间内运行的朴素素性测试称为伪多项式。它是数字中的多项式,但它不是输入大小的多项式,即log(n),它实际上是输入大小的指数。

作为旁注,如果你在这个问题中使用位,字节或任何其他CONSTANT因子的输入大小并不重要,因为在将渐近符号计算为常量时,它将被丢弃。

答案 1 :(得分:2)

主要区别在于,在讨论算法时,我们会在脑海中留下能够对O(1)时间内使用的数据执行操作的硬件。当严格或在考虑不能适合处理器寄存器的数据时,考虑到帐户的位数变得很重要。

答案 2 :(得分:0)

尽管输入的大小是以位数来衡量的,但在很多情况下我们可以使用一种快捷方式来分割出一定数量的位。这个常数因子嵌入在我们为数据结构选择的表示中。

在讨论图算法时,我们假设每个顶点和每个边缘在位数方面具有固定的表示成本,这不依赖于顶点和边的数量。这个假设要求与顶点和边相关联的权重在位数方面具有固定的大小(即所有整数,所有浮点数等)

有了这个假设,邻接列表表示每个边或顶点都有固定的大小,因为除了权重之外,我们每个边需要一个指针和每个顶点一个指针,我们假设它们也是常量。

相邻矩阵表示也是如此,因为矩阵需要W(E 2 + V)位,其中W是存储权重所需的位数。

在极少数情况下,当权重本身依赖于顶点或边的数量时,固定权重的假设不再成立,因此我们必须回到计算位数。