組み込み関数のPythonのビッグO時間の複雑さと時間の複雑さ

免責事項:この記事はからの一部抜粋である

Pythonのウィキからのこの翻訳
GPL v2プロトコルに基づいては、本契約を保管してください再現しました。

このページには、いくつかの方法(または「大欧州」、「ビッグO」)Pythonの時間の複雑さをカバーしています。電流に基づく計算の時間複雑(翻訳:少なくとも2011年前)はCPythonの実装。他のPythonの実現は、(古いバージョンを含むことはCPythonの開発や実現の下にまだある)わずかなパフォーマンスの違いはほとんどが、一般的ではない、複数のO(ログn)のアイテムかもしれません。

本明細書で使用される「n」は、容器内の要素の数を表し、「k」は、パラメータの代表値、またはパラメータの数です。

1.リスト(一覧)

平均的なケースを考慮した完全にランダムなリスト。

リストは、配列(アレイ)の実装です。最大電流は、コスト割り当てサイズ成長で発生超えて、すべての要素は、この場合を移動する必要があり、すべての要素が移動すべき位置の後方である場合には開始位置、近傍の要素を挿入または削除のいずれか。あなたはキューの両端に操作を追加または削除する必要がある場合collections.deque(両端キュー)を使用する必要があります

動作は平均最悪の場合
はO(n)O(N)をコピーするための
追記[注釈1] O(1)O( 1)
O(N)O(N)が挿入されている
O(1)O(1)を有する素子の
素子Oを変更することを(1)O(1)
元素Oを除去するために(N)O(N)
トラバーサルO(N)O(n)が
撮影したスライスO(k)はO(K)
スライスO(N)O(N)を除去する
(変更するスライスO K + N-)O(K + A n-は)
[注1] O拡張(k)はO( k)の
順序O(N Nログ)O( N Nログ)
乗算O(NK)O(NK)リスト
X S Oでの(N)
分(S)、MAX(S)O(N)
O(1)O(1)の長さを計算します

2.双方向キュー(collections.deque)

二重リンクリスト(まあ、より高い効率のための配列ではなくオブジェクトのリスト)の形で実現デック(両端キュー、両端キュー)。ダブルエンドの両端は、キューが到達可能ですが、遅くキュー要素の中央を見つけるさらに遅いの要素を追加または削除します。

動作は平均最悪の場合
O(N)O(N-)コピーする
追記Oを(1)O(1)
appendleft O(1)O(1)
POP O(1)O(1)
popleft O(1)O(1 )
O(K)、O(K)拡張
extendleft O(K)、O(K)
回転O(K)、O(K)を
)O(N)O(N-を削除

3.コレクション(セット)

リストされているものの辞書を参照してください - の両方が非常に似て達成。

操作平均場合、最悪の場合
、X中のS O(1)O (N)
と集合S | T O(LEN(S )+ LEN(t))の
交点S&T O(MIN(LEN (複数可)、lenの(T)) O(LEN(S)* LEN (t))と
の差分セットO ST(LEN(S))
s.difference_update(T)O(LEN(T))
対称差S ^ T O(LEN(S ))Oを( LEN(S)* LEN(T))
s.symmetric_difference_update(T)O(LEN(T))O(LEN(T)* LEN(S))
ソース、差分セット(ST、又はs.difference (t)は)差集合演算(s.difference_uptate(t))の計算時間の複雑で更新されているのと同じではありません!前者はSであり、Tはなく、コレクションに追加された新しい要素では、時間の複雑さ程度O(LEN(S));後者の要素から除去されるS中のTで、時間計算量はO(LEN(T))したがって、使用にしてください注意を払う、二組に応じました。サイズと新しいコレクションの必要性は、適切な方法を選択します。

STは、操作を設定し、トンでもセットでなければならない必要はありません。Tは長いオブジェクトを横断することが可能です。

4.辞書(dictの)

以下の仮定に基づいて、辞書、次の平均的なケース:

  1. ハッシュ関数オブジェクト十分なライン、バー(堅牢)、競合しません。
  2. ランダムに選択されたすべての可能なキーのセットから、辞書のキー。

ヒント:辞書の​​キーとして文字列だけを使用します。そうしながら、アルゴリズムの時間計算量には影響を与えませんが、定数項は、あなたがより多くのスプリント仕上げを持つことができるプログラムを決める重要な影響を持つことになります。

操作平均最悪の場合
コピーにO [注2](N)O( N)
O(1)O(N)を有する要素の
要素を変更する[注1] O(1)O( N)
元素O(1)Oを除去します(N)
トラバーサル[注2] O(N)O( N)

注意:

[1]これらの操作は、「償却最悪のケース」の「償却」の部分に依存しています=。個々のアクションは、コンテナの履歴によって、驚くほど長くかかる場合があります。

[2]は、これらの動作については、最悪の場合の= N容器はこれまでむしろ単に現在の大きさよりも、達成された最大サイズです。Nオブジェクトが辞書に追加された場合、N-1が削除された別の挿入が行われるまで、例えば、辞書は依然としてN個のオブジェクト(少なくとも)のために寸法決めされます。

おすすめ

転載: www.cnblogs.com/zhoubindut/p/12229343.html