私はサイズの数字の垂直配列のパリティを決定する必要があるExcelシートで作業していますN。この配列には、〜Nの各数値がそれぞれ1回ずつ含まれています。Excel - 並べ替えのパリティを決定する
この場合、パリティは、スクランブルされた配列をソートされた配列に最小から最大に変換するために必要なスワップの数として定義されます。
たとえば、配列{3;1;2;4}
は、偶数パリティを持ちます。これは、少なくとも2回のスワップが{1;2;3;4}
に変換する必要がありますが、常に偶数回のスワップが必要となるためです。下記参照。
3 --> 1 1
1 --> 3 --> 2
2 2 --> 3
4 4 4
別の例:{2;1;4;5;3}
は、それが{1;2;3;4;5}
に変換するには(少なくとも)3つのスワップを必要とするので、奇数パリティを持っていますが、常にスワップの奇数を必要とします。下記参照。
2 --> 1 1 1
1 --> 2 2 2
4 4 --> 3 3
5 5 5 --> 4
3 3 --> 4 --> 5
私は偶数パリティと奇数パリティを持つ配列の場合FALSE
と配列のためTRUE
を返します解決策を探しています。 (そして、私は、私はこれらのケースを処理するために、スプレッドシート内の他のチェックを持っているので、結果がNにからすべての数字が含まれていない配列のために何であるか気にしない。)
を、私は考え出しましたいくつかのヘルパーカラムを使用するソリューションですが、計算が遅いようです。
アレイの個々の番号が正しいインデックスにあるかどうかをチェックし、スワップを実行しない場合はチェックします。私は発生したスワップの金額を合計し、それが偶数であるかどうかを判断するためにMOD(<swaps>,2)=0
を使用します。
配列{8;5;3;2;4;1;7;6}
を使用した計算例については以下を参照してください。
ホワイト=参照配列{1;2;3;4;5;6;7;8}
ブルー=入力配列
グレー= "ヘルパー" の配列を:私は色簡単に何が起こっているかを伝えるために、細胞をコード化しました
各連続した列は必要に応じてスワップを実行します。
赤=スワップが効果的に多くのスワップが発生したどのように言って、すべての緑の細胞の
黄=合計を発生しなかった場合、スワップはその列、および0で発生した場合、WAPは、グリーン= 1前回のコラムから
を発生しました。
この例では、黄色のセルが偶数である4
であるため、入力配列は偶数パリティです。
問題は次のとおりです。この計算は、VBAなしでExcelで効率的に行うことができますか?私はヘルパーの列に必ずしも当てはまるわけではありませんが、私の解決策は低迷しているようですが、より良い方法があるかどうかは疑問です。
問題がありますその数式には変更が保存されていないので、あなたが持っているヘルパー列のメソッドがない方法があるとは思えません。 –
@ScottCranerこのメソッドを使用すると、私は同意します。私の質問は、私が気づいていなかったこれを計算するための数学的な "トリック"があるかどうかでした。 – ImaginaryHuman072889
それから、これはhttps://math.stackexchange.com/の方が良いでしょう。 –