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.
Jawaban:
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.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,
Dan
Dan
Kemudian kita bisa menyimpulkan kembar tiga
a1, a2, a3
danb1, b2, b3
setara.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.
Pemeriksaan kedua: Produk, Jumlah, dan Bandingkan. Ini membutuhkan 6 total perkalian, 4 penambahan total, dan 1 periksa untuk kesetaraan.
Pemeriksaan ketiga: Produk dan Bandingkan. Ini membutuhkan 4 total perkalian dan 1 cek untuk kesetaraan.
Menambahkan dua operasi DAN logis, jumlah total operasi biner untuk "koefisien dari pendekatan polinomial yang dihasilkan" hanya membutuhkan:
Pemeriksaan brute force membutuhkan 18 pemeriksaan kesetaraan total, 12 perbandingan logika DAN, dan 5 perbandingan logika ATAU untuk total:
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)
* :Mereka tidak setara tetapi memberikan jumlah dan produk yang sama. Namun mereka tidak memberikan jumlah produk yang sama dari semua kombinasi yang mungkin:
* 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.
sumber
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)
sumber
if
pernyataan danif
menulis cara matematika untuk membandingkannya, tanpa memilah.