Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
Algorithm 检查排序数组上的算法_Algorithm_Big O_Analysis - Fatal编程技术网

Algorithm 检查排序数组上的算法

Algorithm 检查排序数组上的算法,algorithm,big-o,analysis,Algorithm,Big O,Analysis,我有一个长度为n的排序数组,我使用线性搜索将我的值与数组中的每个元素进行比较,然后对大小为n/2的数组执行线性搜索,然后对大小为n/4、n/8的数组执行线性搜索,直到对长度为1的数组执行线性搜索为止。在这种情况下,n是2的幂,执行的比较次数是多少 我不确定这个回答是否正确,但我认为比较的次数应该是 T(2n)=(n/2)+(n/4)+…+1. 我这样做的理由是,你必须检查每一个元素,然后不断地添加它,但我仍然不确定。如果有人能给我介绍一下,我会很感激你在你的问题中设置的循环有点不恰当,因为如果

我有一个长度为
n
的排序数组,我使用线性搜索将我的值与数组中的每个元素进行比较,然后对大小为
n/2
的数组执行线性搜索,然后对大小为
n/4
n/8
的数组执行线性搜索,直到对长度为1的数组执行线性搜索为止。在这种情况下,n是2的幂,执行的比较次数是多少

我不确定这个回答是否正确,但我认为比较的次数应该是

T(2n)=(n/2)+(n/4)+…+1.


我这样做的理由是,你必须检查每一个元素,然后不断地添加它,但我仍然不确定。如果有人能给我介绍一下,我会很感激你在你的问题中设置的循环有点不恰当,因为如果n是你输入的长度,那么你不会用2n表示输入的长度。相反,对于k的一些选择,您可以将其写成n=2k。一旦你有了这个,你就可以这样做了:

  • 阵列的一半大小为2k/2=2k-1
  • 阵列四分之一的大小为2k/4=2k-2
如果将所有这些值相加,则得到以下结果:

2k+2k-1+2k-2+…+2+1=2k+1-1

你可以用几种方法来证明这一点:你可以使用归纳法,或者使用几何级数之和的公式,等等。这在计算机科学中经常出现,所以值得记住

这意味着,如果n=2k,您的算法将及时运行

2k+1-1=2(2k)-1=2n-1

所以运行时是2n-1,也就是Θ(n)


希望这有帮助

您在问题中设置的循环有点不恰当,因为如果n是输入的长度,那么您不会用2n表示输入的长度。相反,对于k的一些选择,您可以将其写成n=2k。一旦你有了这个,你就可以这样做了:

  • 阵列的一半大小为2k/2=2k-1
  • 阵列四分之一的大小为2k/4=2k-2
如果将所有这些值相加,则得到以下结果:

2k+2k-1+2k-2+…+2+1=2k+1-1

你可以用几种方法来证明这一点:你可以使用归纳法,或者使用几何级数之和的公式,等等。这在计算机科学中经常出现,所以值得记住

这意味着,如果n=2k,您的算法将及时运行

2k+1-1=2(2k)-1=2n-1

所以运行时是2n-1,也就是Θ(n)


希望这有帮助

谢谢你的回复,你介意解释一下你是如何得到2^(k+1)-1的,它是在时间2n-1内运行的吗?@Masterminder-我刚刚更新了我的答案来解释这一点。希望这有帮助!是的,谢谢你,这很有帮助。所以,如果我使用另一种类型的搜索,比如二进制搜索来比较每个元素,那会是什么样子呢?我仍然会在长度为n的排序数组上执行它,然后是大小为n/2的数组,等等。我知道它在log(n)中运行,所以它看起来像log(2^k)+log(2^(k-1))+@策划人-完全正确。这就简化为k+(k-1)+(k-2)+…+2+1=k(k+1)/2。因为2^k=n,这意味着k=θ(logn),所以整个运行时间是θ((logn)^2)。我只想澄清一下,通过几何级数来证明这个结果:)(这样我自己就可以看到了)。元素数=n,a=2^k,r=1/2??如果我错了,你能纠正我吗。使用的公式是a(1-r^n)/(1-r),因为r是0谢谢你的回答,你介意解释一下你是如何得到2^(k+1)-1的,它是在时间2n-1内运行的吗?@Masterminder-我刚刚更新了我的答案来解释这一点。希望这有帮助!是的,谢谢你,这很有帮助。所以,如果我使用另一种类型的搜索,比如二进制搜索来比较每个元素,那会是什么样子呢?我仍然会在长度为n的排序数组上执行它,然后是大小为n/2的数组,等等。我知道它在log(n)中运行,所以它看起来像log(2^k)+log(2^(k-1))+@策划人-完全正确。这就简化为k+(k-1)+(k-2)+…+2+1=k(k+1)/2。因为2^k=n,这意味着k=θ(logn),所以整个运行时间是θ((logn)^2)。我只想澄清一下,通过几何级数来证明这个结果:)(这样我自己就可以看到了)。元素数=n,a=2^k,r=1/2??如果我错了,你能纠正我吗。要使用的公式是(1-r^n)/(1-r),因为r是0。您使用“线性搜索”还是“二进制搜索”?您使用“线性搜索”还是“二进制搜索”?