วิธีการทางคณิตศาสตร์เพื่อเปรียบเทียบตัวแปร 3 คู่


14

ฉันได้รับมอบหมายให้เปรียบเทียบตัวแปรคู่บวก 3 ตัวโดยไม่สนใจคำสั่งของพวกเขาใน Java ฉันทำต่อไปนี้:

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

คุณสามารถเพิ่มกรณีเหล่านั้นที่ทั้งคู่มีความแตกต่างกันและคำสั่งที่เป็นจริงหรือไม่?
Eritrean

2
@ControlAltDel ไม่ใช่หัวข้อปิดเพราะ OP ระบุรหัสที่พวกเขาพยายามอย่างชัดเจนและความยากในการแก้ไข ไม่มีข้อห้ามเด็ดขาดเกี่ยวกับการบ้าน เห็นจุด # 3 ในคู่มือเกี่ยวกับหัวข้อ
EJoshuaS - Reinstate Monica

คำตอบ:


12

TL; DR

เปรียบเทียบผลรวมของแต่ละแฝดผลิตภัณฑ์ของแต่ละแฝดและผลรวมของผลิตภัณฑ์ของชุดค่าผสมที่เป็นไปได้ทั้งหมดของแต่ละแฝด

The Nitty Gritty

โดยทฤษฎีบทมูลฐานของพีชคณิตสำหรับพหุนามของดีกรี 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)

หากชื่อพหุนามสองชุดเท่ากันพวกเขาจะต้องมีรากเดียวกัน (อีกครั้งโดย 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

การตรวจสอบครั้งที่สอง: ผลิตภัณฑ์, ผลรวมและการเปรียบเทียบ ต้องมีการคูณทั้งหมด 6 ครั้งการเพิ่มทั้งหมด 4 ครั้งและการตรวจสอบความเท่าเทียมกัน 1 ครั้ง

ตรวจสอบทั้งหมด = 11; ผลรวมสะสม = 16

ตรวจสอบที่สาม: สินค้าและเปรียบเทียบ สิ่งนี้ต้องการการคูณรวม 4 รายการและการตรวจสอบความเท่าเทียมกัน 1 ครั้ง

ตรวจสอบทั้งหมด = 5; รวมทั้งหมด = 21

การเพิ่มตรรกะและการดำเนินงานสองรายการจำนวนการดำเนินการไบนารีทั้งหมดสำหรับ "สัมประสิทธิ์ของวิธีการสร้างพหุนาม" นั้นต้องการเพียง:

23 การดำเนินงานไบนารี

การตรวจสอบแรงเดรัจฉานต้องการการตรวจสอบความเท่าเทียมกันทั้งหมด 18 รายการ, การตรวจสอบตรรกะและการเปรียบเทียบ 12 รายการและการเปรียบเทียบตรรกะหรือการเปรียบเทียบ 5 รายการสำหรับจำนวนทั้งหมด:

35 การดำเนินงานไบนารี

ดังนั้นการพูดอย่างเคร่งครัดคำตอบคือใช่ "สัมประสิทธิ์ของวิธีพหุนามที่สร้างขึ้น" มีประสิทธิภาพมากกว่าแน่นอน อย่างไรก็ตามตามที่ @WJS ชี้ให้เห็นว่าวิธีการบังคับเดรัจฉานมีโอกาสมากมายสำหรับการลัดวงจรและดำเนินการเป็น / มีประสิทธิภาพมากกว่าวิธีการทางคณิตศาสตร์

เพื่อความทั่วถึงอย่างสมบูรณ์

เราไม่สามารถข้ามการตรวจสอบผลรวมของผลิตภัณฑ์ของชุดค่าผสมที่เป็นไปได้ทั้งหมดของแต่ละ triplet หากเราปล่อยสิ่งนี้ออกมามีตัวอย่างมากมายที่สิ่งนี้ล้มเหลว พิจารณา(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

*ในกรณีที่ใครอยากรู้วิธีการได้มาซึ่งตัวอย่างที่คล้ายกับที่กล่าวมาข้างต้นอันดับแรกให้สร้างพาร์ติชั่นจำนวนเต็มทั้งหมดของจำนวนเต็มMของความยาว 3 นำผลิตภัณฑ์ของพวกเขาค้นหาคู่ที่ซ้ำกันและเลือกคู่


1
ฉันหวังว่าเราจะสามารถใช้ LaTeX
Joseph Wood

1
แต่ในวิธีการเขตการค้าเสรีของคุณการทดสอบทั้งหมดจะต้องทำ ในแนวทางของกำลังดุร้ายการเปรียบเทียบบางอย่างจะเกิดขึ้นในระยะสั้น ดังนั้นมันจึงไม่เลวร้ายอย่างที่คิด
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

1
หากได้รับอนุญาตการเรียงลำดับสิ่งที่คุณต้องทำคือการเปรียบเทียบถ้า a1 == b1 และ a2 = b2 และ a3 == b3
JB Nizet

ฉันเข้าใจว่ามันก็ถามหาวิธีทางคณิตศาสตร์ ...
บรูโน่

@Bruno ฉันแน่ใจว่าสิ่งที่ครูของฉันหมายถึงการมีifคำสั่งและในการที่ifจะเขียนวิธีการทางคณิตศาสตร์ของการเปรียบเทียบพวกเขาโดยไม่ต้องเรียงลำดับ
AceVentuRa

คุณใช้ช่วงเวลาที่มีค่าสองเท่าซึ่งอาจมีเศษส่วนได้อย่างไร
WJS
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.