ふと思いついた方法。『ランダムソート』で調べても納得いくのが出なかったから考えたけど、
もっとちゃんと調べればこれぐらいのことは普通に出てる気がする、けど見つからなかったのでメモ。
- 欠点
必ずソート元の数だけ新たに変数の保存場所を用意する必要があり、一時的ながら変数の数が倍に増える。
というか、仮の保存すらしない方法とか思いつかないです。
- 利点
ソート元の数が増えても試行回数はソート元の数固定なので加速度的に処理時間が増えたりはしない。
ついでに、恐らくは使用する乱数の精度がそのまま結果に反映されるので、変な偏りが発生しにくい。
山9枚: ① ② ④ ⑤ ⑥ ⑦ ⑧ ⑨ 】
↓『③を選択!』
仮1枚: ③ 】
- 山札から無作為に1つ選択(ここでは③)
- 仮山の1枚目として設定(仮山1枚目③)
山9枚: ① ② ④ ⑤ ⑥ ⑦ ⑧ ⑨ 】
山8枚: ① ② ⑨ ④ ⑤ ⑥ ⑦ ⑧ 】
- 山札の抜け穴を最後尾の数で埋める(⑨を③の位置に移動)
- 移動して空欄になった最後尾を1つ分だけ詰める
山8枚: ① ② ⑨ ④ ⑤ ⑥ ⑧ 】
↓『⑦を選択!』
仮2枚: ③ ⑦ 】
- 最初と同様に無作為に選択(ここでは⑦)
- 仮山の2枚目として設定(仮山は順に③、⑦)
山8枚: ① ② ⑨ ④ ⑤ ⑥ ⑧ 】
山7枚: ① ② ⑨ ④ ⑤ ⑥ ⑧ 】
( …… 中略 …… )
山4枚: ⑤ ⑧ ⑥ 】
↓『④を選択!』
仮6枚: ③ ⑦ ② ⑨ ① ④】
山4枚: ⑤ ⑧ ⑥ 】
山3枚: ⑤ ⑧ ⑥ 】
- そのまま空欄部分を詰めるだけ。
抜け穴を最後尾で埋める作業が省略されるけど、流れは変わらない。
.
最終更新:2011年04月26日 02:08