2017-03-27 4 views
0

T(n)=1+2+3+...+nの複雑さは何ですか?答えはO(n^2)です。ランタイムT(n)を持つアルゴリズムの例は何ですか?1 + 2 + 3 + ... + n sumアルゴリズムの例

EDIT:私は1 + 2 + 3 + ... + nの合計を計算することについて話していませんでした。

+0

algoriothms任意プライム篩を用い

  • 間隔パーティションを二分探索を使用してソート
  • LISをマージし、なぜあなたはそれが 'O(n^2)'だと思いますか? –

  • +0

    私はこれを計算で一度行ったことを覚えています。この合計1 + 2 + 3 + ... + nはn(n + 1)/ 2と等しく、乗算を実行するとO(n^2)。私が間違っている場合は私を修正してください。 – Kamoukou

    +0

    'n(n + 1)/ 2'は単に' O(1) 'の定数です。ここでは 'n!= O(n)'をクリアするために、実際の数 'n'を参照しています。 –

    答えて

    -2

    関数の成長の順序は、完了するために必要な操作の数と関係があります。 O(n)を持つ関数の例は、あなたが質問で言及した関数の遅いバージョンです。 Pythonで:

    これは、完了に要する時間がnに基づいて線形になるため、O(n)になります。

    質問で例として挙げた関数は、n(n+1)/2という操作を1回だけ行うだけで、実際はO(1)です。 n(n+1)/2を計算するのに要する時間は、バーのバックエンドクォークを変更することはありませんが、このような場合には、実際にはとなりません。

    +1

    問題は合計を計算するのにどれくらいの時間がかかったのではなく、関数T(n)をbig-Oとして漸近的に表現することでした。 – interjay

    +0

    質問が編集されました。結果を計算するためのO(n^2)の(誤った)仮定に対する代替的な例についてでした。記述された例の結果は、O(1)で計算することができます。これは、真の正しい代替方法です。あなたが本当にそれを望むなら、O(n)は自明です:ちょうどループと和。 T(n)= 1 +(1 + 2)+(1 + 2 + 3)+ ... +(1 + 2 +3 + ...)ではないので、O+ n)ですが、今では、すでに解決されている数学ではなく、意味論を主張しています。 –

    +1

    @ SteveHarris質問の意図は、編集の前後で同じでした。 T(n)はアルゴリズムではなく、別のアルゴリズムの実行時間です。問題はどのアルゴリズムがT(n)の実行時間を有するかを尋ねる。そして、問題は、T(n)がO(n^2)のクラスにあるということで正しい。 – interjay

    6

    ランタイムT(n)を持つアルゴリズムの例を教えてください。

    あなたはn回とiは、外側のループの指標であるi回反復し、内側のループを反復する外側のループを持っている場合は、内側のループの本体はT(n)回実行されます。

    以下のアルゴリズムであろうそのようなネストされたループの例:

    1 
    1 2 
    1 2 3 
    
    +0

    Upvotedですが、 'print" $ j "'が〜log_10(j)文字を出力するので、議論の余地があります。 1文字を基本操作として出力するとカウントすると、その例はO(n^2 log n)になります。何が印刷されていても、print文をO(1)と見なすと、O(n^2)になります。 –

    +1

    @PaulHankin私は、内側のループのボディが 'T(n)'回実行されていると主張するだけで、私はその点で私のお尻をカバーしたと思うのですが(確かに尋ねられたものではありませんでした);-)その問題を解決できます"$ j"の代わりに "*"を印字してください。それは実際に宿題のより一般的な変形であるかもしれません。 – sepp2k

    0

    :共通の宿題に溶液であり、以下の形状の数ピラミッドを印刷

    for i from 1 to n 
        for j from 1 to i 
         print "$j " 
        print "\n" 
    

    挿入ソートでは、最悪の場合、有界時間ステップであるT(n)=1+2+3+...+nが必要です。選択ソートでは、毎回多くの手順が必要ですが、一般的ではありません。

    3

    @ sepp2kは素晴らしい答えを与えるが、ここではその最悪のケースで


    Insertion Sort(したがって、私たちはこのようなアルゴリズムO(n^2)と呼ばれる)T(N) = 1+2+3+...+nがあり、いくつかの実際の生活のアルゴリズムである: をそれは外側のループを持っていますループn回、内部ループの場合は配列のソートされた部分をループして次の要素を挿入する位置を探します。ソートされた部分は外側ループの繰り返しごとに1ずつ増加するため、最悪の場合の内側ループは1+2+3+4+..+n-1

    間隔をソートした後、用:各反復 iのために、私たちは素朴な実装を使用して、すべての j < i

    Interval Graph Coloring(インターバル・パーティション)を介して見ている漸化式 の直接実装:naive implementationを使用して

    Longest Increasing Subsequence(LIS)各間隔xの場合、xと矛盾するまでにいくつの間隔を見つけなければならず、問題の答えは最大矛盾番号です。だから、外側のループは、各区間iをループしている間に、内側のループは、ナイーブ素数判定テストを使用して、すべてのj < i

    Prime Generatingのためにループしている:もちろん、我々は内のすべてのiにナイーブ素数判定テストを使用して、n内のすべての素数を生成することができますn。それはji


    を分けるかどうかを確認するために、すべてのj < iため、我々ループ、すべてのiのために、ある確かに多くのアルゴリズムは、このような構造を含む、と私は見ているそれらのほとんどが使用することによって改善することができるがありますより鮮明なアルゴリズムまたは高度なデータ構造。

    • クイックソート/プライオリティキュー
    • を `O(N) 'で行うことができる
    関連する問題