Algorithm 以输入大小N表示的大θ运行时间

Algorithm 以输入大小N表示的大θ运行时间,algorithm,runtime,big-o,Algorithm,Runtime,Big O,当N位整数a>1时, a=a/2 我认为它是log(n),因为每次通过while循环时,你都在将a除以2,但我的朋友认为它是2 logn(n)。很明显,你的算法是在大θ(log(a)),其中a是你的数字 但就我所理解的问题而言,你想知道渐近运行时间,这取决于你的数字位数 这真的很难说,取决于你的电话号码: 假设有一个n位整数,最高有效位是1。你必须把它除以n次,得到一个小于1的数字 现在让我们看一个整数,其中只有最小siginficant位是1(因此它等于十进制中的数字1)。你只需要一个师 所以

当N位整数a>1时, a=a/2


我认为它是log(n),因为每次通过while循环时,你都在将a除以2,但我的朋友认为它是2 logn(n)。

很明显,你的算法是在大θ(log(a)),其中a是你的数字

但就我所理解的问题而言,你想知道渐近运行时间,这取决于你的数字位数

这真的很难说,取决于你的电话号码:

假设有一个n位整数,最高有效位是1。你必须把它除以n次,得到一个小于1的数字

现在让我们看一个整数,其中只有最小siginficant位是1(因此它等于十进制中的数字1)。你只需要一个师

所以我想说,平均需要n/2,这使得它大θ(n)其中n是数字的位数。最坏的情况也出现在大θ(n)中,最好的情况出现在大θ(1)

注意:二进制中的数字除以2与十进制中的数字除以10的效果类似


很明显,您的算法位于大θ(log(a)),其中a是您的数字

但就我所理解的问题而言,你想知道渐近运行时间,这取决于你的数字位数

这真的很难说,取决于你的电话号码:

假设有一个n位整数,最高有效位是1。你必须把它除以n次,得到一个小于1的数字

现在让我们看一个整数,其中只有最小siginficant位是1(因此它等于十进制中的数字1)。你只需要一个师

所以我想说,平均需要n/2,这使得它大θ(n)其中n是数字的位数。最坏的情况也出现在大θ(n)中,最好的情况出现在大θ(1)

注意:二进制中的数字除以2与十进制中的数字除以10的效果类似


用二进制表示法取一个数字并移位位,可以有效地将整数除以2。在最坏的情况下,所有的位都被设置为1。您必须为第一次除法移位(n-1)位,为第二次除法移位(n-2)位,等等。直到您在最后一次迭代中移位1位,发现数字等于1,此时您停止。这意味着您的算法必须移位1+2+…+(n-1)=n(n-1)/2位,使您的算法在输入位数上
O(n^2)


A
保留相同值的更有效算法是
A=(A==0?0:1)
。这会在线性时间内生成相同的答案(相等检查在位数上是线性的),并且它会起作用,因为只有当
a
最初为零时,代码才会离开
a=0
;在所有其他情况下,最高阶位最终位于该单元的位置。

将一个整数除以二可以通过采用二进制表示法的数字并移位位来有效地实现。在最坏的情况下,所有的位都被设置为1。您必须为第一次除法移位(n-1)位,为第二次除法移位(n-2)位,等等。直到您在最后一次迭代中移位1位,发现数字等于1,此时您停止。这意味着您的算法必须移位1+2+…+(n-1)=n(n-1)/2位,使您的算法在输入位数上
O(n^2)


A
保留相同值的更有效算法是
A=(A==0?0:1)
。这会在线性时间内生成相同的答案(相等检查在位数上是线性的),并且它会起作用,因为只有当
a
最初为零时,代码才会离开
a=0
;在所有其他情况下,最高阶位最终位于单元的位置。

您的朋友对此有何理由?你们都同意n是什么吗?问题是我们不知道n是什么,也不知道n位整数是什么意思想象我们有一个4位整数(可以容纳0到15的值)。是n4,还是16?可能是的复制品。这个问题的最后一个答案(不是公认的答案)涉及到我在评论中提到的一点:你和你的朋友是否同意n是什么?你的朋友对此有什么理由?你们都同意n是什么吗?问题是我们不知道n是什么,也不知道n位整数是什么意思想象我们有一个4位整数(可以容纳0到15的值)。是n4,还是16?可能是的复制品。这个问题的最后一个答案(不是公认的答案)涉及到我在评论中提到的一点:你和你的朋友是否同意n是什么?