2

リバーシブルなソートのアルゴリズムを知っている人はいますか?だからこれを考えると:

5,39,196,0,15,243

並べ替えは次を作成します:

0,5,15,39,196,243

そして、おそらくどのソートアルゴリズムが使用され、何回の反復が実行されたかを除いて、知識を必要とせずにそれを元に戻すと、次のようになります。

5,39,196,0,15,243

バブルソートが機能する可能性があることに気づきました。ソートを何回実行する必要があるかを知っていれば、おそらくその回数だけ手順を逆にして元に戻すことができます。他にありますか?

これは実験用であるため、時間の複雑さは問題になりません(どれほど遅いかは関係ありません)。

4

2 に答える 2

2

実行時の効率に本当に関心がない場合は、順列ソートを使用できます。

リストのすべての順列を生成し、リストが順序付けられている順列を確認します。ソートされたリストを見つける前に実行したラウンド数がわかれば、そこに到達するためにどの値がスワップされたかを正確に知ることができます。

ソートされていないリストで実行し、ソートされたリストに到達するために50ラウンドを実行する必要がある場合、そこに到達するためにどの要素がスワップされたかを正確に把握し、ソートを逆にすることができます。

于 2012-09-01T12:20:46.290 に答える
2

通常、並べ替えアルゴリズムは、n個を超えるステップ(通常はO(nlogn))を使用してn個のアイテムを並べ替えます。これは、コピー(n <O(nlogn))を保持する方がよいことを意味します。

コピーが多すぎる(オブジェクトが大きすぎる)場合は、参照(ポインターまたはID)の配列を最初の順序で保持できます。

于 2012-09-01T12:34:27.210 に答える