มีคำอธิบายของคนธรรมดาสำหรับสาเหตุที่อัลกอริทึมของ Grover ทำงานอย่างไร


27

นี้บล็อกโพสต์โดยสกอตต์ Aaronsonเป็นคำอธิบายที่มีประโยชน์และเรียบง่ายของขั้นตอนวิธีของชอร์

ฉันสงสัยว่าถ้ามีเช่นคำอธิบายขั้นตอนวิธีควอนตัมที่มีชื่อเสียงมากที่สุดที่สอง: อัลกอริทึมของโกรเวอร์เพื่อการค้นหาเรียงลำดับฐานข้อมูลของขนาดO(n)ในO(n)เวลา

โดยเฉพาะอย่างยิ่งฉันต้องการเห็นสัญชาตญาณที่เข้าใจได้สำหรับผลเริ่มต้นที่น่าประหลาดใจของเวลาทำงาน!

คำตอบ:


20

มีคำอธิบายที่ดีโดย Craig Gidney ที่นี่ (เขายังมีเนื้อหาที่ยอดเยี่ยมอื่น ๆ รวมถึงตัวจำลองวงจรในบล็อกของเขา )

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

ในการทำเช่นนี้เราแสดงอินพุตเป็นสตริงบิทและเข้ารหัสสิ่งเหล่านี้โดยใช้|0⟩และ|1⟩สถานะของสตริงของ qubits ดังนั้นสตริงบิต0011จะถูกเข้ารหัสในสี่สถานะ qubit |0011⟩ยกตัวอย่างเช่น

นอกจากนี้เรายังต้องสามารถใช้งานฟังก์ชั่นโดยใช้ประตูควอนตัม โดยเฉพาะเราจำเป็นต้องค้นหาลำดับของประตูที่จะใช้งานยูรวมเช่นนั้น

ยู|a⟩=-|a⟩,ยู|ข⟩=|ข⟩

ที่คือสตริงบิตที่ฟังก์ชั่นจะกลับมาและขใด ๆ ซึ่งมันก็จะกลับมาaTrueขFalse

หากเราเริ่มต้นด้วยการซ้อนทับของสตริงบิตที่เป็นไปได้ทั้งหมดซึ่งค่อนข้างง่ายที่จะทำโดยเพียงแค่ Hadamarding ทุกอย่างอินพุตทั้งหมดเริ่มต้นด้วยแอมพลิจูดเดียวกัน12n (โดยที่nคือความยาวของสตริงบิตที่เรากำลังค้นหาดังนั้นจำนวน qubits ที่เราใช้) แต่ถ้าเราใช้ oracleยูแอมพลิจูดของสถานะที่เรากำลังมองหาจะเปลี่ยนเป็น-12n n

นี่ไม่ใช่ความแตกต่างที่สังเกตได้ง่ายดังนั้นเราต้องขยายมัน การทำเช่นนี้เราจะใช้โกรเวอร์แพร่ Operator , DDผลกระทบของโอเปอเรเตอร์นี้คือการดูว่าแต่ละแอมพลิจูดแตกต่างจากแอมพลิจูดเฉลี่ยแล้วกลับเปลี่ยนความแตกต่างนี้ ดังนั้นถ้าแอมพลิจูดบางตัวมีจำนวนมากกว่าแอมพลิจูดเฉลี่ยมันจะกลายเป็นจำนวนเดียวกันนั้นน้อยกว่าค่าเฉลี่ยและในทางกลับกัน

โดยเฉพาะอย่างยิ่งถ้าคุณมีการซ้อนทับของสตริงบิตขJตัวดำเนินการแพร่จะมีผลกระทบ

D:ΣJαJ|ขJ⟩↦ΣJ(2μ-αJ)|ขJ⟩

โดยที่μ=ΣJαJคือแอมพลิจูดเฉลี่ย ดังนั้นใด ๆ กว้างμ+δได้รับกลายเป็นμ-δ δ เพื่อดูว่าทำไมมันมีผลกระทบนี้และวิธีการที่จะใช้มันให้ดูเอกสารประกอบการบรรยายเหล่านี้

แอมพลิจูดส่วนใหญ่จะเล็กกว่าค่าเฉลี่ยเล็กน้อยเล็กน้อย (เนื่องจากเอฟเฟกต์ของ single -12n ) ดังนั้นพวกเขาจะน้อยกว่าค่าเฉลี่ยเล็กน้อยผ่านการดำเนินการนี้ ไม่ใช่การเปลี่ยนแปลงครั้งใหญ่

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

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

ดูคำตอบของคำถามอื่น ๆ สำหรับรายละเอียดเกี่ยวกับวิธีการที่ฟังก์ชั่นและผู้ประกอบการแพร่กระจายจะดำเนินการ


4

ฉันพบว่าวิธีการแบบกราฟิกค่อนข้างดีสำหรับการให้ข้อมูลเชิงลึกโดยไม่ต้องใช้เทคนิคเกินไป เราต้องการอินพุตบางส่วน:

  • เราสามารถสร้างรัฐด้วยไม่ใช่ศูนย์ทับซ้อนกับ 'เครื่องหมาย' รัฐ| x ⟩ : ⟨ x | ψ ⟩ ≠ 0|ψ⟩|x⟩⟨x|ψ⟩≠0
  • เราสามารถใช้การดำเนินการยู1=-(ผม-2|ψ⟩⟨ψ|)
  • เราสามารถใช้การดำเนินการ.ยู2=ผม-2|x⟩⟨x|

การดำเนินการครั้งสุดท้ายนี้เป็นสิ่งที่สามารถทำเครื่องหมายรายการที่เราทำเครื่องหมายด้วยเฟส -1 นอกจากนี้เรายังสามารถกำหนดสถานะจะเป็น orthonormal ไป| x ⟩เช่นนั้น{ | x ⟩ , | ψ ⊥ ⟩ }รูปแบบพื้นฐาน orthonormal สำหรับช่วงของ{ | x ⟩ , | ψ ⟩ } ทั้งการดำเนินการที่เราได้กำหนดไว้สงวนพื้นที่นี้: คุณเริ่มต้นด้วยบางสถานะในช่วงของ{ | x ⟩ , | ψ ⊥ ⟩ }|ψ⊥⟩|x⟩{|x⟩,|ψ⊥⟩}{|x⟩,|ψ⟩}{|x⟩,|ψ⊥⟩}และพวกเขากลับสถานะภายในช่วง ยิ่งไปกว่านั้นทั้งสองยังรวมกันดังนั้นความยาวของเวกเตอร์อินพุตจึงถูกสงวนไว้

เวกเตอร์ที่มีความยาวคงที่ภายในพื้นที่สองมิติสามารถมองเห็นเป็นเส้นรอบวงของวงกลม ลองตั้งค่าวงกลมที่มีสองทิศตั้งฉากกับและ| x ⟩ |ψ⊥⟩|x⟩ป้อนคำอธิบายรูปภาพที่นี่

|ψ⟩|x⟩|ψ⊥⟩|ψ⟩|ψ⟩|ψ⊥⟩θป้อนคำอธิบายรูปภาพที่นี่

ยู1|ψ⟩ยู2|ψ⊥⟩ป้อนคำอธิบายรูปภาพที่นี่

ยู2ยู12θ|x⟩ป้อนคำอธิบายรูปภาพที่นี่

|ψ⟩θ|x⟩x

|x⟩|ψ⟩พี«1O(1/พี)พี=บาป⁡θ≈θθRบาป⁡((2R+1)θ)≈1R≈π2θ≈π2พี


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