リストをソートするために必要な最小数の転置を効率的に見つける
リストを並べ替えるのに必要な転置の最小数を計算する効率的な方法を教えてください。転置が実際に何であるかを知る必要はありません。 たとえば、リスト[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の質問は関連しています。