我正在尝试计算以下算法的Theta(n)
for i = 1 -> n
for j = 1 -> n
B[i,j] = findMax(A,i,j)
findMax(A,i,j)
if j < i
return 0
else
max = A[i]
for k = i + 1 -> j
if max < A[k]
max = A[k]
return max
我知道O,theta和omega大致翻译为
O≈≤
Ω≈≥
Θ≈=
对于算法,我认为omega = n ^ 2,o = n ^ 3,但我不确定θ是什么。有什么想法吗?
答案 0 :(得分:3)
如果计算代码行的次数
function folderFleList($dir, $menu_class, $level = 1){
$ffs = scandir($dir);
echo "<ul class=\"".$menu_class."\">\n";
foreach($ffs as $ff){
if($ff != '.' && $ff != '..'){
echo '<li class="menu-item">
<a href="#" class="menu-link-level-' . $level . '">'.$ff;
if(is_dir($dir.'/'.$ff))
folderFleList($dir.'/'.$ff, "menu-sublist", $level+1);
echo '</a></li>';
}
}
echo "</ul>\n";
}
folderFleList($directory, "menu-list");
根据{{1}}执行执行Theta(n ^ 3)执行
。因此,算法的运行时间也是Thetat(n ^ 3)。
答案 1 :(得分:2)
西塔(N ^ 3)。嵌套for循环有n ^ 2次迭代。当j <1时,这些迭代中的大约一半在O(1)时间内运行。一世。这些迭代的另一半平均具有j-i的n / 2差异,因此另一半迭代占用Theta(n / 2)时间。由于大约一半的n ^ 2次迭代平均花费n / 2次,因此对于一半的迭代,n ^ 2/2 * n / 2 = n ^ 3/4 = Theta(n ^ 3)时间。 n ^ 2次迭代的另一半取n ^ 2/2 = Theta(n ^ 2)时间。因此总运行时间= Theta(n ^ 3)。