リストを並べ替えるのに必要な転置の最小数を計算する効率的な方法を教えてください。転置が実際に何であるかを知る必要はありません。
たとえば、リスト[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
cstheory.stackexchange.com/questions/4096/…の
—
derekhh
私は、(s)はここに掲載答えは質問4096に統合されるべきだと思う
—
剛伊藤を
@derekhh、これは重複ではありません(または、少なくとも他の質問では投稿の解釈が異なります)。元の投稿で質問4096にリンクしました。
—
emchristiansen 2012年
質問4096では、特定の要素が異なるとは述べられていません。残念ながら、そこに投稿されたすべての回答は黙ってこれを想定しており、この見落としはここに回答をマージすることで修正できます。
—
伊藤剛
@emchristiansenおっと、すみません、気づきませんでした...
—
derekhh