Algorithm “最坏情况”的运行时;找到重复n/2次以上的元素“;使用随机
有一个问题 请您帮助估算使用随机变量的解决方案的时间复杂度:Algorithm “最坏情况”的运行时;找到重复n/2次以上的元素“;使用随机,algorithm,random,big-o,complexity-theory,Algorithm,Random,Big O,Complexity Theory,有一个问题 请您帮助估算使用随机变量的解决方案的时间复杂度: 在数组中拾取随机元素 遍历数组并计算所选元素的出现次数 如果计数>N/2-返回该元素 重复步骤1 如果我使用提供随机均匀数的完美随机生成器,这种方法的最坏情况是什么O(N²) 我的直觉告诉我,平均来说,它应该在两次尝试中给出答案,但这只是一般情况。如何证明呢?我不太确定如何估计随机算法的运行时间。假设实际上有一个元素出现超过n/2次,预期的运行时间是O(n)。你可以这样想——每次你选择一个元素时,你都需要做O(n)运算来检查它是否是多
我的直觉告诉我,平均来说,它应该在两次尝试中给出答案,但这只是一般情况。如何证明呢?我不太确定如何估计随机算法的运行时间。假设实际上有一个元素出现超过n/2次,预期的运行时间是O(n)。你可以这样想——每次你选择一个元素时,你都需要做O(n)运算来检查它是否是多数元素。接下来的问题是,根据预期,你需要选择多少元素。每次您随机选择一个元素时,您至少有1/2的概率选择某个占多数的元素。根据预期,这意味着您需要在找到多数元素之前选择两个元素,因此运行时将为O(n)。如果你想知道为什么,请注意,在k个探针(k>0)之后找到你想要的东西的概率最多为2-k,因为你需要让第一个k-1探针不成功,然后让第k个探针成功。然后,您可以将预期值计算为 0*2-0+1*2-1+2*2-2+ =2 (我们知道这个总和正好是2,尽管证明它有点混乱。) 但是,在最坏的情况下,每次选择一个元素时,都会选择一个不是多数元素的元素。这是非常不可能的,虽然-概率,你没有找到一个多数元素后,k轮最多是2-k。当k=300时,这个数字小于宇宙中原子数的1。因此,即使您无法绑定最坏情况下的运行时,从天文学角度来看,它也不太可能是您可以安全忽略的
希望这有帮助 假设实际有一个元素出现超过n/2次,则预期运行时间为O(n)。你可以这样想——每次你选择一个元素时,你都需要做O(n)运算来检查它是否是多数元素。接下来的问题是,根据预期,你需要选择多少元素。每次您随机选择一个元素时,您至少有1/2的概率选择某个占多数的元素。根据预期,这意味着您需要在找到多数元素之前选择两个元素,因此运行时将为O(n)。如果你想知道为什么,请注意,在k个探针(k>0)之后找到你想要的东西的概率最多为2-k,因为你需要让第一个k-1探针不成功,然后让第k个探针成功。然后,您可以将预期值计算为 0*2-0+1*2-1+2*2-2+ =2 (我们知道这个总和正好是2,尽管证明它有点混乱。) 但是,在最坏的情况下,每次选择一个元素时,都会选择一个不是多数元素的元素。这是非常不可能的,虽然-概率,你没有找到一个多数元素后,k轮最多是2-k。当k=300时,这个数字小于宇宙中原子数的1。因此,即使您无法绑定最坏情况下的运行时,从天文学角度来看,它也不太可能是您可以安全忽略的
希望这有帮助 对于随机算法,预期运行时间更好地描述了它们的运行时间。对于您描述的算法,预期运行时间最多为
S = n * 1/2 + 2n * 1/2^2 + 3n * 1/2^3 + ... up to infinity
我们可以通过以下方式解决这个问题:
S = n/2 + 2n/2^2 + 3n/2^3 + ... up to infinity
2S = n + 2n/2 + 3n/2^2 + 4n/2^3 + ... up to infinity
(subtracting the top from bottom)
S = n + n/2 + n/4 + n/8 + ... up to infinity
= 2n
因此,预期运行时间是O(n)。对于随机算法,预期运行时间更好地描述了它们的运行时间。对于您描述的算法,预期运行时间最多为
S = n * 1/2 + 2n * 1/2^2 + 3n * 1/2^3 + ... up to infinity
我们可以通过以下方式解决这个问题:
S = n/2 + 2n/2^2 + 3n/2^3 + ... up to infinity
2S = n + 2n/2 + 3n/2^2 + 4n/2^3 + ... up to infinity
(subtracting the top from bottom)
S = n + n/2 + n/4 + n/8 + ... up to infinity
= 2n
因此,预期的运行时间是O(n)。如果我们谈论最坏情况的复杂性,我们指的是输入的最坏情况,即强制算法进入最坏可能运行时间的输入
随机算法也是如此。我们计算最坏情况输入的预期复杂度
在您的示例中,最差的输入是长度为n
的数组,该数组只包含一个数字a
⌊n/2⌋+1次
复杂性现在是O(n)⋅E[X]
,其中X
是在选择a
之前,您必须从数组中随机选择一个数字的尝试次数。
如果a
在数组中是m
次E[X]=n/m
保持不变。因此,对于最坏情况的输入,我们得到E[X]=n/(⌊n/2⌋+1)
因此,这个随机算法的最坏情况复杂度为O(n)
如果我们谈论最坏情况复杂度,我们指的是输入的最坏情况,即迫使算法进入最坏可能运行时间的输入
随机算法也是如此。我们计算最坏情况输入的预期复杂度
在您的示例中,最差的输入是长度为n
的数组,该数组只包含一个数字a
⌊n/2⌋+1次
复杂性现在是O(n)⋅E[X]
,其中X
是在选择a
之前,您必须从数组中随机选择一个数字的尝试次数。
如果a
在数组中是m
次E[X]=n/m
保持不变。因此,对于最坏情况的输入,我们得到E[X]=n/(⌊n/2⌋+1)
因此,该随机算法的最坏情况复杂度为O(n)