Cara matematis untuk membandingkan sepasang 3 variabel

14

Saya diberi tugas untuk membandingkan sepasang 3 variabel ganda positif, sementara mengabaikan pesanan mereka, di Jawa. Saya melakukan yang berikut:

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

Saya pernah mendengar dari guru bahwa ada cara matematis untuk membandingkan pasangan nomor 3 ini.

Sejauh ini, saya sudah mencoba membandingkan penambahan, pengurangan, jumlah kekuatan mereka dengan 2 tetapi saya selalu menemukan kasus di mana pasangan berbeda dan pernyataan itu benar.

Ada ide?

EDIT:

Saya sudah mengirim tugas dan guru mengatakan bahwa jawaban saya benar. Aku bertanya karena penasaran.

AceVentuRa
sumber
Saya memberikan suara untuk menutup pertanyaan ini. Saya pikir menjawab pertanyaan ini membantu poster dengan curang. Jika guru mengatakan ada jawaban, pasti dia akan mengungkapkannya tepat waktu. Ini bukan tempat untuk ikut campur
ControlAltDel
@ControlAltDel Ini tidak curang karena saya sudah mengirim tugas ... Saya ingin tahu
AceVentuRa
2
Sejak kapan kita tidak membantu orang-orang dengan pekerjaan rumah mereka?
WJS
Bisakah Anda menambahkan kasus-kasus di mana pasangan berbeda dan pernyataan itu benar ?
Eritrea
2
@ControlAltDel Ini bukan di luar topik karena OP jelas menunjukkan kode apa yang mereka coba dan apa kesulitan mereka dalam menyelesaikannya. Tidak ada larangan kategoris pada pertanyaan tentang pekerjaan rumah. Lihat poin # 3 dalam panduan topik .
EJoshuaS

Jawaban:

12

TL; DR

Bandingkan jumlah setiap triplet, produk dari setiap triplet, dan jumlah produk dari semua kombinasi yang mungkin dari setiap triplet.

The Nitty Gritty

Dengan Teorema Dasar Aljabar , untuk polinomial derajat N, kita harus memiliki akar N.

Dengan menggunakan fakta ini, kita membiarkan angka nol kita a1, a2, and a3. Sekarang, kami menemukan koefisien polinomial ini.

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

Jika dua polinomial sama, mereka harus memiliki akar yang sama (sekali lagi oleh FTA). Jadi yang perlu kita lakukan adalah membandingkan koefisien dari polinomial yang dihasilkan.

Jadi jika,

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

Dan

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

Dan

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

Kemudian kita bisa menyimpulkan kembar tiga a1, a2, a3dan b1, b2, b3setara.

Apakah itu layak?

Dari sudut pandang praktis, mari kita lihat apakah ini memang lebih efisien daripada pemeriksaan brute force seperti yang diilustrasikan oleh OP.

Cek pertama: Jumlah dan Bandingkan. Ini membutuhkan 4 penambahan total dan 1 pemeriksaan untuk kesetaraan.

Periksa total = 5; Total berjalan = 5

Pemeriksaan kedua: Produk, Jumlah, dan Bandingkan. Ini membutuhkan 6 total perkalian, 4 penambahan total, dan 1 periksa untuk kesetaraan.

Periksa total = 11; Total berjalan = 16

Pemeriksaan ketiga: Produk dan Bandingkan. Ini membutuhkan 4 total perkalian dan 1 cek untuk kesetaraan.

Periksa total = 5; Total berjalan = 21

Menambahkan dua operasi DAN logis, jumlah total operasi biner untuk "koefisien dari pendekatan polinomial yang dihasilkan" hanya membutuhkan:

23 operasi biner

Pemeriksaan brute force membutuhkan 18 pemeriksaan kesetaraan total, 12 perbandingan logika DAN, dan 5 perbandingan logika ATAU untuk total:

35 operasi biner

Jadi, tegasnya , jawabannya adalah ya, "koefisien dari pendekatan polinomial yang dihasilkan" memang lebih efisien. Namun, seperti yang ditunjukkan oleh @WJS, pendekatan brute force memiliki lebih banyak peluang untuk hubungan arus pendek dan dengan demikian dieksekusi sebagai / lebih efisien daripada pendekatan matematika.

Untuk Ketelitian Lengkap

Kami tidak dapat melewatkan memeriksa jumlah produk dari semua kombinasi yang mungkin dari setiap triplet. Jika kita mengabaikan ini, ada banyak contoh di mana ini gagal. Pertimbangkan (23, 32, 45)dan (24, 30, 46)* :

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

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

Mereka tidak setara tetapi memberikan jumlah dan produk yang sama. Namun mereka tidak memberikan jumlah produk yang sama dari semua kombinasi yang mungkin:

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

* Jika ada yang penasaran bagaimana mendapatkan contoh yang mirip dengan yang di atas, pertama-tama hasilkan semua partisi integer dari integer M dengan panjang 3, ambil produk mereka, temukan duplikatnya, dan pilih pasangan.

Joseph Wood
sumber
1
Saya berharap kita bisa menggunakan LaTeX
Joseph Wood
1
Tetapi dalam metode FTA Anda, semua tes harus dilakukan. Dalam pendekatan brute force, beberapa perbandingan akan dihubung pendek. Jadi itu tidak seburuk kelihatannya.
WJS
2
@WJS, disetujui. Anda dapat mengatakan hal yang sama tentang pendekatan ini hanya tidak sejauh yang Anda bisa dengan pendekatan brute force. Bahkan, saya bertaruh bahwa pendekatan brute force untuk sebagian besar kasus akan sama cepat atau lebih cepat karena hubungan arus pendek. TBH, Jika saya membuat kode ini, saya mungkin akan menggunakan pendekatan brute force karena sering kali lebih mudah dimengerti.
Joseph Wood
-1

Jika Anda diizinkan untuk mengurutkan (a1 <= b1 <= c1 dan a2 <= b2 <= c2) kemudian coba membandingkan 2 ^ a1 * 3 ^ b1 * 5 ^ c1 dengan 2 ^ a2 * 3 ^ b2 * 5 ^ c2 (menggunakan bilangan prima 2, 3, 5 sebagai basis)

Bruno
sumber
bisakah Anda menjelaskan jawaban ini?
AceVentuRa
1
Jika penyortiran diizinkan, maka yang perlu Anda lakukan adalah membandingkan jika a1 == b1 dan a2 = b2 dan a3 == b3.
JB Nizet
Saya mengerti diminta cara matematika ...
Bruno
@ Bruno Saya yakin bahwa yang dimaksudkan oleh guru saya adalah memiliki ifpernyataan dan ifmenulis cara matematika untuk membandingkannya, tanpa memilah.
AceVentuRa
Bagaimana Anda menggunakan bilangan prima dengan nilai ganda yang mungkin memiliki sebagian kecil.
WJS