การค้นหาแบบไม่มีโครงสร้าง
สรุปภาพรวม
เราจะเริ่มด้วยคำอธิบายของปัญหาที่อัลกอริทึม Grover แก้ ตามธรรมเนียม ให้ แทน binary alphabet ตลอดการพูดถึงนี้
สมมติว่า
คือฟังก์ชันจาก binary strings ความยาว ไปยัง bits เราจะสมมติว่าสามารถคำนวณฟังก์ชันนี้ได้อย่างมีประสิทธิภาพ แต่นอกจากนั้นมันเป็นฟังก์ชันที่กำหนดเองได้และเราไม่สามารถพึ่งพาให้มันมีโครงสร้างพิเศษหรือ implementation เฉพาะที่ตรงกับความต้องการของเรา
สิ่งที่อัลกอริทึม Grover ทำคือค้นหา string ที่ เราจะเรียก strings เหล่านี้ว่า solutions ของปัญหาการค้นหา ถ้ามี solutions หลายตัว ตัวใดตัวหนึ่งก็ถือว่าเป็น output ที่ถูกต้อง และถ้าไม่มี solutions เลย คำตอบที่ถูกต้องต้องรายงานว่าไม่มี solutions
งานนี้เรียกว่าปัญหา unstructured search เพราะเราไม่สามารถพึ่งพาให้ มีโครงสร้างใดเป็นพิเศษที่ทำให้ง่ายขึ้น เราไม่ได้ค้นหาในลิสต์ที่เรียงลำดับ หรือใน data structure ที่ออกแบบมาโดยเฉพาะเพื่ออำนวยความสะดวกในการค้นหา เราแค่กำลังมองหาเข็มในกองหญ้าโดยพื้นฐาน
โดยสัญชาตญาณ เราอาจจินตนาการว่ามี Boolean circuit ที่ซับซ้อนมากที่คำนวณ และเราสามารถรัน circuit นี้บน input string ที่เลือกได้ง่ายๆ แต่เพราะ circuit ซับซ้อนเกินไป เราไม่มีทางทำความเข้าใจ circuit ด้วยการตรวจดูมัน (นอกจากความสามารถในการประเมินมันบน input strings ที่เลือก)
วิธีหนึ่งในการทำงานค้นหานี้แบบคลาสสิกคือวน iterate ผ่าน strings ทั้งหมด โดยประเมิน กับแต่ละตัวเพื่อตรวจสอบว่ามันเป็น solution หรือไม่ ต่อจากนี้ให้เขียน
เพื่อความสะดวก มี strings ใน ดังนั้นการ iterate ผ่านทั้งหมดต้องการการประเมิน จำนวน ครั้ง ภายใต้สมมติฐานที่ว่าเราจำกัดอยู่กับการประเมิน บน inputs ที่เลือก นี่คือสิ่งที่ดีที่สุดที่ทำได้ด้วย deterministic algorithm ถ้าต้องการรับประกันความสำเร็จ ด้วย probabilistic algorithm เราอาจหวังจะประหยัดเวลาโดยสุ่มเลือก input strings ให้กับ แต่เราก็ยังต้องการการประเมิน ครั้งถ้าต้องการให้วิธีนี้สำเร็จด้วยความน่าจะเป็นสูง
อัลกอริทึม Grover แก้ปัญหาการค้นหานี้ด้วยความน่าจะเป็นสูงโดยใช้เพียง การประเมิน เพื่อให้ชัดเจน การประเมินฟังก์ชันเหล่านี้ต้องเกิดขึ้น ใน superposition คล้ายกับ query algorithms ที่พูดถึงใน บทเรียน Quantum query algorithms รวมถึงอัลกอริทึม Deutsch, อัลกอริทึม Deutsch-Jozsa, และอัลกอริทึม Simon ต่างจากอัลกอริทึมเหล่านั้น อัลกอริทึม Grover ใช้แนวทาง iterative: มันประเมิน บน superpositions ของ input strings และแทรกการดำเนินการอื่น ๆ ระหว่างการประเมินเหล่านั้น ซึ่งมีผลสร้าง interference patterns ที่นำไปสู่ solution ด้วยความน่าจะเป็นสูง (ถ้ามี) หลังจาก iterations
การระบุปัญหาอย่างเป็นทางการ
เราจะทำให้ปัญหาที่อัลกอริทึม Grover แก้เป็นทางการโดยใช้ query model ของการคำนวณ นั่นคือ เราจะสมมติว่าเราสามารถเข้าถึงฟังก์ชัน ผ่าน query gate ที่กำหนดในแบบปกติ:
สำหรับทุก และ นี่คือการกระทำของ บน standard basis states และการกระทำโดยทั่วไปถูกกำหนดโดยความเป็นเชิงเส้น
ดังที่พูดถึงในบทเรียน พื้นฐานอัลกอริทึมควอนตัม ถ้าเรามี Boolean circuit สำหรับการคำนวณ เราสามารถแปลง Boolean circuit นั้นให้เป็น quantum circuit ที่ implement ได้ (โดยใช้ workspace qubits บางส่วนที่เริ่มและสิ้นสุดการคำนวณในสถานะ ) ดังนั้น แม้เราจะใช้ query model เพื่อทำให้ปัญหาที่อัลกอริทึม Grover แก้เป็นทางการ มันไม่ได้จำกัดอยู่กับ model นี้; เราสามารถรันอัลกอริทึม Grover บนฟังก์ชัน ใด ๆ ที่เรามี Boolean circuit
นี่คือการระบุปัญหาอย่างแม่นยำ ซึ่งตั้งชื่อว่า Search เพราะเรากำลังค้นหา solution หมายถึง string ที่ทำให้ ประเมินได้เป็น
สังเกตว่านี่ ไม่ใช่ promise problem — ฟังก์ชัน เป็นฟังก์ชันที่กำหนดเองได้ อย่างไรก็ตาม จะเป็นประโยชน์ที่จะพิจารณา promise variant ของปัญหาต่อไปนี้ ซึ่งรับประกันว่ามี solution อยู่พอดีหนึ่งตัว ปัญหานี้ปรากฏเป็นตัวอย่างของ promise problem ในบทเรียน Quantum query algorithms
ยังสังเกตด้วยว่าปัญหา Or ที่กล่าวถึงในบทเรียนเดียวกันมีความสัมพันธ์อย่างใกล้ชิดกับ Search สำหรับปัญหานั้น เป้าหมายคือแค่ตรวจสอบว่า solution มีอยู่หรือไม่ ต่างจากการหา solution จริง ๆ