構造のような大きな永続配列を実装するためにどのような種類のデータ構造を使用しますか(サイズ> 10 Mio要素)
データ構造のインターフェースは、次の操作をサポートする必要があります。
YType get(IdxType idx) // random access
void insertIdx(IdxType idx, YType yValue) // random insert
void deleteIdx(IdxType idx) // random delete
インデックスを、スカラー値または構造体IdxType
などのスカラー符号なし値とします。unsigned long long
YType
これらの操作の複雑さはO(log n)より大きくなることはなく、ランダムアクセスの複雑さがしばらくしてO(1)に下がると、多くのユースケースで読み取り操作が最も使用されるため、非常に効率的です。
ベクトルの挿入の複雑さはO(n)であり、リストのランダムアクセスもO(n)であるため、これらの要件は、ディスクに書き込むことができるベクトルやリストなどのメモリデータ構造を除外します。
編集:
インデックスキーを持つデータ構造のようなハッシュマップまたはツリーは要件を満たさないことに注意してください。特定のインデックスの値は変更される可能性があります。つまり、インデックスの値を挿入すると、後続のすべてのインデックスの値が変更されます。これは、要素を挿入するときに、配列内の後続のインデックスに起こることとまったく同じです。