0

私はアルゴリズムコースから得たこの宿題で立ち往生しています:

ランタイムが Theta(n^4 logn) の再帰関数を記述します。

私はこのようなことを考えましたが、私のアプローチについては非常に確信が持てません。

function(int n)
{
   for-loop (1..n^4)
     //do something

   return function(n/2);
}
4

3 に答える 3

1

あなたの関数にはいくつかの問題があります:

  1. 初期値はなく、永久に実行されます。
  2. 関数の初期値を設定すると、次のようになります。

    T(n) = T(n/2) + O(n^4)

マスター定理により、これは Θ(n^4) です。

ヒント: の係数を増やす必要がありますT(n/2)が、どれくらいですか? 自分で見つけてください。この増加のために、あなたはそれをx倍と呼ぶことができます。


マスター定理log nによると、次のような再帰がある場合に発生します。

T(n) = a T(n/b) + n a/b

あなたの場合、a/b = 4 があるので、これを達成するために b = 2 と a = 8 を修正できます。

T(n) = 8T(n/2) + n 4

これに到達するには、T(n/2) を 8 回呼び出すことができます。

于 2012-05-07T10:34:59.807 に答える
0

ヒント: n 4は、1 から n までの 4 つのネストされたループである可能性があります。対数ランタイム係数は、通常、問題のサイズを 1 に達するまで再帰的に半分にすることによって得られます。

func(int n)
  for i = 1 to n^4 log n
     nop()

しかし、これが探し求められているものだとは思いません。

于 2012-05-07T10:34:43.703 に答える
-1

あなたのアプローチは正気であり、あなたの不安は正常です。アルゴリズムが Theta(n^4 log n) であることを証明する必要があります。通常のアルゴリズム分析手法を適用して、n^4 log_2 n 回function実行することを示します。do something

ヒント: 再帰的に呼び出された回数functionと、各呼び出しでループが実行される頻度を数えます。関数にはまだ小さなバグがあることがわかります。因子のはn、再帰呼び出しごとに削減されます。n^4

于 2012-05-07T10:35:49.027 に答える