Pythonの標準ライブラリにAVLツリー、赤黒木、またはその他のタイプの平衡二分木用のモジュールはありますか?
7 に答える
いいえ、stdlib にはバランスの取れたバイナリ ツリーはありません。ただし、コメントから、他にもいくつかのオプションがあるように思えます。
O(log n)
あなたは、検索用のリストではなく BST が必要だと言っています。検索だけが必要で、データが既にソートされている場合、bisect
モジュールはリストのバイナリ検索アルゴリズムを提供します。- Mike DeSimone が set と dicts を推奨し、リストがアルゴリズム的に遅すぎる理由を説明しました。セットとディクテーションは、O(1) ルックアップを持つハッシュ テーブルとして実装されます。Python のほとんどの問題の解決策は、実際には「dict を使用する」ことです。
どちらのソリューションもうまくいかない場合は、サード パーティのモジュールを使用するか、独自のモジュールを実装する必要があります。
私が見る限り、stdlibにはこの種のものはありませんが、pypiをざっと見ると、いくつかの選択肢があります。
heapq パッケージ(標準ライブラリ内) が役立つことがわかった例がいくつかあります。特に、コレクション内の最小要素への O(1) アクセス時間が必要な場合は特にそうです。
私にとっては、タイマーのコレクションを追跡していて、通常は最小の時間 (最初に実行される時間) がまだ準備できているかどうかを確認することに関心がありました。
Sorted Containersプロジェクトもチェックしてください。
これについての PyCon の話は次のとおりです: https://www.youtube.com/watch?v=7z2Ki44Vs4E
ubalanced、AVL、および RB ツリーをサポートする「bintrees」と呼ばれる新しいパッケージがあります。ここで見つけることができます。
いいえ。ただし、Python用のAVLツリーオブジェクト(非常に古い!)とSourceForgeの(クローズド)プロジェクト(Python用のavl-trees )があります。