อัลกอริทึมของ Freivalds
อัลกอริทึมของ Freivalds (ตั้งชื่อตามRūsiņš Mārtiņš Freivalds ) เป็นอัลกอริทึมแบบสุ่มเชิง ความน่าจะเป็น ที่ใช้ในการตรวจสอบการคูณเมทริกซ์ โดยกำหนดเมทริกซ์ขนาดn × nสามเมทริกซ์ ,, และปัญหาทั่วไปประการหนึ่งคือการตรวจสอบว่าอัลกอริทึมแบบง่ายๆจะคำนวณผลคูณระบุอย่างชัดเจนและเปรียบเทียบทีละข้อว่าผลิตภัณฑ์นี้เท่ากับหรือไม่อย่างไรก็ตามอัลกอริทึมการคูณเมทริกซ์ที่เป็นที่รู้จักดีที่สุดนั้นทำงานด้วยเวลา อัลกอริทึมของ Freivalds ใช้การสุ่มเพื่อลดขอบเขตเวลาดังกล่าวลง[ 1 ]ด้วยความน่าจะเป็นสูงในเวลาที่อัลกอริธึมสามารถตรวจสอบผลคูณเมทริกซ์ได้ด้วยความน่าจะเป็นของความล้มเหลวน้อยกว่า.
อัลกอริทึม
ป้อนข้อมูล
เมทริกซ์ n × nสามเมทริกซ์ ,, และ.
เอาต์พุต
ใช่ ถ้าไม่ อย่างอื่นก็ไม่เกี่ยว
ขั้นตอน
ข้อผิดพลาด
ถ้าถ้าเช่นนั้น อัลกอริทึมจะส่งคืนค่า "ใช่" เสมอดังนั้น ความน่าจะเป็นที่อัลกอริทึมจะส่งคืน "ใช่" จึงน้อยกว่าหรือเท่ากับครึ่งหนึ่ง นี่เรียกว่า ข้อผิดพลาด ด้านเดียว
โดยการทำซ้ำอัลกอริทึมkครั้ง และส่งคืนค่า "ใช่" ก็ต่อเมื่อการทำซ้ำทั้งหมดให้ผลลัพธ์เป็น "ใช่" เท่านั้น จะทำให้เวลาในการทำงานเป็นและความน่าจะเป็นของข้อผิดพลาดของบรรลุผลสำเร็จแล้ว
ตัวอย่าง
สมมติว่าเราต้องการตรวจสอบว่า:
เลือกเวกเตอร์แบบสุ่มที่มีสององค์ประกอบ โดยแต่ละองค์ประกอบมีค่าเท่ากับ 0 หรือ 1 –สมมติว่าเป็น เวกเตอร์นี้ –และใช้ในการคำนวณ:
ผลลัพธ์ที่ได้คือเวกเตอร์ศูนย์ ซึ่งบ่งชี้ถึงความเป็นไปได้ที่ AB = C อย่างไรก็ตาม หากในการทดลองครั้งที่สอง เวกเตอร์หากเลือกตัวเลือกนี้ ผลลัพธ์ที่ได้จะเป็นดังนี้:
ผลลัพธ์ที่ได้ไม่ใช่ศูนย์ ซึ่งพิสูจน์ได้ว่า AB ≠ C อย่างแท้จริง
มีเวกเตอร์ 0/1 สององค์ประกอบอยู่สี่เวกเตอร์ และครึ่งหนึ่งของเวกเตอร์เหล่านั้นจะให้เวกเตอร์ศูนย์ในกรณีนี้ (และดังนั้น โอกาสที่จะสุ่มเลือกสิ่งเหล่านี้ในการทดลองสองครั้ง (และสรุปผิดว่า AB=C) คือ 1/2 หรือ 1/4 ในกรณีทั่วไป สัดส่วนของrที่ให้เวกเตอร์ศูนย์อาจน้อยกว่า 1/2 และจะใช้จำนวนการทดลองที่มากขึ้น (เช่น 20 ครั้ง) ซึ่งทำให้ความน่าจะเป็นของข้อผิดพลาดน้อยลงมาก
การวิเคราะห์ข้อผิดพลาด
ให้pเท่ากับความน่าจะเป็นของความผิดพลาด เราอ้างว่า ถ้าA × B = Cแล้วp = 0 และถ้าA × B ≠ Cแล้วp ≤ 1/2
กรณีA × B = C
โดยไม่คำนึงถึงค่าของเนื่องจากมันใช้เพียงสิ่งนั้นดังนั้น ความน่าจะเป็นของข้อผิดพลาดในกรณีนี้คือ:
กรณีA × B ≠ C
อนุญาตโดยที่
ที่ไหน
- .
เนื่องจากเรามีองค์ประกอบบางอย่างของมีค่าไม่เป็นศูนย์ สมมติว่าองค์ประกอบนั้นตามนิยามของการคูณเมทริกซ์เราจะได้ว่า:
- .
สำหรับค่าคงที่บางค่าโดยใช้ทฤษฎีบทของเบย์สเราสามารถแบ่งกลุ่มตาม:
| 1 |
เราใช้สิ่งนั้น:
เมื่อแทนค่าเหล่านี้ลงในสมการ ( 1 ) เราจะได้:
ดังนั้น,
การพิสูจน์เสร็จสมบูรณ์แล้ว
ผลที่ตามมา
การวิเคราะห์เชิงอัลกอริทึมอย่างง่ายแสดงให้เห็นว่าเวลาในการทำงานของอัลกอริทึม นี้ คือ(ในสัญกรณ์ Big O ) วิธีนี้เร็วกว่าเวลาการทำงานของอัลกอริธึมเชิงกำหนด แบบคลาสสิกซึ่งอยู่ที่(หรือหากใช้การคูณเมทริกซ์แบบเร็ว ) การวิเคราะห์ข้อผิดพลาดยังแสดงให้เห็นว่า หากเรียกใช้อัลกอริทึมครั้ง โดยมีขอบเขตความคลาดเคลื่อนน้อยกว่าสามารถทำได้ ซึ่งเป็นปริมาณที่เล็กมากในเชิงเลขชี้กำลัง อัลกอริทึมนี้ยังทำงานได้รวดเร็วในทางปฏิบัติ เนื่องจากมีการใช้งานที่รวดเร็วสำหรับการคูณเมทริกซ์กับเวกเตอร์อย่างแพร่หลาย ดังนั้น การใช้อัลกอริทึมแบบสุ่ม จึง สามารถเร่งความเร็วอัลกอริทึมแบบกำหนดที่ ช้ามาก ได้
อัลกอริทึมของ Freivalds มักถูกกล่าวถึงในบทนำเกี่ยวกับอัลกอริทึมเชิงความน่าจะเป็นเนื่องจากความเรียบง่ายและวิธีการที่แสดงให้เห็นถึงความเหนือกว่าของอัลกอริทึมเชิงความน่าจะเป็นในทางปฏิบัติสำหรับปัญหาบางอย่าง