3つの変数のペアを比較する数学的方法


14

Javaで、順序を無視しながら、3つの正のdouble変数のペアを比較する割り当てが与えられました。私は次のことをしました:

if ((a1 == a2 && b1 == b2 && c1 == c2) ||
    (a1 == a2 && b1 == c2 && c1 == b2) ||
    (a1 == b2 && b1 == a2 && c1 == c2) ||
    (a1 == b2 && b1 == c2 && c1 == a2) ||
    (a1 == c2 && b1 == a2 && c1 == b2) ||
    (a1 == c2 && b1 == b2 && c1 == a2))
    // if true

この3つの数値のペアを比較する数学的な方法があると先生から聞いたことがあります。

これまで、それらの加算、減算、それらのパワーの合計を2ずつ比較しようとしましたが、ペアが異なり、ステートメントが真であるケースを常に見つけました。

何か案は?

編集:

私はすでに課題を送り、先生は私の答えは真実であると言った。好奇心から求めています。


私はこの質問を締めくくるつもりです。この質問に答えることはポスターの不正行為を助けることだと思います。先生が答えがあると言ったら、きっとそれは明らかになります。干渉する場所ではありません
ControlAltDel

@ControlAltDel割り当てをすでに送信しているため、不正行為ではありません...好奇心から求めています
AceVentuRa

2
いつから私たちは人々が宿題を手伝わないのですか?
WJS

ペアが異なり、ステートメントが真実であったケースを追加できますか?
エリトリア

2
@ControlAltDel OPが試行したコードとそれを解決する上での難しさをOPが明確に示すため、トピックから外れているわけではありません。宿題についての質問に対する明確な禁止はありません。トピックガイドのポイント3をご覧ください。
EJoshuaS-モニカの復活

回答:


12

TL; DR

各トリプレットの合計、各トリプレットの積、および各トリプレットのすべての可能な組み合わせの積の合計を比較します。

ニッティ・グリティ

代数基本定理により、N次の多項式の場合、Nの根がなければなりません。

この事実を利用して、ゼロをゼロにしますa1, a2, and a3。ここで、この多項式の係数を見つけます。

(x - a1) * (x - a2) * (x - a3)
(x^2 - (a1 + a2) * x + a1a2) * (x - a3) 
x^3 - (a1 + a2) * x^2 + (a1a2) * x - a3 * x^2 + (a1a3 + a2a3) * x - a1a2a3

x^3 + (-1 * (a1 + a2 + a3)) * x^2 + (a1a2 + a1a3 + a2a3) * x + (-1 * a1a2a3)

2つの多項式が同等である場合、それらは同じルートでなければなりません(ここでもFTAによる)。したがって、必要なのは生成された多項式の係数を比較することだけです。

だから、もし、

(-1 * (a1 + a2 + a3) == (-1 * (b1 + b2 + b3))
      ---equivalently---
a1 + a2 + a3 == b1 + b2 + b3

そして

(a1a2 + a1a3 + a2a3) == (b1b2 + b1b3 + b2b3)

そして

-1 * a1a2a3 == -1 * b1b2b3
      ---equivalently---
a1a2a3 == b1b2b3

次に、トリプレットa1, a2, a3を結論付けることができ、b1, b2, b3同等です。

その価値はありますか?

実用的な観点から、これがOPで示されているブルートフォースチェックよりも実際に効率的であるかどうかを見てみましょう。

最初のチェック:合計と比較。これには、合計4つの追加と1つの等価性チェックが必要です。

チェック合計= 5; 累計= 5

2番目のチェック:製品、合計、および比較。これには、合計6つの乗算、合計4つの加算、および1つの等価性チェックが必要です。

チェックの合計= 11; 累計= 16

3番目のチェック:製品と比較。これには、合計4つの乗算と1つの等価性チェックが必要です。

チェック合計= 5; 累計= 21

2つの論理AND演算を追加すると、「生成された多項式アプローチの係数」の2項演算の総数は、次の条件のみを必要とします。

23の二項演算

総当たりチェックでは、合計で18の等価チェック、12の論理AND比較、5の論理OR比較が必要です。

35の二項演算

したがって、厳密に言えば、答えは「はい」です。「生成された多項式アプローチの係数」は実際により効率的です。@WJSが指摘するようにしかし、ブルートフォース手法はのためのより多くの機会を有する短絡し、したがって実行より効率的な数学的手法よりAS /。

完全な徹底のために

各トリプレットのすべての可能な組み合わせの積の合計のチェックをスキップすることはできません。これを省略した場合、失敗する例は無数にあります。検討(23, 32, 45)して(24, 30, 46)*

23 + 32 + 45 = 100
24 + 30 + 46 = 100

23 * 32 * 45 = 33120
24 * 30 * 46 = 33120

それらは同等ではありませんが、同じ合計と積を与えます。ただし、すべての可能な組み合わせの積の合計が同じになるわけではありません。

23 * 32 + 23 * 45 + 32 * 45 = 3211
24 * 30 + 24 * 46 + 30 * 46 = 3204

*上記と同様の例をどのように導出するかが気になる場合は、まず長さ3の整数Mのすべての整数パーティションを生成し、それらの積を取り、重複を見つけ、ペアを選択します。


1
LaTeXを利用できたらいいのに
ジョセフウッド

1
しかし、FTAメソッドでは、すべてのテストを実行する必要があります。ブルートフォースアプローチでは、一部の比較が短絡されます。見た目ほど悪くはありません。
WJS、

2
@WJS、同意した。このアプローチについては、ブルートフォースアプローチでできる程度ではなく、同じことが言えます。実際、大多数の場合のブルートフォースアプローチは、短絡のために同じくらい速くなるか、または速くなると思います。TBH、これをコード化する場合、何倍も理解しやすいので、おそらくブルートフォースアプローチを使用するでしょう。
ジョセフウッド

-1

並べ替えが許可されている場合(a1 <= b1 <= c1およびa2 <= b2 <= c2)、2 ^ a1 * 3 ^ b1 * 5 ^ c1と2 ^ a2 * 3 ^ b2 * 5 ^ c2を比較してみてください(基礎として素数2、3、5を使用)


この答えを説明してもらえますか?
AceVentuRa 2019年

1
ソートが許可されている場合は、a1 == b1およびa2 = b2およびa3 == b3であるかどうかを比較するだけです。
JBニゼット

私はそれが数学的な方法を求められていたと理解しています...
ブルーノ

@Bruno私の先生が言ったことは、ソートをせずにifステートメントifを比較し、それらを比較する数学的な方法を書くことでした。
AceVentuRa

分数を含む可能性のあるdouble値を持つ素数をどのように使用しますか。
WJS 2019年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.