web-dev-qa-db-ja.com

Pythonの標準ライブラリ-平衡二分木用のモジュールはありますか?

Pythonの標準ライブラリにAVLやRed-Black、または他のタイプのバランスの取れたバイナリツリーのモジュールはありますか?私はそれを見つけようとしましたが、失敗しました(私はPythonが比較的新しいです)。

64
aeter

いいえ、stdlibにはバランスの取れたバイナリツリーはありません。ただし、コメントからは、他のオプションがあるかもしれません。

  • O(log n)検索のリストではなく、BSTが必要だと言います。検索が必要なだけで、データが既にソートされている場合、bisectモジュールはリストのバイナリ検索アルゴリズムを提供します。
  • Mike DeSimoneはセットと辞書を推奨し、リストがアルゴリズム的に遅すぎる理由を説明しました。セットと辞書はハッシュテーブルとして実装され、O(1)ルックアップ。Pythonの実際の使用は辞書を使用することです。

どちらのソリューションもうまく機能しない場合は、サードパーティのモジュールにアクセスするか、独自のモジュールを実装する必要があります。

33
Mike Graham
14
SilentGhost

heapq package (標準ライブラリ内)が有用であることがわかったいくつかの例がありました。特に、任意の時点でO(1) =コレクション内の最小要素へのアクセス時間。

私にとっては、タイマーのコレクションを追跡していましたが、通常は、最小時間(最初に実行される時間)がまだ準備ができているかどうかを確認することに興味がありました。

9
Paul Osborne

「bintrees」と呼ばれる、ubalanced、AVL、RBツリーをサポートする新しいパッケージがあります。見つけることができます こちら

6
Zaur Nasibov

Sorted Containers プロジェクトもチェックしてください。

これについてのPyConの講演は次のとおりです。 https://www.youtube.com/watch?v=7z2Ki44Vs4E

4
postrational

いいえ、しかし PythonのAVLツリーオブジェクト (非常に古い!)とSourceForgeの(閉じた)プロジェクトがあります- Pythonのavl-trees

2
AndiDog