ขั้นตอนวิธีแบบยุคลิด
ลิงก์ข้ามภาษาในบทความนี้ มีไว้ให้ผู้อ่านและผู้ร่วมแก้ไขบทความศึกษาเพิ่มเติมโดยสะดวก เนื่องจากวิกิพีเดียภาษาไทยยังไม่มีบทความดังกล่าว กระนั้น ควรรีบสร้างเป็นบทความโดยเร็วที่สุด |
ในวิชาคณิตศาสตร์ ขั้นตอนวิธีแบบยุคลิด (อังกฤษ: Euclidean Algorithm)[a] หรือขั้นตอนวิธีของยุคลิด เป็นวิธีคำนวณตัวหารร่วมมาก (หรม.) ของจำนวนเต็มสองจำนวน ตั้งชื่อตามยุคลิด นักคณิตศาสตร์ชาวกรีกผู้อธิบายทฤษฎีนี้ในอิลิเมนต์ของยุคลิดเล่ม VII และ X [1]
ตัวหารร่วมมากของจำนวนเต็มสองจำนวนคือจำนวนเต็มมากที่สุดที่หารทั้งสองจำนวนนั้นได้โดยไม่เหลือเศษ
ขั้นตอนวิธีแบบยุคลิดเริ่มต้นด้วยจำนวนเต็มบวกคู่หนึ่ง แล้วสร้างจำนวนคู่ใหม่ประกอบด้วยจำนวนที่น้อยกว่าและผลต่างระหว่างจำนวนทั้งสอง จากนั้นทำซ้ำจนจำนวนทั้งสองเท่ากัน จำนวนในขั้นตอนสุดท้ายเป็นตัวหารร่วมมากของจำนวนเต็มบวกเริ่มต้น
หลักการสำคัญคือ หรม. ไม่เปลี่ยนค่าถ้านำจำนวนที่น้อยกว่าลบจำนวนที่มากกว่า เช่น หรม. ของ 252 และ 105 เท่ากับ หรม. ของ 147 (= 252 − 105) และ 105 จำนวนที่มากกว่าถูกลดลดค่าลงเสมอ ทำให้การทำวิธีนี้ซ้ำได้จำนวนที่เล็กลง การซ้ำนี้จึงจบอย่างแน่นอนเมื่อทั้งสองจำนวนมีค่าเท่ากัน (ถ้าทำอีกหนึ่งครั้ง จำนวนใดจำนวนหนึ่งจะเป็น 0)
หลักฐานเกี่ยวกับขั้นตอนวิธีแบบยุคลิดพบในหนังสือ Elements ของยุคลิด (ในช่วงศตวรรษที่ 3 ก่อนคริสตกาล) ทำให้เป็นขั้นตอนวิธีเก่าแก่ที่สุดเกี่ยวกับจำนวนที่ยังใช้โดยทั่วไป ขั้นตอนวิธีฉบับดังเดิมใช้สำหรับจำนวนธรรมชาติและความยาวเชิงเรขาคณิต (จำนวนจริง) แต่นักคณิตศาสตร์ได้ขยายการใช้งานไปยังจำนวนชนิดอื่น เช่น จำนวนเต็มเกาส์เซียนและพหุนามหนึ่งตัวแปร อันนำไปสู่แนวคิดเชิงพีชคณิตนามธรรมสมัยใหม่ เช่นโดเมนแบบยุคลิด ซึ่งเป็นริงที่สามารถทำขั้นตอนวิธีของยุคลิดได้
ขั้นตอนวิธีของยุคลิดมีการประยุกต์ใช้ในทางทฤษฎีและปฏิบัติ อาจใช้ก่อกำเนิดจังหวะดนตรีที่สำคัญหลายรูปแบบที่พบในวัฒนธรรมต่างๆ ทั่วโลก[2] ขั้นตอนวิธีนี้เป็นส่วนประกอบสำคัญของการเข้ารหัสอาร์เอสเอ (การเข้ารหัสลับแบบกุญแจอสมมาตรที่ใช้ทั่วไปในการพาณิชย์อิเล็กทรอนิกส์) ขั้นตอนวิธีแบบยุคลิดใช้แก้สมการไดโอแฟนไทน์แบบรูปแบบ เช่นการหาจำนวนที่สอดคล้องกับสมภาคหลายชุด (ทฤษฎีบทเศษเหลือของจีน) หรือตัวผกผันการคูณในฟิลด์จำกัด, ใช้สร้างเศษส่วนต่อเนื่อง, ใช้หาจำนวนรากจริงของพหุนามโดยวิธีโซ่ของสเติร์ม และในขั้นตอนวิธีการแยกตัวประกอบของจำนวนเต็มสมัยใหม่ และที่สำคัญ ขั้นตอนวิธีของยุคลิดเป็นเครื่องมือสำหรับพิสูจน์ทฤษฎีบทในทฤษฎีจำนวน เช่น ทฤษฎีบทผลรวมกำลังสองของลากรองจ์และทฤษฎีบทมูลฐานของเลขคณิต
ถ้าปรับปรุงขั้นตอนวิธีให้ใช้เศษหารจากวิธีหารแบบยุคลิดแทนที่จะเป็นการลบ ขั้นตอนวิธีของยุคลิดคำนวณค่าตัวหารร่วมมากของจำนวนขนาดใหญ่อย่างมีประสิทธิภาพ โดยใช้ขั้นตอนวิธีการหารเป็นจำนวนครั้งไม่เกินห้าเท่าของจำนวนหลักของจำนวนขนาดเล็กกว่า (ในฐานสิบ) ขั้นตอนวิธีแบบปรับปรุงนี้พิสูจน์ได้โดย Gabriel Lamé เมื่อปี ค.ศ. 1844 นับเป็นจุดริเริ่มการศึกษาทฤษฎีความซับซ้อนในการคำนวณ และในคริสต์ศตวรรษที่ 20 มีการพัฒนาวิธีเพิ่มประสิทธิภาพในรูปแบบอื่นเพิ่มขึ้นมา
เมื่อย้อนขั้นตอนวิธีแบบยุคลิด ตัวหารร่วมมากสามารถเขียนในรูปผลรวมเชิงเส้นของสองจำนวนที่นำมาดำเนินการ โดยที่แต่ละจำนวนคูณกับจำนวนเต็ม เช่น ตัวหารร่วมมากของ 252 และ 105 คือ 21 และ 21 = [5 × 105] + [(−2) × 252] สมบัตินี้เรียกว่าเอกลักษณ์ของเบซู
พื้นฐาน — ตัวหารร่วมมาก
แก้ขั้นตอนวิธีแบบยุคลิดคำนวณค่าตัวหารร่วมมาก (หรม.) ของจำนวนธรรมชาติสองจำนวน a และ b ค่าตัวหารร่วมมาก g เป็นจำนวนธรรมชาติค่ามากสุดที่หารทั้ง a และ b ลงตัว คำที่มีความหมายเหมือนกับ หรม. ได้แก่ ตัวประกอบร่วมค่ามากสุด (อังกฤษ: greatest common factor, GCF), ตัวประกอบร่วมค่ามากสุด (อังกฤษ: highest common factor, HCF) และ greatest common measure (GCM) ตัวหารร่วมมากมักเขียนแทนด้วย gcd(a, b) หรือ (a, b),[3] แม้ว่าสัญลักษณ์แบบหลังใช้สำหรับความคิดรวบยอดทางคณิตศาสตร์อีกหลายอย่าง เช่น เวกเตอร์พิกัดสองมิติ
ถ้า gcd(a, b) = 1 แล้ว a กับ b เป็นจำนวนเฉพาะสัมพัทธ์[4] ความเป็นจำนวนเฉพาะสัมพัทธ์ไม่ได้บ่งบอกว่า a หรือ b เป็นจำนวนเฉพาะเองแต่อย่างใด[5] เช่น 6 และ 35 ต่างไม่ใช่จำนวนเฉพาะ เพราะต่างมีตัวประกอบเฉพาะจำนวนละสองตัว: 6 = 2 × 3 and 35 = 5 × 7 อย่างไรก็ตาม 6 และ 35 เป็นจำนวนเฉพาะสัมพัทธ์ ไม่มีจำนวนธรรมชาตินอกเหนือจาก 1 หารทั้ง 6 และ 35 ลงตัว เพราะไม่มีตัวประกอบเฉพาะร่วมกัน
ให้ g = gcd(a, b) จากการที่ a และ b เป็นพหุคูณของ g สามารถเขียนในรูป a = mg และ b = ng และไม่มีจำนวนเต็ม G ที่มากกว่า g ที่ทำให้ข้อความดังกล่าวเป็นจริง m และ n ต้องเป็นจำนวนเฉพาะสัมพัทธ์ เพราะหากมีตัวประกอบร่วมของ m และ n จะทำให้ g มีค่ามากขึ้น ดังนั้นจำนวนเต็ม c ใด ๆ ที่หาร a และ b ลงตัว จะต้องหาร g ลงตัวด้วย ตัวหารร่วมมาก g ของ a และ b คือตัวหารร่วมบวกเพียงหนึ่งตัวของ a และ b ที่หารด้วยตัวหารร่วมอื่น c ลงตัว
ตัวหารร่วมมากสามารถอธิบายได้ด้วยการสมมติสี่เหลี่ยมผืนผ้ากว้าง a ยาว b และตัวหารร่วม c ที่หาร a และ b ลงตัว ด้านของสี่เหลี่ยมสามารถแบ่งเป็นส่วนย่อยยาว c ซึ่งแบ่งสี่เหลี่ยมผืนผ้าเป็นตารางสี่เหลี่ยมจัตุรัสย่อยยาวด้านละ c โดยตัวหารร่วมมาก g คือค่าที่มากที่สุดที่เป็นไปได้ของ c ตัวอย่างดังภาพคือสี่เหลี่ยมผืนผ้ากว้าง 24 ยาว 60 สามารถแบ่งได้เป็นตารางของสี่เหลี่ยมจัตุรัส 1 1, สี่เหลี่ยมจัตุรัส 2 2, สี่เหลี่ยมจัตุรัส 3 3, สี่เหลี่ยมจัตุรัส 4 4, สี่เหลี่ยมจัตุรัส 6 6 หรือสี่เหลี่ยมจัตุรัส 12 12 ดังนั้น 12 คือตัวหารร่วมมากของ 24 และ 60 โดยสี่เหลี่ยมผืนผ้ากว้าง 24 ยาว 60 สามารถแบ่งเป็นตารางของสี่เหลี่ยมจัตุรัสยาวด้านละ 12 ที่มีสี่เหลี่ยมจัตุรัส 2 รูปติดด้านกว้าง (24/12 = 2) และสี่เหลี่ยมจัตุรัส 5 รูปติดด้านยาว (60/12 = 5)
ตัวหารร่วมมากของสองจำนวน a และ b คือผลคูณของตัวประกอบเฉพาะที่สองจำนวนนี้มีร่วมกัน โดยตัวประกอบเฉพาะหนึ่งค่าสามารถนำมาคูณได้หลายรอบ ตราบที่ผลคูณของตัวประกอบเหล่านี้หาร a และ b ลงตัว ตัวอย่างเช่น 1386 แยกตัวประกอบได้เป็น 2 3 3 7 11 และ 3213 แยกตัวประกอบได้เป็น 3 3 3 7 17 ตัวหารร่วมมากของ 1386 และ 3213 จึงเท่ากับ 63 = 3 3 7 ซึ่งก็คือผลคูณของตัวประกอบเฉพาะร่วม ถ้าสองจำนวนไม่มีตัวประกอบเฉพาะร่วมกัน ตัวหารร่วมมากคือ 1 (เท่ากับค่าผลคูณว่าง) หรือก็คือทั้งสองจำนวนนั้นเป็นจำนวนเฉพาะสัมพัทธ์ ข้อได้เปรียบของขั้นตอนวิธีแบบยุคลิดคือสามารถหาค่าตัวหารร่วมมากโดยไม่ต้องหาตัวประกอบเฉพาะร่วม
หรม. ของสามจำนวนขึ้นไปมีค่าเท่ากับผลคูณของตัวประกอบเฉพาะของจำนวนเหล่านั้น แต่ก็สามารถหาได้จากการหา หรม. ของแต่ละคู่จำนวน
- gcd(a, b, c) = gcd(a, gcd(b, c)) = gcd(gcd(a, b), c) = gcd(gcd(a, c), b)
ดังนั้นขั้นตอนวิธีแบบยูคลิดที่หาหรม.ของสองจำนวนจะสามารถหาหรม.ของหลายจำนวนได้ด้วยเช่นกัน
คำอธิบาย
แก้กระบวนการ
แก้ขั้นตอนวิธีแบบยูคลิดดำเนินเป็นขั้นตอน โดยผลลัพธ์ในแต่ละขั้นตอนจะถูกใช้ในขั้นตอนต่อไป ให้ k เป็นจำนวนเต็มที่นับจำนวนขั้นตอนในวิธีการยูคลิด เริ่มจากศูนย์ ดังนั้นในขั้นตอนที่หนึ่งมีค่า k = 0 ขั้นตอนที่สองมีค่า k = 1 เป็นแบบนี้ไปเรื่อย ๆ
แต่ละขั้นตอนเริ่มด้วยเศษสองจำนวนที่มีค่าไม่เป็นลบ rk−1 และ rk−2 เนื่องจากวิธีการนี้จะทำให้เศษมีค่าลดลงในทุกขั้นตอนเสมอ rk−1 มีค่าน้อยกว่าเศษตัวก่อน rk−2 เป้าหมายของขั้นตอนที่ k คือหาผลหาร qk และเศษ rk ที่สอดคล้องกับสมการ
จะได้ว่า 0 ≤ rk < rk−1 กล่าวได้ว่า จำนวนที่มากกว่า rk−2 ถูกลบด้วยพหุคูณของจำนวนที่น้อยกว่า rk−1 จนกว่าเศษ rk จะมีค่าน้อยกว่า rk−1
ในขั้นแรก (k = 0) เศษ r−2 และ r−1 มีค่าเท่ากับ a และ b ตามลำดับ ในขั้นต่อมา (k = 1) เศษมีค่าเท่ากับ b และเศษ r0 ของขั้นแรก ทำแบบนี้ต่อไปเรื่อย ๆ ขั้นตอนวิธีดังกล่าวเขียนออกมาในรูปแบบลำดับของสมการได้ว่า
ถ้า a มีค่าน้อยกว่า b ให้สลับตัวเลขในขั้นแรก ตัวอย่างคือ ถ้า a < b ผลหารในขั้นแรก q0 จะมีค่าเท่ากับศูนย์ และเศษ r0 มีค่าเท่ากับ a ดังนั้น rk จะมีค่าน้อยกว่า rk−1 สำหรับทุก k ≥ 0
เพราะเศษมีค่าลดลงในทุกขั้นตอน แต่ไม่สามารถเป็นมีค่าเป็นลบ เศษ rN จึงจะต้องเท่ากับศูนย์ในสักขั้นตอน
การพิสูจน์ความถูกต้อง
แก้ความถูกต้องของขั้นตอนวิธีแบบยูคลิดสามารถพิสูจน์ได้โดยสองขั้นตอน ในขั้นตอนแรก เห็นได้ว่าเศษตัวสุดท้ายที่ไม่เท่ากับศูนย์ rN−1 จะหารทั้ง a และ b ลงตัว เพราะมันเป็นตัวหารร่วม จึงมีค่าน้อยกว่าหรือเท่ากับตัวหารร่วมมาก g และในขั้นตอนที่สอง เห็นได้ว่าตัวหารร่วมใด ๆ ของ a และ b (รวมถึงตัวหารร่วมมาก g ด้วย) ต้องหาร rN−1 ลงตัว ดังนั้น g ต้องมีค่าน้อยกว่าหรือเท่ากับ rN−1 ข้อสรุปสองอันนี้ไม่แน่นอน เว้นแต่ rN−1 = g
เพื่อแสดงให้เห็นว่า rN−1 หารทั้ง a และ b ลงตัว (ขั้นแรก) และ rN−1 หาร rN−2 ลงตัว
- rN−2 = qN rN−1
เพราะเศษตัวสุดท้าย rN คือศูนย์ ทำให้ rN−1 หาร rN−3 ลงตัวด้วย
- rN−3 = qN−1 rN−2 + rN−1
- g = gcd(a, b) = gcd(b, r0) = gcd(r0, r1) = … = gcd(rN−2, rN−1) = rN−1.
ตัวอย่างการใช้งาน
แก้เพื่อให้เห็นภาพ ขั้นตอนวิธีแบบยุคลิดสามารถนำมาใช้หาตัวหารร่วมมากของ a = 1071 และ b = 462 ได้ เริ่มต้นด้วย นำ 1071 เป็นตัวตั้ง ลบกับตัวคูณของ 462 จนกว่าเศษจะน้อยกว่า 462 ซึ่งเมื่อพิจารณาแล้ว การคูณด้วย 2 นั้นสามารถนำมาใช้ในการลบออกได้ (q0 = 2) โดยมีเศษคือ 147
- 1071 = 2 × 462 + 147.
ต่อมา ตัวคูณของ 147 จะถูกลบออกจาก 462 จนกว่าเศษจะมีค่าน้อยกว่า 147 เมื่อพิจารณาแล้ว การคูณด้วย 3 นั้นสามารถนำมาใช้ในการลบออกได้
- 462 = 3 × 147 + 21.
ต่อมา ตัวคูณของ 21 จะถูกลบออกจาก 147 จนกว่าเศษจะมีค่าน้อยกว่า 21 ซึ่งการคูณด้วย 7 นั้นสามารถนำมาใช้ในการลบออกได้ (q2 = 7) ไม่เหลือเศษแล้ว
- 147 = 7 × 21 + 0.
ขั้นที่ k | สมการ | ผลหาร (q) และเศษเหลือ (r) |
---|---|---|
0 | 1071 = q0 462 + r0 | q0 = 2 และ r0 = 147 |
1 | 462 = q1 147 + r1 | q1 = 3 และ r1 = 21 |
2 | 147 = q2 21 + r2 | q2 = 7 และ r2 = 0; อัลกอริทึมจบลง |
การอธิบายเป็นภาพ
แก้เราสามารถทำขั้นตอนวิธีแบบยูคลิดให้เห็นภาพได้ โดยใช้วิธีคล้ายกับการปูกระเบื้องในการหาตัวหารร่วมมาก[6] สมมุติว่าเราต้องการปูพื้นที่สี่เหลี่ยมผืนผ้าขนาด โดยใช้กระเบื้องสี่เหลี่ยมจัตุรัส โดยที่ a เป็นค่าที่มีค่ามากกว่าอีกจำนวน เริ่มแรก เราจะปูโดยใช้กระเบื้องสี่เหลี่ยมจัตุรัสขนาด แต่ว่า กลับเหลือพื้นที่ที่ปูไม่ได้ มีขนาดเป็น โดยที่ เราก็เลยเปลี่ยนไปใช้กระเบื้องสี่เหลี่ยมจัตุรัสขนาด แทน แต่ก็ยังปูพื้นที่ได้ไม่ครบอีก เหลือพื้นที่เป็น เราก็เลยเปลี่ยนไปใช้กระเบื้องขนาด แทน ทำแบบนี้ซ้ำไปเรื่อย ๆ จนกระทั่งไม่เหลือพื้นที่ที่ยังไม่ได้ปู นั่นคือ เมื่อกระเบื้องสี่เหลียมจัตุรัสสามารถปูพื้นที่ที่ยังไม่ได้ปูในขั้นที่แล้วได้ทั้งหมด โดยความยาวของด้านของสี่เหลี่ยมจัตุรัสที่เล็กที่สุดก็คือตัว ห.ร.ม. ของขนาดของสี่เหลี่ยมรูปต้นแบบนั่นเอง เช่น กระเบื้องสี่เหลี่ยมจัตุรัสขนาดเล็กที่สุดในรูปคือ (ในรูปแสดงโดยใช้สีแดง) และ 21 เป็นตัวหารร่วมมากของ 1071 และ 462 ซึ่งเป็นรูปสี่เหลี่ยมต้นฉบับ (แสดงโดยใช้สีเขียว)
การหารแบบยูคลิด
แก้ในทุกขั้นตอน k ขั้นตอนวิธีแบบยุคลิดคำนวณผลหาร qk และเศษ rk จากตัวเลขสองตัว rk−1 และ rk−2
- rk−2 = qk rk−1 + rk
โดยที่ rk เป็นจำนวนเต็มที่ไม่เป็นลบ และมีค่าน้อยกว่าค่าสัมบูรณ์ของ rk−1 โดยมีทฤษฏีที่รับรองว่าขั้นตอนวิธีแบบยุคลิดจะมีผลหารและเศษเสมอ
ในขั้นตอนวิธีแบบยุคลิดแบบดั้งเดิม ผลหารและเศษหาได้จากการลบซ้ำ ๆ นั่นคือ
- rk = rk−2 mod rk−1.
การนำไปใช้งาน
แก้การนำไปใช้งานของขั้นตอนวิธีแบบยูคลิดจะถูกเขียนในรูปแบบโค้ดเทียม
function gcd(a, b) while b ≠ 0 t := b b := a mod b a := t return a
function gcd(a, b) while a ≠ b if a > b a := a − b else b := b − a return a
ในรูปแบบเรียกซ้ำ[7] จะขึ้นอยู่กับความเท่ากันของตัวหารร่วมมากของเศษเหลือต่อเนื่อง โดยมีเงื่อนไขการหยุดคือ gcd(rN−1, 0) = rN−1
function gcd(a, b) if b = 0 return a else return gcd(b, a mod b)
(หากค่าที่รับมาเป็นลบ หรือฟังก์ชัน mod อาจให้ค่าที่ติดลบ ต้องเปลี่ยน "return a" เป็น "return max(a, −a)")
พัฒนาการทางประวัติศาสตร์
แก้ขั้นตอนวิธีแบบยุคลิดเป็นหนึ่งในขั้นตอนวิธีที่เก่าแก่ที่สุดที่ใช้กันอย่างแพร่หลาย[8] ซึ่งปรากฏในหนังสือเอเลเมนส์ของยุคลิด (300 ปีก่อนคริสต์ศักราช) โดยเฉพาะในหนังสือเล่มที่ 7 (ประพจน์ที่ 1-2) และในหนังสือเล่มที่ 10 (ประพจน์ที่ 2-3) ในหนังสือเล่มที่ 7 ขั้นตอนวิธีถูกสร้างขึ้นเพื่อใช้กับจำนวนเต็ม แต่ในหนังสือเล่มที่ 10 ได้นำไปใช้กับความยาวส่วนของเส้นตรง (ในการใช้สมัยใหม่นี้ อาจพูดได้ว่ามันถูกสร้างขึ้นเพื่อใช้กับจำนวนจริง แต่ในอดีต ความยาว พื้นที่ และปริมาตร ซึ่งนับว่าเป็นจำนวนจริงในปัจจุบัน ไม่ได้ถูกวัดด้วยหน่วยเดียวกันและไม่ได้มีหน่วยธรรมชาติเป็นของตนเอง อาจกล่าวได้ว่าแนวคิดเกี่ยวกับจำนวนจริงไม่เป็นที่รู้จักในขณะนั้น) ขั้นตอนวิธีถัดมานั้นเกี่ยวกับเรขาคณิต ห. ร. ม. ของความยาว a และ b สอดคล้องกับความยาวที่มากที่สุด g ซึ่งวัด a และ b กล่าวคือ ความยาว a และ b ทั้งคู่ต่างก็เป็นพหุคูณของความยาว g
ขั้นตอนวิธีนี้อาจไม่ได้ถูกคิดค้นโดยยุคลิด ผู้ซึ่งรวบรวมผลลัพธ์จากนักคณิตศาสตร์ในหนังสือ เอเลเมนส์ ของเขา[9][10] นักคณิตศาสตร์และประวัติศาสตร์ B. L. van der Waerden ได้เสนอแนะว่า เนื้อหาในหนังสือเล่มที่ 7 ได้รับมาจากตำราเรียนเกี่ยวกับทฤษฎีจำนวน ซึ่งเขียนโดยนักคณิตศาสตร์ในโรงเรียนของพีทาโกรัส[11] ขั้นตอนวิธีอาจเป็นที่รู้จักจาก Eudoxus of Cnidus (ราว 375 ปีก่อนคริสต์ศักราช)[8][12] ขั้นตอนวิธีนี้อาจเกิดขึ้นก่อน Eudoxus[13][14] พิจารณาจากการใช้ศัพท์เฉพาะ ἀνθυφαίρεσις (anthyphairesis หรือการลบส่วนกลับ) ในงานของยุคลิดและแอริสตอเติล[15]
หลายศตวรรษต่อมา ขั้นตอนวิธีของยุคลิดถูกค้นพบทั้งในประเทศอินเดียและจีน[16] โดยแรกเริ่มเพื่อแก้ปัญหาสมการไดโอแฟนไทน์ ซึ่งเกิดขึ้นในดาราศาสตร์และทำให้สามารถสร้างปฏิทินที่แม่นยำ ในช่วงท้ายศตวรรษที่ 5 นักคณิตศาสตร์และดาราศาสตร์ชาวอินเดีย อารยภัฏ ได้อธิบายขั้นตอนวิธีว่าเป็น "เครื่องบด"[17] ซึ่งอาจมาจากประสิทธิภาพของมันในการแก้ปัญหาสมการไดโอแฟนไทน์[18] ถึงแม้ว่ากรณีพิเศษของทฤษฎีบทเศษเหลือของจีน จะถูกอธิบายในหนังสือจีนชื่อ ซุนซีสวนจิ้ง โดยผลเฉลยทั่วไปถูกเผยแพร่โดย Qin Jiushao ในหนังสือของเขาชื่อ Shushu Jiuzhang (數書九章 Mathematical Treatise in Nine Sections )[19] ขั้นตอนวิธีแบบยุคลิดถูกอธิบายในเชิงตัวเลขครั้งแรกและเป็นที่รู้จักอย่างมากในยุโรปในหนังสือ Problèmes plaisants et délectables ฉบับที่ 2 ของ Bachet (Pleasant and enjoyable problems, 1624)[17] ในยุโรป ขั้นตอนวิธีแบบยุคลิดถูกใช้เพื่อแก้ปัญหาสมการไดโอแฟนไทน์และใช้เพื่อพัฒนาเศษส่วนต่อเนื่อง ขั้นตอนวิธีแบบยุคลิดแบบขยาย ถูกตีพิมพ์โดยนักคณิตศาสตร์ชาวอังกฤษชื่อ นิโคลัส ซอนเดอร์ซัน[20] ซึ่งเชื่อว่ามันเกิดมาจาก โรเจอร์ โคตส์ เพื่อเป็นวิธีสำหรับคำนวณเศษส่วนต่อเนื่องอย่างมีประสิทธิภาพ[21]
ในศตวรรษที่ 19 ขั้นตอนวิธีแบบยุคลิดนำไปสู่การพัฒนาระบบจำนวนแบบใหม่ เช่น จำนวนเต็มเกาส์เซียน และจำนวนเต็มไอเซนสไตน์ ในปี 1815 คาร์ล ฟรีดริช เกาส์ได้ใช้ขั้นตอนวิธีแบบยุคลิดในการสาธิตการแยกตัวประกอบได้อย่างเดียวในจำนวนเต็มเกาส์เซียน ถึงแม้ผลงานของเขาจะได้ตีพิมพ์ครั้งแรกในปี 1832 ก็ตาม[22] เกาส์ได้พูดถึงขั้นตอนวิธีในหนังสือ Disquisitiones Arithmeticae ของเขา (ถูกตีพิมพ์ในปี 1801) แต่ใช้เป็นเพียงวิธีสำหรับเศษส่วนต่อเนื่อง[16] Peter Gustav Lejeune Dirichlet เป็นคนแรกที่อธิบายขั้นตอนวิธีแบบยุคลิดเพื่อเป็นพื้นฐานสำหรับทฤษฏีจำนวนอื่น ๆ[23] Lejeune Dirichlet ได้ระบุว่าผลลัพธ์ของทฤษฎีจำนวนหลายอัน เช่น การแยกตัวประกอบได้อย่างเดียว (Unique factorization) จะเป็นจริงสำหรับระบบจำนวนใด ๆ ที่สามารถใช้ขั้นตอนวิธีแบบยุคลิดได้[24] การบรรยายของ Lejeune Dirichlet ในหัวข้อทฤษฎีจำนวนถูกแก้ไขและต่อเติมโดย Richard Dedekind ผู้ใช้ขั้นตอนวิธีของยุคลิดในการศึกษาจำนวนเชิงพีชคณิต ซึ่งเป็นรูปแบบจำนวนแบบใหม่ ตัวอย่างเช่น Dedekind เป็นคนแรกที่พิสูจน์ Fermat's theorem on sums of two squares โดยใช้การแยกตัวประกอบได้อย่างเดียวของจำนวนเต็มเกาส์เซียน[25] Dedekind ยังนิยามแนวคิดของโดเมนแบบยุคลิด หรือระบบจำนวนซึ่งสามารถนิยามขั้นตอนวิธีแบบยุคลิดฉบับทั่วไป (ดังที่อธิบายด้านล่าง) ในทศวรรษปลายของศตวรรษที่ 19 ขั้นตอนวิธีแบบยุคลิดค่อย ๆ ถูกลดความสำคัญลงโดยทฤษฎี ideal ของ dedekind ซึ่งมีความทั่วไปมากขึ้น[26]
"ขั้นตอนวิธีแบบยุคลิด นับเป็นคุณปู่ของขั้นตอนวิธีทั้งหมด เพราะ มันเป็นขั้นตอนวิธีไม่ชัดแจ้งที่เก่าแก่ที่สุดที่ยังมีการใช้อยู่ในปัจจุบัน" |
โดนัลด์ คนูธ, The Art of Computer Programming, เล่มที่ 2: Seminumerical Algorithms, พิมพ์ครั้งที่ 2 (1981), 318. |
การประยุกต์ใช้อื่น ๆ ของขั้นตอนวิธีของยุคลิดถูกพัฒนาขึ้นในศตวรรษที่ 19 ในปี 1829 Charles Sturm ได้แสดงว่าขั้นตอนวิธีนั้นเป็นประโยชน์ในวิธี Sturm chain ซึ่งใช้สำหรับการนับรากที่แท้จริงของพหุนามในช่วงที่สนใจ[27]
ขั้นตอนวิธีแบบยุคลิดเป็นขั้นตอนวิธีความสัมพันธ์ของจำนวนเต็ม ซึ่งคือวิธีที่ใช้ในการหาความสัมพันธ์ของจำนวนเต็มในจำนวนจริงเทียบเท่า ขั้นตอนวิธีความสัมพันธ์ของจำนวนเต็ม ใหม่หลายอันได้ถูกพัฒนาขึ้น เช่น ขั้นตอนวิธีของ Helaman Ferguson และ R.W. Forcade (1979)[28] และ LLL algorithm[29][30]
ในปี 1969 Cole และ Davie ได้พัฒนาเกมผู้เล่นสองคนโดยมีพื้นฐานจากขั้นตอนวิธีแบบยุคลิด ชื่อว่า The Game of Euclid [31] ซึ่งมีกลยุทธ์ที่ดีที่สุด[32] ผู้เล่นจะเริ่มต้นจากกองหินซึ่งมี a และ b ก้อน เมื่อถึงตาของผู้เล่นแล้วจะทำการนำหินออกจากกองที่มีจำนวนมากกว่าเป็นจำนวนเท่ากับพหุคูณ m ของจำนวนหินในกองที่น้อยกว่า ดังนั้น ถ้าทั้งสองกองมีหิน x และ y ก้อนตามลำดับ เมื่อ x มากกว่า y ผู้เล่นคนต่อไปสามารถนำหินออกจากกองที่มีจำนวนหินมากกว่า ทำให้จำนวนหินลดจาก x ก้อนเหลือ x - my ก้อน ตราบเท่าที่ยังคงเป็นจำนวนเต็มที่ไม่ติดลบ ผู้ชนะคือผู้เล่นคนแรกที่ทำให้กองใดกองหนึ่งของตนเองเหลือหินเท่ากับ 0[33][34]
การประยุกต์ใช้ทางคณิตศาสตร์
แก้เอกลักษณ์ของเบซู
แก้เอกลักษณ์ของเบซูระบุว่าตัวหารร่วมมาก g ของจำนวนนับสองจำนวน a และ b สามารถเขียนเป็นผลรวมเชิงเส้นของจำนวนนับ a และ b ได้[35] กล่าวอีกนัยหนึ่ง คือ สามารถหาจำนวนนับ s และ t ที่ทำให้ g = sa + tb ได้เสมอ[36][37]
จำนวนนับ s และ t สามารถคำนวณได้จากผลหาร q0, q1, ... โดยการย้อนกลับลำดับของสมการในอัลกอริธึมของยุคลิด[38] โดยเริ่มต้นจากสมการรองสุดท้าย ซึ่งสามารถเขียน g ในรูปของผลหาร qN−1 และเศษที่เหลือสองตัวก่อนหน้า rN−2 และ rN−3 ได้ดังนี้
- g = rN−1 = rN−3 − qN−1 rN−2 .
เศษที่เหลือทั้งสองนั้นสามารถเขียนให้อยู่ในรูปของผลหารและเศษที่เหลือก่อนหน้าได้เช่นกัน
- rN−2 = rN−4 − qN−2 rN−3 และ
- rN−3 = rN−5 − qN−3 rN−4 .
เมื่อแทนค่า rN−2 และ rN−3 ลงในสมการแรก จะได้ g เป็นผลรวมเชิงเส้นของเศษเหลือ rN−4 และ rN−5 การแทนที่สมการที่เหลือด้วยเศษที่เหลือก่อนหน้าสามารถทำต่อไปได้เรื่อย ๆ จนกว่าจะถึงจำนวนนับเดิม a และ b
- r2 = r0 − q2 r1
- r1 = b − q1 r0
- r0 = a − q0 b.
หลังจากแทนที่ส่วนที่เหลือทั้งหมด r0, r1, ... สมการสุดท้ายจะแสดงให้เห็นว่า g เป็นผลรวมเชิงเส้นของ a และ b คือ g = sa + tb จากเอกลักษณ์ของเบซู อัลกอริธึมข้างต้นจึงสามารถเขียนในรูปทั่วไปของโดเมนยุคลิด ได้
หมายเหตุ
แก้- ก. ^ ตำราบางเล่มที่ใช้โดยทั่วไป เช่น Topics in Algebra ของ I. N. Herstein และ Algebra ของ Serge Langใช้คำว่า "Euclidean algorithm" หมายถึงวิธีหารแบบยุคลิด[39]
อ้างอิง
แก้- ↑ Thomas L. Heath, The Thirteen Books of Euclid's Elements, 2nd ed. [Facsimile. Original publication: Cambridge University Press, 1925], 1956, Dover Publications
- ↑ http://cgm.cs.mcgill.ca/~godfried/publications/banff.pdf
- ↑ Stark 1978, p. 16
- ↑ Stark 1978, p. 21
- ↑ LeVeque 1996, p. 32
- ↑ Kimberling, C. (1983). "A Visual Euclidean Algorithm". Mathematics Teacher. 76: 108–109.
- ↑ Stillwell 1997, p. 14
- ↑ 8.0 8.1 Knuth 1997, p. 318
- ↑ Weil, A. (1983). Number Theory. Boston: Birkhäuser. pp. 4–6. ISBN 0-8176-3141-0.
- ↑ Jones, A. (1994). "Greek mathematics to AD 300". Companion encyclopedia of the history and philosophy of the mathematical sciences. New York: Routledge. pp. 46–48. ISBN 0-415-09238-8.
- ↑ van der Waerden, B. L. (1954). Science Awakening. translated by Arnold Dresden. Groningen: P. Noordhoff Ltd. pp. 114–115.
- ↑ von Fritz, K. (1945). "The Discovery of Incommensurability by Hippasus of Metapontum". Annals of Mathematics. 46 (2): 242–264. doi:10.2307/1969021. JSTOR 1969021.
- ↑ Heath, T. L. (1949). Mathematics in Aristotle. Oxford Press. pp. 80–83.
- ↑ Fowler, D. H. (1987). The Mathematics of Plato's Academy: A New Reconstruction. Oxford: Oxford University Press. pp. 31–66. ISBN 0-19-853912-6.
- ↑ Becker, O. (1933). "Eudoxus-Studien I. Eine voreuklidische Proportionslehre und ihre Spuren bei Aristoteles und Euklid". Quellen und Studien zur Geschichte der Mathematik B. 2: 311–333.
- ↑ 16.0 16.1 Stillwell 1997, p. 31
- ↑ 17.0 17.1 Tattersall 2005, p. 70
- ↑ Rosen 2000, pp. 86–87
- ↑ Tattersall 2005, pp. 72, 184–185
- ↑ Saunderson, Nicholas (1740). The Elements of Algebra in Ten Books. University of Cambridge Press. สืบค้นเมื่อ 1 November 2016.
- ↑ Tattersall 2005, pp. 72–76
- ↑ Gauss, C. F. (1832). "Theoria residuorum biquadraticorum". Comm. Soc. Reg. Sci. Gött. Rec. 4. Reprinted in Gauss, C. F. (2011). "Theoria residuorum biquadraticorum commentatio prima". Werke. Vol. 2. Cambridge Univ. Press. pp. 65–92. doi:10.1017/CBO9781139058230.004. ISBN 9781139058230. and Gauss, C. F. (2011). "Theoria residuorum biquadraticorum commentatio secunda". Werke. Vol. 2. Cambridge Univ. Press. pp. 93–148. doi:10.1017/CBO9781139058230.005. ISBN 9781139058230.
- ↑ Stillwell 1997, pp. 31–32
- ↑ Lejeune Dirichlet 1894, pp. 29–31
- ↑ Richard Dedekind in Lejeune Dirichlet 1894, Supplement XI
- ↑ Stillwell 2003, pp. 41–42
- ↑ Sturm, C. (1829). "Mémoire sur la résolution des équations numériques". Bull. Des sciences de Férussac (ภาษาฝรั่งเศส). 11: 419–422.
- ↑ เอริก ดับเบิลยู. ไวส์สไตน์, "Integer Relation" จากแมทเวิลด์.
- ↑ Peterson, I. (12 August 2002). "Jazzing Up Euclid's Algorithm". ScienceNews.
- ↑ Cipra, Barry Arthur (16 พฤษภาคม 2000). "The Best of the 20th Century: Editors Name Top 10 Algorithms" (PDF). SIAM News. Society for Industrial and Applied Mathematics. 33 (4). คลังข้อมูลเก่าเก็บจากแหล่งเดิม (PDF)เมื่อ 22 กันยายน 2016. สืบค้นเมื่อ 19 กรกฎาคม 2016.
- ↑ Cole, A. J.; Davie, A. J. T. (1969). "A game based on the Euclidean algorithm and a winning strategy for it". Math. Gaz. 53 (386): 354–357. doi:10.2307/3612461. JSTOR 3612461. S2CID 125164797.
- ↑ Spitznagel, E. L. (1973). "Properties of a game based on Euclid's algorithm". Math. Mag. 46 (2): 87–92. doi:10.2307/2689037. JSTOR 2689037.
- ↑ Rosen 2000, p. 95
- ↑ Roberts, J. (1977). Elementary Number Theory: A Problem Oriented Approach. Cambridge, MA: MIT Press. pp. 1–8. ISBN 0-262-68028-9.
- ↑ Jones, G. A.; Jones, J. M. (1998). "Bezout's Identity". Elementary Number Theory. New York: Springer-Verlag. pp. 7–11.
- ↑ Rosen 2000, p. 81
- ↑ Cohn 1962, p. 104
- ↑ Rosen 2000, p. 91
- ↑ Ore 1948, pp. 247–248
บรรณานุกรม
แก้- Cohen, H. (1993). A Course in Computational Algebraic Number Theory. New York: Springer-Verlag. ISBN 0-387-55640-0.
- Cohn, H. (1962). Advanced Number Theory. New York: Dover. ISBN 0-486-64023-X.
- Cox, D.; Little, J.; O'Shea, D. (1997). Ideals, Varieties, and Algorithms: An Introduction to Computational Algebraic Geometry and Commutative Algebra (2nd ed.). Springer-Verlag. ISBN 0-387-94680-2.
- Crandall, R.; Pomerance, C. (2001). Prime Numbers: A Computational Perspective (1st ed.). New York: Springer-Verlag. ISBN 0-387-94777-9.
- Lejeune Dirichlet, P. G. (1894). Dedekind, Richard (บ.ก.). Vorlesungen über Zahlentheorie (Lectures on Number Theory) (ภาษาเยอรมัน). Braunschweig: Vieweg. LCCN 03005859. OCLC 490186017.. See also Vorlesungen über Zahlentheorie
- Knuth, D. E. (1997). The Art of Computer Programming, Volume 2: Seminumerical Algorithms (3rd ed.). Addison–Wesley. ISBN 0-201-89684-2.
- LeVeque, W. J. (1996) [1977]. Fundamentals of Number Theory. New York: Dover. ISBN 0-486-68906-9.
- Mollin, R. A. (2008). Fundamental Number Theory with Applications (2nd ed.). Boca Raton: Chapman & Hall/CRC. ISBN 978-1-4200-6659-3.
- Ore, O. (1948). Number Theory and Its History. New York: McGraw–Hill.
- Rosen, K. H. (2000). Elementary Number Theory and its Applications (4th ed.). Reading, MA: Addison–Wesley. ISBN 0-201-87073-8.
- Schroeder, M. (2005). Number Theory in Science and Communication (4th ed.). Springer-Verlag. ISBN 0-387-15800-6.
- Stark, H. (1978). An Introduction to Number Theory. MIT Press. ISBN 0-262-69060-8.
- Stillwell, J. (1997). Numbers and Geometry. New York: Springer-Verlag. ISBN 0-387-98289-2.
- Stillwell, J. (2003). Elements of Number Theory. New York: Springer-Verlag. ISBN 0-387-95587-9.
- Tattersall, J. J. (2005). Elementary Number Theory in Nine Chapters. Cambridge: Cambridge University Press. ISBN 978-0-521-85014-8.