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
希望这有帮助 您在问题中设置的循环有点不恰当,因为如果n是输入的长度,那么您不会用2n表示输入的长度。相反,对于k的一些选择,您可以将其写成n=2k。一旦你有了这个,你就可以这样做了:
- 阵列的一半大小为2k/2=2k-1
- 阵列四分之一的大小为2k/4=2k-2
希望这有帮助 谢谢你的回复,你介意解释一下你是如何得到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。您使用“线性搜索”还是“二进制搜索”?您使用“线性搜索”还是“二进制搜索”?