ขั้นตอนวิธีของเฟรย์วัลส์

จาก testwiki
ไปยังการนำทาง ไปยังการค้นหา

ขั้นตอนวิธีของเฟรย์วัลส์ (แม่แบบ:Langx) เป็นขั้นตอนวิธีแบบสุ่ม (randomised algorithm) ที่รูซินส์ มาร์ตินส์ เฟรย์วัลส์ (Rusins Martins Freivalds) นักวิทยาศาสตร์ชาวลัตเวีย นำเสนอขึ้นสำหรับใช้ตรวจสอบความเท่ากันของผลคูณของเมทริกซ์กับเมทริกซ์ต้นแบบ[1]

แนวคิดเบื้องต้น

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

ขั้นตอนวิธี

ข้อมูลนำเข้า

เมทริกซ์จตุรัส 3 เมทริกซ์ มีขนาด n×n ได้แก่ A,B,C.

ข้อมูลส่งออก

ตอบ ใช่ ถ้า A×B=C

ตอบ ไม่ใช่ ถ้า A×BC

วิธีการ

  1. สุ่ม เวกเตอร์ r ขนาด n×1.
  2. คำนวณ P=A×(Br)Cr.
  3. ตรวจสอบว่าP เป็นเวกเตอร์ศูนย์หรือไม่ คืนค่า ใช่ ถ้าP เป็นเวกเตอร์ศูนย์ คืนค่า ไม่ใช่ถ้าP ไม่ได้เป็นเวกเตอร์ศูนย์

ความซับซ้อนเชิงเวลา

ทำงานใน O(n2) [2] ซึ่งเร็วกว่าการคูณเมทริกซ์แล้วเปรียบเทียบทีละตัว (ทำงานใน O(n3) ) รวมถึงเร็วกว่า ขั้นตอนวิธีของ Coppersmith-Winograd ซึ่งเป็นขั้นตอนวิธีในการหาผลคูณของเมทริกซ์ที่เร็วที่สุดในปัจจุบัน (ทำงานใน O(n2.376)) มาก

วิเคราะห์ความผิดพลาด

ขั้นตอนวิธีนี้รับประกันว่า ถ้า A×B=C แล้วความน่าจะเป็นในการตอบผิดจะเป็น 0, ถ้า A×BC แล้วความน่าจะเป็นในการตอบผิดมีค่าไม่เกิน 12

  • พิจารณากรณีที่ A×B=C
P=A×(Br)Cr=0 สำหรับทุก r ที่เป็นไปได้ดังนั้นความน่าจะเป็นในการตอบผิดเป็น 0
  • พิจารณากรณีที่ A×BC
กำหนดให้ D=A×BC เนื่องจาก A×BC แสดงว่าจะมีค่า i,j บางค่าที่ dij0
P=A×(Br)Cr=Dr=[p1p2p3pn]
pi=Σdijrj=dij+K
โดย กฎของเบย์ (Bayes' theorem)
Pr[pi=0]=Pr[pi=0|K=0]Pr[K=0]+Pr[pi=0|K0]Pr[K0]
Pr[pi=0|K=0]=Pr[rj=0]=12
Pr[pi=0|K0]<=Pr[rj=1]=12
Pr[pi=0]<=12Pr[K=0]+12Pr[K0]
Pr[pi=0]<=12Pr[K=0]+12(1Pr[K=0])
Pr[pi=0]<=12
เพราะฉะนั้น Pr[P=0]<=Pr[pi=0]<=12

หมายเหตุ

แม้ว่าขั้นตอนวิธีนี้อาจมีความผิดพลาดสูงได้ถึง 12 แต่ในการใช้งานจริงสามารถลดความผิดพลาดได้ การทำงานขั้นตอนวิธีนี้ซ้ำหลาย ๆ ครั้งโดยใช้ r ที่แตกต่างกัน จะช่วยลดความน่าจะเป็นในการตอบผิดลงไปได้

สมมุติว่าต้องการทำขั้นตอนวิธีนี้ซ้ำกัน n ครั้ง พบว่าความน่าจะเป็นในการตอบผิดมีค่า ≤ 12n ซึ่งมีค่าลดลงเป็นฟังก์ชันเลขชี้กำลังเมื่อเทียบกับค่า n

เชิงอรรถ

แม่แบบ:รายการอ้างอิง

อ้างอิง

  • Freivalds, R. (1977), “Probabilistic Machines Can Use Less Running Time”, IFIP Congress 1977, pp. 839–842.
  • Freivalds, R. (1979), “Fast Probabilistic Algorithms”, MATHEMATICAL FOUNDATIONS OF COMPUTER SCIENCE 1979, pp. 59-63. [1]แม่แบบ:ลิงก์เสีย