「サブベクトル反転」を使用してソートを最適化する
これは、最小の反転を使用してベクトルを昇順でソートすることを目的とする、操作が最も少ないチャレンジです。アルゴリズムは「サブベクトル反転」1を使用してのみベクトルをソートできますが、算術演算、ループ、ソートされているかどうかの確認などに他の演算を使用できます。アルゴリズムが実行するサブベクトル反転の数はスコアです。 1 「サブベクトル反転」: ベクトル内の数値の範囲を選択し、その範囲内の要素を逆にします。 簡単な例を挙げると、vector {4,3,2,1}から始める場合、さまざまな方法で並べ替えることができます。 ベクトル全体を反転します。これは、1回の反転のみを必要とするため、明らかに最短のアプローチです。{4,3,2,1} -> {1,2,3,4} バブルソートのバージョンを実行できます。これには、6回の取り消しが必要です。 {4,3,2,1} -> {3,4,2,1} -> {3,2,4,1} -> {2,3,4,1} -> {2,3,1,4} -> {2,1,3,4} -> {1,2,3,4} 最初の3つの要素から始めて、最後に3つ、最後に最初の2つと最後の2つで、4つのスワップが必要です。 {4,3,2,1} -> {2,3,4,1} -> {2,1,4,3} -> {1,2,4,3} -> {1,2,3,4} ... 等々。使用可能なオプションは無限にあります(必要に応じて、任意の操作を繰り返すことができます)。 ルールと要件: 100個の数字を含むリストの場合、コードは1分未満で終了する必要があります。これは自分で時間を計ることができますが、フェア2をプレイしてください。 ソリューションを検証できるように、実行するすべてのスワップの開始インデックスと終了インデックスを保存する必要があります。(これの意味を以下で説明します)。 コードは確定的でなければなりません。 数値ベクトル、リンクリスト、長さの配列など、任意の形式で入力を取得できます。 ベクターのコピーで何でもできます。これには、さまざまな反転の試行と、最も効率的なチェックが含まれます。総当たり攻撃はまったく問題ありませんが、制限時間を守ってください。 スコアは、5つのテストベクトルのフリップの総数です。タイブレーカーは日付スタンプになります。 例: 4 1 23 21 49 2 7 …