Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Big o 查找大小为n的列表的第(n/2^k)个元素的函数运行时?_Big O_Analysis - Fatal编程技术网

Big o 查找大小为n的列表的第(n/2^k)个元素的函数运行时?

Big o 查找大小为n的列表的第(n/2^k)个元素的函数运行时?,big-o,analysis,Big O,Analysis,我只能想象两种情况:当2^k接近n时(比如,如果2^k==n),那么所需的步数是n/n,或者1,因此它的运行时间是O(1) 但是,如果2^k很小(例如,如果2^k==1),则需要n个步骤,因此它的运行时间为O(n) 本质上,如果2^k可以用n表示,那么所需的步数是一个整数,因此它的运行时间是O(1)。如果2^k不能用n表示,则它的运行时为O(n) 这两种情况都是最坏的情况;对于任何未知且可能较大的n,这些运行时仍然有效。是否有任何情况下,2^k不能被限定为小于n或接近n 假设您要编写一个(可能很

我只能想象两种情况:当2^k接近n时(比如,如果2^k==n),那么所需的步数是n/n,或者1,因此它的运行时间是O(1)

但是,如果2^k很小(例如,如果2^k==1),则需要n个步骤,因此它的运行时间为O(n)


本质上,如果2^k可以用n表示,那么所需的步数是一个整数,因此它的运行时间是O(1)。如果2^k不能用n表示,则它的运行时为O(n)

这两种情况都是最坏的情况;对于任何未知且可能较大的n,这些运行时仍然有效。是否有任何情况下,2^k不能被限定为小于n或接近n

假设您要编写一个(可能很长)表,其中包含函数k值的运行时,以便(n/2^k)>=1。当k从0开始并增加时,运行时间为O(1),但当k从大值开始并减少时,运行时间为O(n)。运行时从O(1)切换到O(n)是否存在理论点

还是我根本就没有掌握Big-O分析的“主要思想”


编辑:假设线性搜索

您缺少大O分析的主要思想。总是有一种假设(通常未说明),即当某物走向无穷大时,你看到的是一个极限。通常,只有一个变量,所以从上下文中可以清楚地看出,这个变量是无穷大的。(例如,
n^2+23n∈O(n^2)
(当
n
达到无穷大时)

在您的例子中,有两个变量,
n
k
。所以为了讨论big-O,你需要量化什么是无穷大(它看起来是
n
),以及另一个变量同时在做什么。这确实导致了两种可能性:如果
k
n
变为无穷大时保持不变,那么答案是
O(n)
;但是如果
k
使得
n/2^k
是常数(即
k=lg(n)-C
),那么答案是
O(1)
。但是还有其他的可能性:如果
n/2^k=√n
(即
k=lg(n)/2
),那么答案是
O(√n) 

因此,根据
k
n
的增长情况,答案是
O(1)
O(n)
之间的任意值

但是,如果2^k很小(例如,如果2^k==1),则需要n个步骤,因此它的运行时间为O(n)。(一)


本质上,如果2^k可以用n表示,那么所需的步数是一个整数,因此它的运行时间是O(1)。如果2^k不能用n来写,则它的运行时间为O(n)。(2)

(1) 他的结论是正确的,但(2)是错误的


首先,你有两个变量<代码>n和
k
k:1您使用的是二进制搜索吗?@TobiAlafin假设是线性搜索(我刚刚做了编辑)Ok。这对我现在来说是有意义的。“那么所需的步数是一个整数,所以它的运行时间是O(1)。”这是错误的。(n/2^k)作为一个整数,例如第四个元素,将给出得到的整数的运行时间。这个整数小于n,所以是O(n)。我现在正在添加一个答案。你不能假设
k
有一个介于
0和lg(n)
之间的值吗。这个问题本身就暗示了这一点。在这种情况下,最坏的情况是'k'的值为'0',我们最终得到
f(n)=O(n)
如果
k
可以覆盖所有可能的值,那么是的,我们采用最坏的情况。但是如果
k
是固定的
n
,那么我们必须分析
k
发生了什么。他没有给出任何关于
k
的信息,所以我只使用了可能值的范围。