Oracle Construction for Algorithm ของโกรเวอร์


16

ในการคำนวณควอนตัมและข้อมูลควอนตัมของไมค์และไอค์อัลกอริทึมของโกรเวอร์มีการอธิบายอย่างละเอียด อย่างไรก็ตามในหนังสือและในคำอธิบายทั้งหมดที่ฉันพบออนไลน์สำหรับอัลกอริทึมของ Grover ดูเหมือนจะไม่มีการเอ่ยถึงวิธีการสร้าง Oracle ของ Grover เว้นแต่ว่าเรารู้อยู่แล้วว่าเรากำลังค้นหาเอาชนะจุดประสงค์ของ ขั้นตอนวิธี โดยเฉพาะคำถามของฉันคือ: ให้ f (x) เช่นนั้นสำหรับบางค่า x, f (x) = 1 แต่สำหรับคนอื่น ๆ ทั้งหมด f (x) = 0 เราจะสร้าง oracle ได้อย่างไรจาก สถานะเริ่มต้นโดยพลการของเรา | x> | y> ถึง | x> | y + f (x)>? รายละเอียดที่ชัดเจนที่สุดเท่าที่จะเป็นไปได้ (อาจเป็นตัวอย่าง?) จะได้รับการชื่นชมอย่างมาก หากการก่อสร้างใด ๆ สำหรับฟังก์ชั่นใด ๆ เป็นไปได้ด้วย Hadamard, Pauli หรือประตูควอนตัมมาตรฐานอื่น ๆ


"ที่นี่ดูเหมือนจะไม่มีการพูดถึงวิธีการสร้าง Oracle ของ Grover เว้นแต่ว่าเรารู้อยู่แล้วว่าเรากำลังค้นหาเอาชนะจุดประสงค์ของอัลกอริทึม" ... "Grover's Oracle" เป็นปัญหาที่ต้องแก้ไข คุณไม่สร้างมัน คุณได้รับ (oracle access to) และขอให้ทำการคำนวณเพื่อเปิดเผยค่า ถ้าเป็นเช่นนั้นให้แกล้งทำเป็นว่าฉันสร้าง oracle ขึ้นมาแล้วขอให้คุณแก้ปัญหา (โปรดทราบว่าการอ่าน / เขียน / เตรียมฐานข้อมูลของรายการใช้เวลานานกว่าการรันอัลกอรึทึม - ของ Grover )NN
Daniel Apon

2
แต่ถ้าหากแทนที่จะให้คำพยากรณ์เราจะได้รับ f (x) บ้าง? ลองนึกภาพเรากำลังแก้ปัญหา 3-SAT และต้องการใช้ Grover เพื่อเร่งแก้ปัญหา เรารู้ว่า f (x) ในคำถาม (ประโยคจริง 3-SAT) แต่ไม่จำเป็นต้องรู้ว่าบิตสตริง x จะให้ผลลัพธ์ที่แท้จริงเมื่อเสียบเข้ากับ 3-SAT จะไม่มีวิธีสร้าง oracle จากฟังก์ชั่น 3-SAT เพื่อค้นหาสตริงบิตที่ถูกต้องหรือไม่? หากไม่มีและเป็นสิ่งที่คุณแนะนำสิ่งที่บุคคลอื่นจะต้องจัดเตรียมอัลกอริทึมของโกรเวอร์ดูเหมือนจะเป็นสิ่งประดิษฐ์ แต่เป็นแบบฝึกหัดที่มอบให้คุณ
จะ

คำตอบ:


20

ออราเคิลนั้นเป็นเพียงการนำไปปฏิบัติของภาคแสดงที่คุณต้องการค้นหาคำตอบที่น่าพอใจ

ตัวอย่างเช่นสมมติว่าคุณมีปัญหาแบบ 3 ที่นั่ง:

(¬x1 ∨ ¬x3 ∨ ¬x4) ∧
    (x2 ∨ x3 ∨ ¬x4) ∧
    (x1 ∨ ¬x2 ∨ x4) ∧
    (x1 ∨ x3 ∨ x4) ∧
    (¬x1 ∨ x2 ∨ ¬x3)

หรือในรูปแบบตารางที่มีแต่ละแถวเป็น 3 ส่วน, x หมายถึง "ตัวแปรนี้เป็นเท็จ", หมายถึง "ตัวแปรนี้เป็นจริง" และความหมายของพื้นที่ "ไม่อยู่ในข้อ":

1 2 3 4
-------
x   x x
  o o x
o x   o
x o x

ตอนนี้ให้สร้างวงจรที่คำนวณว่าอินพุตเป็นวิธีแก้ปัญหาดังนี้:

ตัวตรวจสอบการแก้ปัญหา

ทีนี้เพื่อเปลี่ยนวงจรของคุณให้เป็นออราเคิลให้กดบิตเอาท์พุทที่มีประตู Z และแยกขยะที่คุณทำ (เช่นเรียกใช้วงจรคำนวณตามลำดับย้อนหลัง):

วงจรพยากรณ์

นั่นคือทั้งหมดที่มีให้มัน คำนวณภาคแสดงผลที่ได้ด้วย Z ลบคำกริยา นั่นเป็นคำทำนาย

ทำซ้ำขั้นตอนการแพร่กระจายด้วยขั้นตอนของ oracle และคุณจะต้องค้นหาด้วยตัวเอง :

ค้นหาโกรเวอร์

... แม้ว่าคุณควรเลือกตัวอย่างที่มีวิธีแก้ไขน้อยลงดังนั้นความคืบหน้าจึงค่อยเป็นค่อยไป (แทนที่จะหมุนไปตามระนาบ start-state-solution-state มากกว่า 90 องศาต่อขั้นตอนตามตัวอย่างของฉัน)


ขอบคุณนี่เป็นประโยชน์อย่างมาก ชัดเจนอย่างไม่น่าเชื่อตอบทุกอย่างที่ฉันถาม (และใช้ประตูควอนตัมทั่วไปด้วย!) มีเหตุผลใดที่คุณตัดสินใจที่จะเปลี่ยน qubits เริ่มต้นทั้งหมดของคุณเป็นสถานะ | 1> ก่อนที่จะใส่พวกเขาไว้ในประตูซ้อนทับด้วย Hadamard > รัฐ qubits ผ่าน Hadamards (เช่นมีข้อได้เปรียบนี้)? นอกจากนี้การดำเนินการอะไรสำหรับขั้นตอนการแพร่กระจายของคุณ? ดูเหมือนว่าควบคุม X แต่คุณใช้ | 1> หรือเป็น | 0> เป็นตัวควบคุมหรือไม่
จะ

@ ฉันจะใช้สถานะเริ่มต้นที่แตกต่างกัน คุณสามารถทำเช่นนั้นได้ตราบใดที่คุณเปลี่ยนสถานะเมื่อตะกี้โดยผู้ดำเนินการแพร่กระจาย (ต้องจับคู่) สถานะเริ่มต้น / การแพร่ทั้งหมดที่มีระยะทางเท่ากันทุกสถานะการคำนวณจะทำงานได้ดีเท่า ๆ กัน การควบคุมแบบวงกลมบวกในแผนภาพของฉันคือ "การควบคุมแกน X" ซึ่งเทียบเท่ากับการควบคุมปกติที่ล้อมรอบด้วยประตู Hadamard ดูเหมือนไม่ใช่เพราะเปลี่ยนได้ เริ่มต้นของฉัน / รัฐแพร่กระจายเป็นn} (12|012|1)n
Craig Gidney

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