私が言及しているアプローチは、デュアルポインタ技術です。ここで、最初のポインターは単純なイテレーターであり、2番目のポインターは最初のポインターに関連する以前のすべての値のみを通過します。
そうすれば、ノードごとに他のすべてのノードと比較した場合よりも、実行される作業が少なくなります。これは最終的にO(n ^ 2)になります。
私の質問は、デュアルポインタ方式の速度とその理由です。
私が言及しているアプローチは、デュアルポインタ技術です。ここで、最初のポインターは単純なイテレーターであり、2番目のポインターは最初のポインターに関連する以前のすべての値のみを通過します。
そうすれば、ノードごとに他のすべてのノードと比較した場合よりも、実行される作業が少なくなります。これは最終的にO(n ^ 2)になります。
私の質問は、デュアルポインタ方式の速度とその理由です。
したがってN
、リストに要素がある場合、要素の重複排除を行うには比較i
が必要になります(その背後に値があります)。したがって、比較の総数をとして設定できます。この合計は、に評価されます。これは、の場合よりも厳密に小さくなります。i
i
sum[i = 0 to N] i
N(N+1)/2
N^2
N > 1
編集:合計を解決するには、次のようにアプローチできます。
1 + 2 + 3 + 4 + ... + (n-2) + (n-1) + n
ここから、反対側の数字を一致させることができます。これはその後になることができます
2 + 3 + ... + (n-1) + (n+1)
1
開始時と終了時を一致させることによってn
。とで同じことを2
行い(n-1)
ます。
3 + ... + (n-1+2) + (n+1)
になります
3 + ... + (n+1) + (n+1)
n/2
毎回2つの数字を一致させているので、この回数を繰り返すことができます。これn/2
により、用語の出現が残り(n+1)
ます。それらを掛けて単純化すると、(n+1)(n/2)
またはが得られn(n+1)/2
ます。
詳細については、こちらをご覧ください。
また、これは、この合計がまだのビッグシータを持っていることを示唆していn^2
ます。