Matematische Methode zum Vergleichen eines Paares von 3 Variablen


14

Ich erhielt den Auftrag, ein Paar von 3 positiven Doppelvariablen in Java zu vergleichen, während ich deren Reihenfolge ignorierte. Ich habe folgendes gemacht:

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

Ich habe vom Lehrer gehört, dass es eine mathematische Möglichkeit gibt, dieses Paar von 3 Zahlen zu vergleichen.

Bisher habe ich versucht, ihre Addition, Subtraktion und die Summe ihrer Potenzen um 2 zu vergleichen, aber ich habe immer einen Fall gefunden, in dem das Paar unterschiedlich war und die Aussage wahr war.

Irgendwelche Ideen?

BEARBEITEN:

Ich habe die Aufgabe bereits gesendet und der Lehrer sagte, dass meine Antwort wahr sei. Ich frage aus Neugier.


Ich stimme dafür, diese Frage zu schließen. Ich denke, die Beantwortung dieser Frage hilft dem Poster beim Betrügen. Wenn der Lehrer sagt, dass es eine Antwort gibt, wird er sie sicherlich rechtzeitig offenlegen. Es ist kein Ort, um sich einzumischen
ControlAltDel

@ControlAltDel Es ist kein Betrug, weil ich den Auftrag bereits gesendet habe ... Ich
frage

2
Seit wann helfen wir den Leuten nicht bei ihren Hausaufgaben?
WJS

Können Sie die Fälle hinzufügen, in denen das Paar unterschiedlich war und die Aussage wahr war ?
Eritreer

2
@ControlAltDel Es ist kein Off-Topic, da das OP klar anzeigt, welchen Code sie ausprobiert haben und welche Schwierigkeiten sie bei der Lösung haben. Es gibt kein kategorisches Verbot von Fragen zu Hausaufgaben. Siehe Punkt 3 im themenbezogenen Handbuch .
EJoshuaS

Antworten:


12

TL; DR

Vergleichen Sie die Summe jedes Tripletts, das Produkt jedes Tripletts und die Summe der Produkte aller möglichen Kombinationen jedes Tripletts.

The Nitty Gritty

Nach dem Fundamentalsatz der Algebra müssen wir für ein Polynom vom Grad N N Wurzeln haben.

Mit dieser Tatsache lassen wir unsere Nullen sein a1, a2, and a3. Nun finden wir die Koeffizienten dieses Polynoms.

(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)

Wenn zwei Polynome äquivalent sind, müssen sie dieselben Wurzeln haben (wiederum von der FTA). Wir müssen also nur die Koeffizienten der erzeugten Polynome vergleichen.

Also, wenn,

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

Und

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

Und

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

Dann können wir die Drillinge schließen a1, a2, a3und b1, b2, b3sind äquivalent.

Lohnt es sich?

Aus praktischer Sicht wollen wir sehen, ob dies tatsächlich effizienter ist als die Brute-Force-Prüfung, wie sie vom OP dargestellt wird.

Erste Prüfung: Summe und Vergleich. Dies erfordert insgesamt 4 Ergänzungen und 1 Überprüfung auf Gleichheit.

Gesamt prüfen = 5; Laufende Summe = 5

Zweite Prüfung: Produkt, Summe und Vergleich. Dies erfordert 6 Gesamtmultiplikationen, 4 Gesamtadditionen und 1 Überprüfung auf Gleichheit.

Gesamt prüfen = 11; Laufende Summe = 16

Dritte Prüfung: Produkt und Vergleich. Dies erfordert 4 Gesamtmultiplikationen und 1 Überprüfung auf Gleichheit.

Gesamt prüfen = 5; Laufende Summe = 21

Addiert man die beiden logischen UND-Operationen, so erfordert die Gesamtzahl der Binäroperationen für die "Koeffizienten des generierten Polynomansatzes" nur:

23 binäre Operationen

Die Brute-Force-Prüfung erfordert 18 Gesamtgleichheitsprüfungen, 12 logische UND-Vergleiche und 5 logische ODER-Vergleiche für insgesamt:

35 binäre Operationen

Also, streng genommen , ist die Antwort ja, die „Koeffizienten des erzeugten Polynom - Ansatz“ ist in der Tat effizienter. Doch wie @WJS weist darauf hin, hat der Brute - Force - Ansatz viel mehr Möglichkeiten für Kurzschlüsse und damit ausführen wie / effizienter als der mathematische Ansatz.

Für vollständige Gründlichkeit

Wir können die Überprüfung der Summe der Produkte aller möglichen Kombinationen jedes Tripletts nicht überspringen. Wenn wir dies weglassen, gibt es unzählige Beispiele, bei denen dies fehlschlägt. Betrachten Sie (23, 32, 45)und (24, 30, 46)* :

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

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

Sie sind nicht gleichwertig, geben aber die gleiche Summe und das gleiche Produkt. Sie geben jedoch nicht die gleiche Summe der Produkte aller möglichen Kombinationen an:

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

* Wenn Sie neugierig sind, wie Sie ein ähnliches Beispiel wie oben ableiten können, generieren Sie zuerst alle ganzzahligen Partitionen einer ganzen Zahl M der Länge 3, nehmen Sie ihr Produkt, suchen Sie die Duplikate und wählen Sie ein Paar aus.


1
Ich wünschte, wir könnten LaTeX
Joseph Wood

1
Bei Ihrer FTA-Methode müssen jedoch alle Tests durchgeführt werden. Beim Brute-Force-Ansatz werden einige der Vergleiche kurzgeschlossen. Es ist also nicht so schlimm, wie es scheint.
WJS

2
@WJS, stimmte zu. Sie können das Gleiche über diesen Ansatz sagen, nur nicht in dem Maße, wie Sie es mit dem Brute-Force-Ansatz können. Tatsächlich wette ich, dass der Brute-Force-Ansatz in den meisten Fällen aufgrund des Kurzschlusses genauso schnell oder schneller sein würde. TBH, wenn ich dies codieren würde, würde ich wahrscheinlich den Brute-Force-Ansatz verwenden, da er um ein Vielfaches einfacher zu verstehen ist.
Joseph Wood

-1

Wenn Sie sortieren dürfen (a1 <= b1 <= c1 und a2 <= b2 <= c2), versuchen Sie, 2 ^ a1 * 3 ^ b1 * 5 ^ c1 mit 2 ^ a2 * 3 ^ b2 * 5 ^ c2 zu vergleichen (unter Verwendung der Primzahlen 2, 3, 5 als Basis)


Können Sie diese Antwort bitte erklären?
AceVentuRa

1
Wenn das Sortieren erlaubt ist, müssen Sie nur vergleichen, ob a1 == b1 und a2 = b2 und a3 == b3.
JB Nizet

Ich verstehe, es wurde nach einem mathematischen Weg gefragt ...
Bruno

@Bruno Ich bin mir sicher, dass mein Lehrer meinte, eine ifAussage zu haben und ifdarin die mathematische Art zu schreiben, sie zu vergleichen, ohne zu sortieren.
AceVentuRa

Wie verwendet man Primzahlen mit doppelten Werten, die einen Bruch haben können?
WJS
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.