N 個の要素を持つリストがあり、その順序をランダム化したい。
できれば最小限の計算で、メモリを使い切ることができます (合計を複製します)。
これまでのところ、私は思いついた:
- 新しい空のリストを作成し、元のリストから最初の要素を取得し、それを新しいリストのランダムな位置に挿入します。桁数は O(N*N) のように見えますが、余分なメモリは使用されません。
- 新しいArrayList(容量N)を作成します(したがって、アクセスはO(1)です)、新しいhashSetを作成し、可能なすべての位置(N)を挿入し、元のリストの最初の要素を取得して、新しいarrayListのランダムな位置に挿入しますti が使用されているため、hashSet からこの位置を削除します。
- 新しい HashSet を作成し、すべての要素をこの hashSet に追加し、セットを反復処理して新しい List を作成し、hashSet 内の順序がランダムであることを期待します。
最も安価なのは 3 番目のオプションのようですが、結果がどれほどランダムになるかはわかりません。助言がありますか?