Python クラスには、次に示す 6 つの要件があります。太字の用語のみが要件として読み取られます。
- 次の 4 つの操作の多くで、O(1)に近いパフォーマンス。
- オブジェクトをコンテナに挿入する際にソート順を維持します。
- オブジェクトに含まれる最後の値 (最大値)を覗く機能。
- 両側でポップを許可します(最小値または最大値を取得します)。
- 格納されているオブジェクトの合計サイズまたは数を取得する機能。
- Pythonの標準ライブラリのコードのような既製のソリューションであること。
以下は、歴史的な理由からここに残されています (好奇心を助け、研究が行われたことを証明します)。
Python の標準ライブラリ (具体的にはデータ型に関するセクション) を調べた後でも、断片化テーブルの要件要件を満たすクラスをまだ見つけていません。collections.deque
必要なものに近いですが、それに含まれるデータをソートしたままにすることはサポートされていません。以下を提供します。
- O(1) パフォーマンスで両端キューの両側に効率的に追加およびポップします。
- オブジェクト内に含まれるデータの両側でポップします。
- 内部に含まれるオブジェクトの合計サイズまたは数を取得します。
リストを使用して非効率的なソリューションを実装するのは些細なことですが、適切に機能するクラスを見つけることははるかに望ましいことです。上限のない増大するメモリ シミュレーションでは、このようなクラスは、空の (削除された) セルのインデックスを保持し、断片化レベルを低く抑えることができます。bisect
モジュールが役立つ場合があります。
- 配列に新しいオブジェクトを挿入する際に、配列をソート順に保つのに役立ちます。
- オブジェクトが追加されたときにリストをソートしておくための既製のソリューション。
- 実行すると、配列内の最後の値
array[-1]
を覗くことができます。
要件を完全に満たすことができず、最も見込みがないと思われる最終候補はheapq
モジュールでした。効率的な挿入のように見えるものをサポートし、それarray[0]
が最小値であることを保証する一方で、配列は常に完全にソートされた状態にあるとは限りません。これほど役立つものは他にありませんでした。
これらの 6 つの要件に近いPython のクラスまたはデータ構造を知っている人はいますか?