oracle ในอัลกอริทึมการค้นหาของโกรเวอร์มีการใช้งานอย่างไร


27

อัลกอริธึมการค้นหาของโกรเวอร์ให้ความเร็วในการหากำลังสองที่พิสูจน์ได้สำหรับการค้นหาฐานข้อมูลที่ไม่เรียงลำดับ อัลกอริทึมจะแสดงโดยวงจรควอนตัมต่อไปนี้:

ในการแสดงมากที่สุดเป็นส่วนสำคัญของโปรโตคอลเป็น "ประตู oracle"ซึ่ง "อย่างน่าอัศจรรย์" ประสิทธิภาพการดำเนินงาน|อย่างไรก็ตามบ่อยครั้งที่มีคนพูดว่าความยากลำบากที่จะรู้ว่าประตูดังกล่าวเป็นอย่างไร ที่จริงแล้วอาจดูเหมือนว่าการใช้ "oracle" นี้เป็นเพียงวิธีการกวาดล้างความยากลำบากใต้พรมUω|x(1)f(x)|x

เราจะรู้ได้อย่างไรว่าการดำเนินการดั้งเดิมนั้นเกิดขึ้นจริงหรือไม่? และถ้าเป็นเช่นนั้นความซับซ้อนของมัน (เช่นในแง่ของความซับซ้อนของการสลายตัวของประตู) คืออะไร?


5
นั่นคือสิ่งที่ฉันสงสัยด้วย ในการทดลองเช่นนี้พวกเขานำวิธีแก้ปัญหาไปสู่ ​​oracle ซึ่งมีรสชาติคล้ายกับการโกงกับฉัน ...
M. Stern

คำตอบที่ดีสำหรับคำถามนี้มีอยู่ในคำตอบนี้ใน CS Theory SE
glS

คำตอบ:


20

ฟังก์ชั่นเป็นเพียงฟังก์ชั่นบูลโดยพลการของสตริงบิต:\} สำหรับแอปพลิเคชันที่จะทำลายการเข้ารหัสเช่น[1] , [2] , หรือ[3]นี่ไม่ใช่การค้นหาฐานข้อมูลจริง ๆ ซึ่งจะทำให้การจัดเก็บฐานข้อมูลทั้งหมดเป็นวงจรควอนตัม แต่อย่างใด แต่เป็นหน้าที่เช่นff:{0,1}n{0,1}

x{1,if SHA-256(x)=y;0,otherwise,

สำหรับ fixedซึ่งไม่มีโครงสร้างเราสามารถใช้ประโยชน์จากการค้นหาแบบคลาสสิกซึ่งแตกต่างจากการพูดฟังก์ชั่นy

x{1,if 2xy(mod220481942289),0,otherwise,

ซึ่งมีโครงสร้างที่สามารถเอาเปรียบเพื่อพลิกกลับเร็วขึ้นแม้ในคอมพิวเตอร์แบบดั้งเดิม

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

ค่าใช้จ่ายทั่วไปเพียงอย่างเดียวที่ด้านบนของเป็นเงื่อนไขพิเศษไม่ใช่เกทโดยที่คือ xor และส่วนเสริมพิเศษสำหรับมัน หากเรามีวงจรสร้างขึ้นจากและวงจรสำหรับจากนั้นถ้าเราใช้กับร่วมกับ qubit เสริมในตอนแรกในรัฐโดยที่f

C:|a|b|a|ab
F:|x|a|junk|x|af(x)|junk
Cf|x|=H|1=(1/2)(|0|1)H เป็นประตู Hadamard จากนั้นเราจะได้รับ

F|x||junk=12(F|x|0|junkF|x|1|junk)=12(|x|f(x)|junk|x|1f(x)|junk).

ถ้าดังนั้นดังนั้นการทำให้ง่ายขึ้นเราจะได้ที่จากนั้นดังนั้นและโดยทั่วไปf(x)=01f(x)=1

F|x||junk=|x||junk,
f(x)=11f(x)=0
F|x||junk=|x||junk,
F|x||junk=(1)f(x)|x||junk.


5

กระดาษต้นฉบับของโกรเวอร์ "กลศาสตร์ควอนตัมช่วยในการค้นหาเข็มในกองหญ้า" ระบุไว้อย่างชัดเจนมันสันนิษฐานว่า C (S) สามารถประเมินได้ในเวลาที่แน่นอน การค้นหาของ Grover ไม่ได้กังวลเกี่ยวกับความสามารถในการใช้งาน แต่การลดพหุนามในสิ่งที่เรียกว่าความซับซ้อนของแบบสอบถาม (กี่ครั้งที่คุณปรึกษา oracle เช่นฐานข้อมูลแบบดั้งเดิม)

อันที่จริงแนวคิดเรื่องoracleในการคำนวณถูกนำเสนอโดยAlan Turingเพื่ออธิบายโครงสร้างที่คำอธิบายเกี่ยวกับ UTM อาจไม่สามารถใช้งานได้จริง (Wikipedia) มันมีความหมายบางอย่างที่มีมนต์ขลัง

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

สำหรับปัญหาการจดจำรูปแบบโดยใช้การค้นหาของ Grover หากฉันมี 4 รูปแบบใน 2 qubits (00, 01, 10, 11) และฉันต้องการทำเครื่องหมายและขยาย 11 เส้นทแยงมุมของ oracle ของฉันควรจะรวมกัน (1,1,1 -1) เพื่อดูแลการเปลี่ยนเฟส pi สำหรับการแก้ปัญหา ดังนั้นเพื่อให้ง่ายต่อการติดตั้งคุณต้องรู้คำตอบทั้งหมดก่อนล่วงหน้า

การปรับปรุงที่สมบูรณ์ของรูปแบบที่สมบูรณ์หากได้รับในกระดาษ "การจับคู่รูปแบบควอนตัม" โดย Mateas และ Omar ในสาระสำคัญมันสร้าง oracles คงที่มากเท่าที่มีตัวอักษรในชุด ดังนั้นสำหรับสตริงไบนารีของเราจะมี oracle ที่ทำเครื่องหมาย 1s ทั้งหมดและอีกอันที่ทำเครื่องหมาย 0s ทั้งหมด ออราเคิลถูกเรียกตามเงื่อนไขโดยขึ้นอยู่กับสิ่งที่ฉันต้องการค้นหา ถ้าฉันต้องการค้นหา 11 ฉันเรียก oracle 1 บน LSqubit และ oracle 1 อีกครั้งบน MSqubit โดย oracle แรกฉันจะขยายสถานะ (01, 11), คือสถานะที่มี LSQ เป็น 1 และในการเรียกครั้งที่ 2 มันจะขยาย (10, 11) อย่างที่คุณเห็น 11 เป็นรัฐเดียวที่ได้รับการขยายสองเท่าสิ้นสุดในความน่าจะเป็นในการวัดที่สูงขึ้น แม้ว่าวงจรควอนตัมที่คอมไพล์จะเปลี่ยนไปตามรูปแบบการค้นหาอินพุตของฉัน คำอธิบายระดับสูงของอัลกอริทึมควอนตัมยังคงเหมือนเดิม คุณสามารถนึกว่า oracles เป็นการเรียกใช้ฟังก์ชันตามกรณีสวิตช์ของชุดตัวอักษรที่เรียกใช้สำหรับอักขระแต่ละตัวในสตริงการค้นหา

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