リストをソートするために必要な最小数の転置を効率的に見つける


8

リストを並べ替えるのに必要な転置の最小数を計算する効率的な方法を教えてください。転置が実際に何であるかを知る必要はありません。

たとえば、リスト[1、1、2、0]には2つの転置が必要です。

[1, 1, 2, 0] // Start
[1, 1, 0, 2] // Swap index 2 and 3
[0, 1, 1, 2] // Swap index 0 and 2

リスト[0、1、0、0]には1つの転置が必要です:

[0, 1, 0, 0] // Start
[0, 0, 0, 1] // Swap index 1 and 3

リスト[2、2、2、2]は既に並べ替えられているため、0の転置が必要です。

一部のメタ情報:1)リストには要素が繰り返されている可能性があるため、単純にソートとID置換の間にCayley距離を使用しても機能しません。2)このMath Overflowの質問は関連しています。



1
私は、(s)はここに掲載答えは質問4096に統合されるべきだと思う
剛伊藤を

1
@derekhh、これは重複ではありません(または、少なくとも他の質問では投稿の解釈が異なります)。元の投稿で質問4096にリンクしました。
emchristiansen 2012年

3
質問4096では、特定の要素が異なるとは述べられていません。残念ながら、そこに投稿されたすべての回答は黙ってこれを想定しており、この見落としはここに回答をマージすることで修正できます。
伊藤剛

1
@emchristiansenおっと、すみません、気づきませんでした...
derekhh

回答:


7

残念ながら、アミール、ハートマン、カパー、レビー、ポラット(http://epubs.siam.org/doi/abs/10.1137/080712969を参照)によると、各記号が多くても3回。定数因子近似アルゴリズム、または問題に取り組むのに適度に速い何かについての言及は見つかりませんでした。あなたのケースで考えることができる追加の制限はありますか?

編集:著者は3/2近似アルゴリズムも提供していますが、それが目的に十分適しているかどうかはわかりません。


参照いただきありがとうございます。私はピクセル値を扱っているので、[0、255]の整数のリストです。一般的なリストの長さは256要素です。
emchristiansen、2012年

解決策がある場合(転置の最小のソートシーケンス)、常に左側の大きな数を右側の小さな数と交換することを証明できますか?
Ivan Kuckir 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.