我总是难以分析随机算法的运行时间。如果有人可以向我解释这一点,我将不胜感激。
以我编写的以下代码为例;
它检查数组中至少出现 n/4 次的元素。(n 是数组的大小)。它从数组中选择一个随机数,检查它是否出现 n/4 次。如果是,它会返回它。否则它会删除所有出现的元素并继续。
假设数组中至少有一个这样的元素至少出现 n/4 次。
elements_left = n ;
frequency ( A[] )
{
k -> pick a random element from A[] ;
int count = 0;
int delete_count = 0;
for (i=0 ; i < elements_left ; i++)
{
if (a[i] = k)
count++ ;
}
if (count >= n/4)
return A[i] ;
exit ;
else
{
for (i=0 ; i < elements_left ; i++)
{
if (A[i] = k)
delete (A[i]) ;
delete_count ++ ;
}
elements_left = n - delete_count ;
}
frequency (A[])
}
该算法的最坏情况运行时间和预期运行时间是多少,您将如何得出它?
谢谢。