计算算法的Theta(n)

时间:2016-01-31 19:53:58

标签: algorithm big-o big-theta

我正在尝试计算以下算法的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,但我不确定θ是什么。有什么想法吗?

2 个答案:

答案 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)。