整数のプールを管理するのに役立つデータ構造を探しています。プールから整数をしばらく削除してから、再び使用されることを期待して元に戻すという点で、これはプールです。ただし、他にもいくつかの奇妙な制約があるため、通常のプールはうまく機能しません。
ハード要件:
- 使用中の最大の整数への一定時間アクセス。
- 整数のまばらさを制限する必要があります (原則としてのみであっても)。
整数を互いに近づけて、範囲内の未使用の整数を最小限に抑えてすばやく反復できるようにします。
データ構造の選択に役立つ場合はこれらを使用し、そうでない場合は無視します。
- プール内の整数は 0 ベースで連続しています。
- プールは一定のサイズにすることができます。
- プールからの整数は、解約率の高い短期間のみ使用されます。
私は実用的な解決策を持っていますが、それはエレガントではありません。
私の(準最適)ソリューション
一定サイズのプール。
利用可能なすべての整数をソート済みセット (free_set) に入れます。
新しい整数が要求されると、free_set から最小のものを取得します。
使用中のすべての整数を別のソート済みセット (used_set) に入れます。
最大が要求されると、used_set から最大のものを取得します。
私の特定のソリューションに役立つ可能性のある最適化がいくつかあります(優先キュー、メモ化など)。しかし、私のアプローチ全体が無駄に思えます。
私の問題に完全に適合する難解なデータ構造があることを願っています。または、少なくともより優れたプーリング アルゴリズム。