2017-11-24 15 views
-1

の計算私は、次のC++の関数のためのビッグ-Oランタイムを計算すると、いくつかの指針を緊急に必要としてよ:ビッグ-Oランタイム

Fraction Polynomial::solve(const Fraction& x) const{ 
    Fraction rc; 
    auto it=poly_.begin(); 
    while(it!=poly_.end()){ 
     Term t=*it; 
     //find x^exp 
     Fraction curr(1,1); 
     for(int i=0;i<t.exponent_;i++){ 
      curr=curr*x; 
     } 
     rc+=t.coefficient_*curr; 
     it++; 
    } 
    return rc; 
} 

これはまだ私には新しい概念であるので、私は持っていますそれを正しいものにするのに少し問題があります。私は、少なくとも2つの操作が1回起こると仮定しています(auto it = poly_.begin、そして最後にrcを返します)が、whileループを使って操作数を数える方法がわかりません。私の教授によると、正しいランタイムはO(n)ではありません。もし誰かが何か指導をしてもらえれば、大いに感謝します。私はこの質問に答える方法を理解したいが、私はこの機能のようなものをオンラインで見つけることができなかったので、ここにいる。ありがとうございました。

+0

ループ内にループがあります。それはあなたに何を示唆していますか? – PaulMcKenzie

+0

より簡単な問題を解決してみてください。たとえば、実行時に内部のforループがないとすると、どうなりますか? –

答えて

0

になります(私たちはA_n*X^n + ... + A_0を言わせて)で与えられた点(分数として与えられるので有理値)。

最初のwhileループは、多項式のすべての個々の要素を繰り返し処理します。 n次の多項式の場合、それはn + 1の反復をもたらすので、外側のループだけがO(n)時間かかる。 しかし、多項式の各項(ランクiと言う)については、X^iの値を計算しなければならず、それは内部のforループの値です。それは線形の複雑さをもたらす線形方法を用いてX^iを計算します:O(i)。

ネストされたループが2つあるため、ループの最悪の時間複雑度を掛け合わせることで全体の複雑さが得られます。結果として生じる複雑さは、O(n)* O(n)= O(n^2)によって与えられる。 (第1項はwhileループの複雑さを示し、第2項はX^iの計算のための最悪の場合の時間複雑度を示し、O(n)はi == n)。

+0

ありがとうございます@Polb、この主題の私の限られた知識であっても、私はあなたの説明と関数を通過することができました。 – zzzzz

0

これはn次の多項式であると仮定します(最高の項はnのべき乗になります)。

外側のwhileループでは、n + 1項を繰り返します(両側に0〜nを含む)。

各項について、内側のforループでは、mを現在の項のべき乗であるm倍にします。これはn次の多項式なので、mは0からnの範囲です。平均して、乗算はn/2回行います。

全体の複雑さは、私はあなたが特定の多項式を評価するとしO((N + 1)*(N/2))= O(N^2)

+0

コメントありがとうございました@lamandy。これは愚かな疑問かもしれませんが、平均して、乗算はn/2回実行されるとはどう思いましたか?私はその部分をかなり理解していませんでした。 – zzzzz

+0

最も低い項はx^0であり、最も高い項はx^nであり、これらの2項に必要な平均乗算はn/2です。同様に、x^1とx ^(n-1)、x^2とx ^(n-2)などとのペアも同様です。より正式な説明が必要な場合は、0 + 1 + 2 + 3 + ... + n (n^2 + n)/ 2を与える。(n + 1)項があるので、平均でn/2の乗算を得る。これは、係数が0のときに関数が乗算をスキップしないことを考慮しているため、0 * x = 0の場合でも乗算は引き続き実行されます。 – lamandy

+0

Big-O表記を求めていることを考慮して、とにかく最悪の場合のシナリオを探す必要があるので、上限を求めています。スキップ0の係数最適化を考慮する意味はありません。もしあなたの教授がこの質問をもっと挑戦したいのであれば、彼はその最適化を組み込み、Big OとBig OmegaまたはBig Theta記法を尋ねることができます。 – lamandy

関連する問題