อัลกอริทึมของ Simon
อัลกอริทึมของ Simon คืออัลกอริทึม query เชิงควอนตัมสำหรับปัญหาที่เรียกว่า ปัญหาของ Simon นี่เป็น promise problem ที่มีรสชาติคล้ายกับปัญหา Deutsch-Jozsa และ Bernstein-Vazirani แต่มีรายละเอียดที่แตกต่างกัน
อัลกอริทึมของ Simon มีความสำคัญเพราะให้ข้อได้เปรียบแบบ exponential ของควอนตัมเหนืออัลกอริทึมคลาสสิก (รวมถึง probabilistic) และเทคนิคที่ใช้เป็นแรงบันดาลใจให้ Peter Shor ค้นพบอัลกอริทึมควอนตัมที่มีประสิทธิภาพสำหรับการแยกตัวประกอบจำนวนเต็ม
ปัญหาของ Simon
ฟังก์ชันอินพุตสำหรับปัญหาของ Simon อยู่ในรูปแบบ
สำหรับจำนวนเต็มบวก และ เราอาจจำกัดความสนใจไว้ที่กรณี เพื่อความเรียบง่าย แต่ไม่ได้ให้ประโยชน์มากในการตั้งสมมติฐานนี้ — อัลกอริทึมของ Simon และการวิเคราะห์ก็เหมือนกันไม่ว่าจะเป็นแบบใด
เราจะอธิบาย promise อย่างละเอียดเพื่อทำความเข้าใจสิ่งที่มันบอกในไม่ช้า แต่ก่อนอื่นขอยืนยันว่ามันกำหนดให้ มีโครงสร้างพิเศษมาก — ดังนั้นฟังก์ชันส่วนใหญ่จะไม่ตอบสนอง promise นี้ นอกจากนี้ยังเหมาะสมที่จะรับรู้ว่าปัญหานี้ไม่ได้มีความสำคัญในทางปฏิบัติ แต่มันเป็นปัญหาที่ถูกสร้างขึ้นอย่างประดิษฐ์บางส่วน ออกแบบมาเพื่อให้คอมพิวเตอร์ควอนตัมทำได้ง่ายและคอมพิวเตอร์คลาสสิกทำได้ยาก
มีสองกรณีหลัก: กรณีแรกคือ เป็นสตริงที่มีแต่ศูนย์ และกรณีที่สองคือ ไม่ใช่สตริงที่มีแต่ศูนย์
-
กรณีที่ 1: ถ้า เป็นสตริงที่มีแต่ศูนย์ เราสามารถลดรูปข้อความ if and only if ใน promise เพื่อให้อ่านว่า ซึ่งเทียบเท่ากับ เป็นฟังก์ชันแบบ one-to-one
-
กรณีที่ 2: ถ้า ไม่ใช่สตริงที่มีแต่ศูนย์ promise ที่ถูกตอบสนองสำหรับสตริงนี้บ่งชี้ว่า เป็น two-to-one หมายความว่าสำหรับทุกสตริงเอาต์พุตที่เป็นไปได้ของ มีสตริงอินพุตสองตัวที่ทำให้ แสดงผลสตริงนั้น นอกจากนี้ สองสตริงอินพุตนี้ต้องอยู่ในรูปแบบ และ สำหรับสตริงบางตัว
สำคัญมากที่ต้องตระหนักว่ามีเพียงสตริง เดียวที่ใช้ได้ถ้า promise ถูกปฏิบัติตาม ดังนั้นจึงมีคำตอบที่ถูกต้องเพียงหนึ่งเดียวสำหรับฟังก์ชันที่ตอบสนอง promise เสมอ
นี่คือตัวอย่างของฟังก์ชันในรูปแบบ ที่ตอบสนอง promise สำหรับสตริง
มีสตริงอินพุต ตัวและสตริงเอาต์พุตที่แตกต่างกัน ตัว แต่ละตัวปรากฏสองครั้ง — ดังนั้นนี่คือฟังก์ชัน two-to-one นอกจากนี้ สำหรับสตริงอินพุตที่แตกต่างกันสองตัวใด ๆ ที่ให้สตริงเอาต์พุตเดิม เราจะเห็นว่า bitwise XOR ของสตริงอินพุตทั้งสองเท่ากับ ซึ่งเทียบเท่ากับการบอกว่าสตริงใดสตริงหนึ่งเท่ากับอีกสตริงที่ XOR กับ
สังเกตว่าสิ่งเดียวที่สำคัญเกี่ยวกับสตริงเอาต์พุตจริง ๆ คือว่าพวกมันเหมือนกันหรือแตกต่างกันสำหรับทางเลือกอินพุตที่แตกต่างกัน ตัวอย่างเช่น ในตัวอย่างข้างต้น มีสี่สตริง และ ที่ปรากฏเป็นเอาต์พุตของ เราสามารถแทนที่สี่สตริงเหล่านี้ด้วยสตริงที่แตกต่างกัน ตราบใดที่พวกมันทั้งหมดแตกต่างกัน และคำตอบที่ถูกต้อง จะไม่เปลี่ยนแปลง
คำอธิบายอัลกอริทึม
นี่คือแผนภาพวงจรควอนตัมที่แสดงอัลกอริทึมของ Simon
ชัดเจนว่ามี Qubit อยู่ด้านบนที่ถูกกระทำโดย Hadamard Gate และ Qubit อยู่ด้านล่างที่เข้าสู่ query gate โดยตรง มันดูคล้ายมากกับอัลกอริทึมที่เราพูดถึงแล้วในบทเรียน แต่คราวนี้ไม่มี phase kickback; Qubit ล่างทั้งหมดเข้าสู่ query gate ในสถานะ
การแก้ปัญหาของ Simon โดยใช้วงจรนี้จะต้องใช้หลายรอบอิสระตามด้วยขั้นตอนการประมวลผลหลังคลาสสิก ซึ่งจะอธิบายในภายหลังหลังจากวิเคราะห์พฤติกรรมของวงจรแล้ว
การวิเคราะห์
การวิเคราะห์อัลกอริทึมของ Simon เริ่มต้นในแนวทางที่คล้ายกับอัลกอริทึม Deutsch-Jozsa หลังจาก Hadamard Gate ชั้นแรกถูกดำเนินการบน Qubit บน สถานะกลายเป็น
เมื่อดำเนินการ เอาต์พุตของฟังก์ชัน จะถูก XOR เข้ากับสถานะที่มีแต่ศูนย์ของ Qubit ล่าง ดังนั้นสถานะกลายเป็น
เมื่อดำเนินการ Hadamard Gate ชั้นที่สอง เราได้สถานะต่อไปนี้โดยใช้สูตรเดิมสำหรับการกระทำของ Hadamard Gate ชั้นหนึ่ง
ณ จุดนี้ การวิเคราะห์แยกออกจากการวิเคราะห์ของอัลกอริทึมก่อนหน้าในบทเรียนนี้
เราสนใจความน่าจะเป็นที่การวัดจะได้ผลเป็นแต่ละสตริง ที่เป็นไปได้ ผ่านกฎสำหรับการวิเคราะห์การวัดที่อธิบายในบทเรียน ระบบหลายระบบ ของคอร์ส พื้นฐานของข้อมูลเชิงควอนตัม เราพบว่าความน่าจะเป็น ในการได้สตริง เท่ากับ
เพื่อให้เข้าใจความน่าจะเป็นเหล่านี้ได้ดีขึ้น เราจำเป็นต้องมีสัญลักษณ์และคำศัพท์เพิ่มเติมเล็กน้อย ก่อนอื่น range ของฟังก์ชัน คือเซตที่มีสตริงเอาต์พุตทั้งหมด
ประการที่สอง สำหรับแต่ละสตริง เราสามารถแสดงเซตของสตริงอินพุตทั้งหมดที่ทำให้ฟังก์ชันประเมินค่าเป็นสตริงเอาต์พุต นี้ว่า
เซต เรียกว่า preimage ของ ภายใต้ เราสามารถนิยาม preimage ภายใต้ ของเซตใด ๆ แทนที่ ในลักษณะเดียวกัน — มันคือเซตของทุกสมาชิกที่ แมปไปยังเซตนั้น (สัญลักษณ์นี้ไม่ควรสับสนกับ ฟังก์ชันผกผัน ของ ซึ่งอาจไม่มีอยู่ ข้อเท็จจริงที่ว่าอาร์กิวเมนต์ทางด้านซ้ายคือเซต แทนที่จะเป็นสมาชิก คือสัญญาณที่ช่วยให้เราหลีกเลี่ยงความสับสนนี้)
โดยใช้สัญลักษณ์นี้ เราสามารถแยกผลรวมในนิพจน์ของความน่าจะเป็นข้างต้น เพื่อได้
ทุกสตริง ถูกแทนด้วยผลรวมสองชั้นอย่างละหนึ่งครั้งอย่างแม่นยำ — โดยพื้นฐานแล้วเราแค่วางสตริงเหล่านี้ลงในถังแยกกันขึ้นอยู่กับว่าสตริงเอาต์พุต ใดที่พวกมันสร้างเมื่อเราประเมินฟังก์ชัน แล้วรวมแยกกันในแต่ละถัง
เราสามารถประเมิน Euclidean norm กำลังสองเพื่อได้
เพื่อลดรูปความน่าจะเป็นเหล่านี้ต่อไป มาดูค่า
สำหรับการเลือก ใด ๆ
ถ้า ดังนั้น เป็นฟังก์ชัน one-to-one และมีเพียงสมาชิกเดียว สำหรับทุก ค่าของนิพจน์ คือ ในกรณีนี้
ในทางกลับกัน ถ้า ดังนั้นมีสตริงสองตัวในเซต อย่างแน่นอน พูดอย่างเจาะจง ถ้าเราเลือก เป็นหนึ่งในสองสตริงนี้ ดังนั้นอีกสตริงต้องเป็น ตาม promise ในปัญหาของ Simon โดยใช้การสังเกตนี้ เราสามารถลดรูป ได้ดังนี้
ดังนั้น ปรากฏว่าค่า ไม่ขึ้นอยู่กับการเลือก เฉพาะในทั้งสองกรณี
ตอนนี้เราสามารถเสร็จสิ้นการวิเคราะห์โดยพิจารณาสองกรณีเดิมแยกกัน
-
กรณีที่ 1: ในกรณีนี้ฟังก์ชัน เป็น one-to-one ดังนั้นมีสตริง จำนวน ตัว และเราได้
กล่าวอีกนัยหนึ่ง การวัดให้สตริง ที่เลือกแบบ uniform random
-
กรณีที่ 2: ในกรณีนี้ เป็น two-to-one ดังนั้นมีสมาชิก ตัวใน โดยใช้สูตรข้างต้น เราสรุปได้ว่าความน่าจะเป็นในการวัดแต่ละ คือ
กล่าวอีกนัยหนึ่ง เราได้สตริงที่เลือกแบบ uniform random จากเซต ซึ่ง มีสตริง ตัว (เพราะ ครึ่งหนึ่งของสตริงไบนารีความยาว มี binary dot product เป็น กับ และอีกครึ่งหนึ่งมี binary dot product เป็น กับ ดังที่เราสังเกตแล้วในการวิเคราะห์ อัลกอริทึม Deutsch-Jozsa สำหรับปัญหา Bernstein-Vazirani)
การประมวลผลหลังคลาสสิก
ตอนนี้เรารู้แล้วว่าความน่าจะเป็นเป็นอย่างไรสำหรับผลการวัดที่เป็นไปได้เมื่อเรารันวงจรควอนตัมสำหรับอัลกอริทึมของ Simon ข้อมูลนี้เพียงพอที่จะหาค่า หรือไม่?
คำตอบคือใช่ ตราบใดที่เรายินดีที่จะทำซ้ำกระบวนการหลายครั้งและยอมรับว่ามันอาจล้มเหลวด้วยความน่าจะเป็นบางอย่าง ซึ่งเราสามารถทำให้น้อยมากได้โดยการรันวงจรให้มากพอ ความคิดสำคัญคือแต่ละครั้งที่รันวงจรให้หลักฐานทางสถิติเกี่ยวกับ แก่เรา และเราสามารถใช้หลักฐานนั้นเพื่อหาค่า ด้วยความน่าจะเป็นสูงมากถ้าเรารันวงจรให้มากพอ
สมมติว่าเรารันวงจรอิสระ ครั้ง สำหรับ ไม่มีอะไรพิเศษเกี่ยวกับจำนวนการวนซ้ำนี้ — เราอาจเลือก ให้มากขึ้น (หรือน้อยลง) ขึ้นอยู่กับความน่าจะเป็นของความล้มเหลวที่เรายอมรับได้ ดังที่เราจะเห็น การเลือก จะทำให้มั่นใจได้ว่าเรามีโอกาสมากกว่า % ในการกู้คืน
โดยการรันวงจร ครั้ง เราได้สตริง ชัดเจนว่า superscript ที่นี่เป็นส่วนหนึ่งของชื่อของสตริงเหล่านี้ ไม่ใช่เลขชี้กำลังหรือดัชนีของบิต ดังนั้นเรามี
ตอนนี้เราสร้างเมทริกซ์ ที่มี แถวและ คอลัมน์โดยนำบิตของสตริงเหล่านี้เป็นสมาชิกค่าไบนารี
ตอนนี้เราไม่รู้ว่า คืออะไร — เป้าหมายของเราคือการหาสตริงนี้ แต่จินตนาการสักครู่ว่าเรารู้สตริง และเราสร้างเวกเตอร์คอลัมน์ จากบิตของสตริง ดังนี้
ถ้าเราทำการคูณเวกเตอร์เมทริกซ์ แบบโมดูลัส — หมายความว่าเราทำการคูณตามปกติแล้วนำเศษของสมาชิกของผลลัพธ์หลังหารด้วย — เราจะได้เวกเตอร์ที่มีแต่ศูนย์
กล่าวคือ เมื่อถือเป็นเวกเตอร์คอลัมน์ ตามที่อธิบายไว้ สตริง จะเป็นสมาชิกของ null space ของเมทริกซ์ เสมอ ตราบใดที่เราทำเลขคณิตแบบโมดูลัส สิ่งนี้เป็นจริงทั้งในกรณีที่ และ พูดอย่างแม่นยำมากขึ้น เวกเตอร์ที่มีแต่ศูนย์อยู่ใน null space ของ เสมอ และมีเวกเตอร์ที่มีสมาชิกเป็นบิตของ ร่วมด้วยในกรณีที่
คำถามที่เหลืออยู่คือจะมีเวกเตอร์อื่น ๆ ใน null space ของ นอกจากเวกเตอร์ที่สอดคล้องกับ และ หรือไม่ คำตอบคือสิ่งนี้มีโอกาสน้อยลงเรื่อย ๆ เมื่อ เพิ่มขึ้น — และถ้าเราเลือก null space ของ จะไม่มีเวกเตอร์อื่นนอกจากที่สอดคล้องกับ และ ด้วยโอกาสมากกว่า % โดยทั่วไป ถ้าเราแทน ด้วย สำหรับการเลือกจำนวนเต็มบวก ใด ๆ ความน่าจะเป็นที่เวกเตอร์ที่สอดคล้องกับ และ อยู่คนเดียวใน null space ของ มีค่าอย่างน้อย
โดยใช้พีชคณิตเชิงเส้น เป็นไปได้ที่จะคำนวณคำอธิบายของ null space ของ แบบโมดูลัส ได้อย่างมีประสิทธิภาพ โดยเฉพาะ สามารถทำได้โดยใช้ Gaussian elimination ซึ่งทำงานในลักษณะเดียวกันเมื่อทำเลขคณิตแบบโมดูลัส เหมือนกับเมื่อใช้จำนวนจริงหรือจำนวนเชิงซ้อน ตราบใดที่เวกเตอร์ที่สอดคล้องกับ และ อยู่คนเดียวใน null space ของ ซึ่งเกิดขึ้นด้วยความน่าจะเป็นสูง เราสามารถหาค่า จากผลของการคำนวณนี้
ความยากของคลาสสิก
อัลกอริทึม query คลาสสิก ต้องการ query กี่ครั้งเพื่อแก้ปัญหาของ Simon? คำตอบคือ: มาก โดยทั่วไป
มีข้อความที่แม่นยำที่แตกต่างกันที่สามารถกล่าวเกี่ยวกับความยากของคลาสสิกของปัญหานี้ และนี่คือหนึ่งในนั้น ถ้าเรามีอัลกอริทึม query แบบ probabilistic ใด ๆ และอัลกอริทึมนั้นทำ query น้อยกว่า ครั้ง ซึ่งเป็นจำนวน query ที่เป็น exponential ใน ดังนั้นอัลกอริทึมนั้นจะล้มเหลวในการแก้ปัญหาของ Simon ด้วยความน่าจะเป็นอย่างน้อย
บางครั้ง การพิสูจน์ผลลัพธ์ด้านความเป็นไปไม่ได้เช่นนี้อาจเป็นเรื่องที่ท้าทายมาก แต่อันนี้ไม่ยากเกินไปที่จะพิสูจน์ผ่านการวิเคราะห์ความน่าจะเป็นเบื้องต้น อย่างไรก็ตาม ที่นี่เราจะตรวจสอบแค่สัญชาตญาณพื้นฐานเท่านั้น
เรากำลังพยายามหาสตริงที่ซ่อนอยู่ แต่ตราบใดที่เราไม่ทำ query ฟังก์ชันบนสองสตริงที่มีค่าเอาต์พุตเดิม เราจะได้ข้อมูลเกี่ยวกับ น้อยมาก พูดอย่างสัญชาตญาณ สิ่งที่เราจะเรียนรู้คือสตริงที่ซ่อนอยู่ ไม่ใช่ exclusive-OR ของสองสตริงที่แตกต่างกันที่เราทำ query และถ้าเราทำ query น้อยกว่า สตริง ยังคงมีทางเลือกมากมายสำหรับ ที่เรายังไม่ได้ตัดออก เพราะไม่มีคู่สตริงเพียงพอสำหรับทำสิ่งนี้ นี่ไม่ใช่การพิสูจน์อย่างเป็นทางการ มันแค่เป็นความคิดพื้นฐาน
ดังนั้น โดยสรุป อัลกอริทึมของ Simon ให้ข้อได้เปรียบที่โดดเด่นของควอนตัมเหนืออัลกอริทึมคลาสสิกภายในโมเดล query โดยเฉพาะอย่างยิ่ง อัลกอริทึมของ Simon แก้ปัญหาของ Simon ด้วยจำนวน query ที่เป็น linear ในจำนวนบิตอินพุต ของฟังก์ชันเรา ในขณะที่อัลกอริทึมคลาสสิกใด ๆ แม้แต่ probabilistic ต้องทำ query จำนวนที่เป็น exponential ใน เพื่อแก้ปัญหาของ Simon ด้วยความน่าจะเป็นของความสำเร็จที่เหมาะสม