我有一个顺序搜索未排序数组的算法:
SequentialSearch(A[0..n-1],K)
i=0
while i < n and A[i] != K do
i = i+1
if i < n then return i
else return -1
我们有一个输入数组A[0...n-1]
和一个搜索键K
我知道最糟糕的情况是n
,因为我们必须搜索整个数组,因此n项O(n)
我知道最好的情况是1,因为这意味着我们搜索的第一个项目是我们想要的项目,或者数组具有所有相同的项目,无论哪种方式都是O(1)
但我不知道如何计算平均情况。我的教科书给出的答案是:
= (p/n)[1+2+...+i+...+n] + n(1-p)
当我看到像这样的算法时,我可以遵循一个通用公式来计算它吗?
下面的图片 Textbook example
答案 0 :(得分:3)
= (p/n)[1+2+...+i+...+n] + n(1-p)
p
这里是在数组中找到搜索键的概率,因为我们有n
个元素,我们有p/n
作为在特定索引内找到键的概率n
。我们基本上在每次迭代中进行加权平均,我们在1比较,2比较和直到n比较中权衡。因为我们必须考虑所有输入,所以第二部分n(1-p)
告诉我们数组1-p
中不存在输入的概率。当我们搜索整个数组时,需要n
。
答案 1 :(得分:1)
您需要考虑输入案例,类似于输入的等价类,这取决于算法的上下文。如果这些事情都不知道,那么假设输入是一个随机整数数组,平均情况可能是O(n)。这是因为,粗略地说,您无法在有用的范围内证明在〜-32k到~32k范围内的N个整数值数组中查找查询的频率。
答案 2 :(得分:0)