配列、リンクリスト、ハッシュテーブルなど、最も一般的なデータ構造の操作に関するビッグO表記の要約はありません。
このトピックに関する情報は、Wikipediaで利用可能になりました: 検索データ構造
+----------------------+----------+------------+----------+--------------+
| | Insert | Delete | Search | Space Usage |
+----------------------+----------+------------+----------+--------------+
| Unsorted array | O(1) | O(1) | O(n) | O(n) |
| Value-indexed array | O(1) | O(1) | O(1) | O(n) |
| Sorted array | O(n) | O(n) | O(log n) | O(n) |
| Unsorted linked list | O(1)* | O(1)* | O(n) | O(n) |
| Sorted linked list | O(n)* | O(1)* | O(n) | O(n) |
| Balanced binary tree | O(log n) | O(log n) | O(log n) | O(n) |
| Heap | O(log n) | O(log n)** | O(n) | O(n) |
| Hash table | O(1) | O(1) | O(1) | O(n) |
+----------------------+----------+------------+----------+--------------+
* The cost to add or delete an element into a known location in the list (i.e. if you have an iterator to the location) is O(1). If you don't know the location, then you need to traverse the list to the location of deletion/insertion, which takes O(n) time.
** The deletion cost is O(log n) for the minimum or maximum, O(n) for an arbitrary element.
リンクリストの時間の複雑さから始めましょう。
インデックス作成----> O(n)
最後に挿入/削除----> O(1)またはO(n)
途中で挿入/削除---> O(1)with iterator O(n) with out
最後に挿入する時間の複雑さは、最後のノードの場所があるかどうかによって異なります。ある場合は、O(1)になります。リストと時間の複雑さはO(n)にジャンプします。
独自のデータ構造(Cのリンクリストなど)を記述している場合を除き、選択した言語/フレームワークでのデータ構造の実装に大きく依存する可能性があることに注意してください。例として、 Ridiculous FishでのAppleのCFArrayのベンチマーク を見てください。この場合、データ型(AppleのCoreFoundationフレームワークのCFArray)は、実際に配列内にあるオブジェクトの数に応じてデータ構造を実際に変更します。
これは、実際にはオブジェクト指向プログラミングのすばらしい点の1つです。howを知る必要はありません。ただthat動作し、「動作方法」は要件に応じて変更できます。
これほど便利なものはありません: 一般的なデータ構造操作 :
赤黒の木:
ハッシュテーブルの償却Big-O:
ハッシュアルゴリズムには一定の要因があり、償却とは、実際に測定されたパフォーマンスが劇的に変化することを意味することに注意してください。