add()を呼び出すことによって、配列がランダムな空の位置に塗りつぶされているデータ構造を構築しようとしています。ある位置が満たされると、別のadd()によって上書きされることはありません。 remove(i)を呼び出すと、A [i]の位置が解放されます。 add()とremove()の呼び出しを混在させることができます。ランダムに配列を塗りつぶす
私の最初の考えは、add()が呼び出されるたびに0からn-1の間の数字をランダムに生成することでした。それが空であれば、それを記入してください。一杯になったら、空のものが見つかるまで順次検索してください。しかし、これには2つの問題があります。1)配列がほとんどいっぱいの場合、O(n)時間に近づきます。2)ランダム選択は一様ではありません。
2番目の考えは、1からn-1までのシャッフルを使用してこの順番で追加することでしたが、これはremove()をサポートしていません。
これは、add()とremove()に対して一定のパフォーマンスを保証する方法を実装していますか?