リンクリストがあり、関数を実装したい:
Random_Shuffle_List (struct node **Headptr)
-すべてのノードが元の位置からランダムに移動するようにリストを出力します。
これを達成するための効率的なアルゴリズムを手伝ってください。
リンクリストがあり、関数を実装したい:
Random_Shuffle_List (struct node **Headptr)
-すべてのノードが元の位置からランダムに移動するようにリストを出力します。
これを達成するための効率的なアルゴリズムを手伝ってください。
単純なアプローチをお勧めします。
もちろん、これは比較的少量の余分なメモリを使用しますが、リンクされたリストで直接作業するアプローチよりも、実装(および理解)時間とおそらく実行時間の点で「効率的」だと思います。
リンクされたリストを逆にして、中間ノードと終了ノードを交換するだけです。これでうまくいくと思います。複雑さはO(n)になります。
n
a
、b
)を生成します。0
n
a
2 つのノードと を入れ替えb
ます。m
回繰り返します。これは良い方法ではありませんが、@unwind の提案のように追加のメモリは必要ありません。
@unwind のソリューションでできることの 1 つは、ウィンドウを使用することです。
w
w
(ウィンドウ) の重複しない 2 つのサブリストを形成できるように、リンク リスト内の 2 つのランダム ノードを選択します。m
時間を行います。