Probability 用概率法求平均案例复杂度

Probability 用概率法求平均案例复杂度,probability,asymptotic-complexity,Probability,Asymptotic Complexity,假设我们有一个字符串n,可以用“a”s或“b”s填充 例如:n=“aaabbab”、“abababab”等。 我们定义了一个函数,名为 HalfA(n): count a = 0; for each i in n: if n == 'a' i++; if i >= n.length/2 return true return false 如果n是均匀分布,那么halfA的平均事例复杂度是多少。直觉上,我相信这是len(

假设我们有一个字符串n,可以用“a”s或“b”s填充 例如:n=“aaabbab”、“abababab”等。 我们定义了一个函数,名为

HalfA(n):
  count a = 0;
  for each i in n:
    if n == 'a'
        i++;
     if i >= n.length/2
       return true 
  return false     
如果n是均匀分布,那么halfA的平均事例复杂度是多少。直觉上,我相信这是len(n),但我不确定如何证明这一点。假设a的概率比b大,并且它不是一个均匀分布,那么我如何计算平均情况呢?

对于任何分布

最佳情况:n=“a*”。 这需要
len(n)/2个步骤,因此最好的情况是:
O(len(n))

最坏情况:n=“b*”。 这将需要
len(n)
步骤,因为您必须遍历整个阵列。所以最坏的情况是
O(len(n))


平均情况受最佳情况和最坏情况的限制。也就是说,
O(len(n))是
len(n)
。在绝对最好的情况下,每个字符都是“a”。在这种情况下,is仍然是
O(len(n)/2)=O(len(n))
谢谢。正如我提到的,我知道它是len(n),但我不知道如何显示它。如果它不是一个均匀分布,并且p(a)=.8和p(b)=.2或其他什么,那么不管使用哪种分布,它至少需要n/2步。最多n步。在这种情况下,分布没有太大变化。一个更有趣的问题是:“假设您有一个无限的字符流,由分布d控制。找到n'A的时间复杂度是多少。”即使在这种情况下,对于所有分布(除了
p(A)=0
),它也是
O(n)
,但这不太直观。我同意,对于最好的情况,不管它是什么分布,至少需要n/2个步骤来计算n/2次,但对于平均情况呢