ฉันคิดว่าahelwer
คำตอบของเราสัมผัสกับวิธีที่เราคิดเกี่ยวกับความซับซ้อนของอัลกอริทึม อย่างไรก็ตาม - เนื่องจากเราไม่มี "oracles" ในโลกแห่งความเป็นจริงที่เราต้องการสอบถามคุณอาจสงสัยว่าทำไมเราจึงต้องกังวลเกี่ยวกับความซับซ้อนของการสืบค้นหรือแนวคิดของ oracle เลย ฉันจะพยายามให้มุมมองเกี่ยวกับเรื่องนี้และโดยเฉพาะอย่างยิ่งเพื่ออธิบายวิธีที่คุณอาจลองคิดหาวิธีสร้าง "Deutsch – Josza oracle" ในแบบที่คุณไม่รู้สึกราวกับว่าคุณกำลังนอกใจ
(ตามที่Norbert Schuch
ระบุไว้สำหรับปัญหาของ Deutsch ซึ่งเป็นกรณีเบื้องต้นของ Deutsch – Josza มีขอบเขตไม่มากนักสำหรับข้อมูลเชิงลึก แต่ฉันคาดหวังว่าคำถามของคุณเกี่ยวกับ oracles จะใช้งานโดยทั่วไปเช่นกันนั่นคือสิ่งที่ฉันจะพูดถึงที่นี่)
สัญชาตญาณเกี่ยวกับออราเคิล
แนวคิดของ oracle เป็นวิธีที่ทำให้เราง่ายขึ้นว่าเราพูดถึงปัญหาการคำนวณอย่างไร
การประยุกต์ใช้แนวคิดดั้งเดิมของออราเคิลคือการพิจารณาสมมุติฐานว่าเราจะทำอย่างไรถ้าเราสามารถแก้ปัญหาที่ยากลำบากหรือแม้แต่ปัญหาที่เป็นไปไม่ได้โดยไม่ต้องทำตามที่เราทำได้แม้ในหลักการ แต่ในความซับซ้อนในการคำนวณวันนี้ - โดยเฉพาะอย่างยิ่งในการคำนวณควอนตัมเช่น ในกรณีของ Deutsch – Josza, Bernstein – Vazirani และปัญหาอื่น ๆ ของออราเคิล - สถานการณ์แตกต่างกัน: oracle อธิบายฟังก์ชั่นซึ่งเป็นพื้นฐานของปัญหา. ความจริงที่ว่า 'oracle' เป็นวิธีการจัดโครงสร้างวิธีที่เราอธิบายฟังก์ชั่นซึ่งเป็นศูนย์กลางของปัญหา: ไม่ใช่ว่าเราจะต้องไม่พิจารณาว่าฟังก์ชั่นคำนวณอย่างไร แต่ข้อมูลนี้ไม่ได้ให้ไว้เป็นส่วนหนึ่ง ของปัญหาและเราไม่ได้เกี่ยวข้องกับเวลาหรือความซับซ้อนอื่น ๆ ที่เกี่ยวข้องกับฟังก์ชันนั้น
เมื่อเราใช้วิธีการนี้เราสามารถหาคำตอบที่เกี่ยวข้องกับคำถามที่ยากมากในการคำนวณ ตัวอย่างเช่นคุณอาจจะรู้ว่าเราไม่ทราบวิธีการที่จะพิสูจน์ทั้งP ≠ NPหรือP = NPแต่ที่เราสามารถแสดงให้เห็นว่ามีออราเคิลเช่นที่เราสามารถแสดงให้เห็นว่าP ≠ NP สิ่งที่ oracle Aทำที่นี่ไม่ได้ช่วยคอมพิวเตอร์ (แม่นยำยิ่งขึ้นเครื่องทัวริงที่กำหนดขึ้นเองหรือเครื่องทัวริสเตอรอล nondeterministic) เพื่อแก้ปัญหา - มันแสดงถึงปัญหาที่คอมพิวเตอร์ต้องแก้ไข ความจริงที่ว่าเราสามารถแสดงในบางกรณีที่P A ≠ NPไม่ได้หมายความว่าPคือจริงๆแตกต่างจากNP : มันก็หมายความว่าเพียงแค่ใช้ไม่นิยมมันเป็นทรัพยากรที่สำคัญสำหรับรูปแบบของการคำนวณที่จะมี - จะช่วยให้คุณในการแก้ปัญหาบางอย่างได้อย่างมีประสิทธิภาพและมีวิธีใด โดยทั่วไปเพื่อจำลอง nondeterminism อย่างมีประสิทธิภาพบนคอมพิวเตอร์ที่กำหนดขึ้น ดังนั้นหากคุณต้องการที่จะแก้ปัญหาที่เกี่ยวข้องกับสิ่งคำนวณคุณอย่างจะต้องมีข้อมูลบางอย่างเกี่ยวกับโครงสร้างของฟังก์ชั่นใด ๆ ที่สามารถคำนวณได้อย่างมีประสิทธิภาพ
นี่คือหนึ่งในสิ่งสำคัญที่ oracles เกี่ยวข้อง: พวกเขาอนุญาตให้คุณพูดถึงวิธีการที่แบบจำลองการคำนวณสามารถหรือไม่สามารถแก้ปัญหาเมื่อคุณได้รับข้อมูลที่ จำกัด เกี่ยวกับปัญหา
การใช้อัลกอริธึม oracle เพื่อแก้ปัญหาที่ไม่ใช่ออราเคิล
อัลกอริทึมของ Deutsch – Josza หรืออัลกอริทึมของ Bernstein – Vazirani นั้นอยู่ในหลักการที่ไม่ใช่อัลกอริธึมที่เราทำได้เพื่อผลประโยชน์ของพวกเขาเอง (ไม่จริง ๆ - ดูหัวข้อถัดไป) พวกเขายืนหยัดในวิธีที่คุณสามารถแก้ปัญหาได้ พวกเขาแก้ปัญหาอะไร พวกมันอนุญาตให้คุณค้นพบคุณสมบัติบางอย่างของฟังก์ชั่นที่คุณสนใจไม่ว่าจะเป็นค่าคงที่ / สมดุลหรือเวกเตอร์ใดที่เกี่ยวข้องกับฟังก์ชันเชิงเส้นที่มีค่าสเกลาร์ในเวกเตอร์
คุณทำฟังก์ชั่นอะไรบ้าง? - คุณดำเนินการกับฟังก์ชั่นที่คุณสนใจในคำตอบ
คำอธิบายของสิ่งเหล่านี้เป็นอัลกอริทึมที่ใช้ oracle อยู่ด้านข้างจุด โดยทั่วไปแล้วปัญหาเกี่ยวกับ oracle จะช่วยให้คุณรู้ว่าด้วยคอมพิวเตอร์ควอนตัมในอุดมคติคุณสามารถแก้ปัญหาได้แม้ว่าคุณจะรู้น้อยมากเกี่ยวกับฟังก์ชั่นโดยที่คุณสามารถประเมินฟังก์ชั่นได้อย่างมีประสิทธิภาพในทางปฏิบัติ ที่จริงการประเมินเช่นฟังก์ชั่นของหลักสูตรที่คุณจะต้องรายละเอียดของวิธีการที่จะทำเช่นนั้นบางส่วนและเพื่อให้คุณมีมากขึ้นข้อมูลกว่าในการตั้งค่าพยากรณ์; แต่นั่นไม่ได้ป้องกันคุณจากการใช้อัลกอริทึมเดียวกัน
จะเกิดอะไรขึ้นเมื่อคุณมีมากขึ้นข้อมูลกว่าในการตั้งค่าพยากรณ์ที่เป็นที่อยู่ ๆ ก็มีอื่น ๆวิธีที่คุณอาจจะสามารถแก้ปัญหาได้ โดยเฉพาะมันอาจจะเป็นไปได้ในการแก้ปัญหาได้อย่างมีประสิทธิภาพคลาสสิก (นี่คือการสังเกตแบบเดียวกับP A ≠ NP A : มันพิสูจน์ได้ว่ามีปัญหาที่อยู่ในNPซึ่งอัลกอริธึมที่กำหนดค่าอย่างมีประสิทธิภาพอย่างน้อยที่สุดก็ต้องการข้อมูลโครงสร้างที่แท้จริงเพื่อให้สามารถแก้ไขได้ - ดังนั้นเมื่อคุณให้คำอธิบาย ของฟังก์ชันที่คำนวณได้อย่างมีประสิทธิภาพมากกว่า 'oracle' เป็นไปได้ว่าปัญหาจะเกิดขึ้นP. ) มันหมายความว่าอัลกอริทึมควอนตัมอาจไม่ได้เปรียบแบบเดียวกันกับอัลกอริทึมแบบดั้งเดิมในการแก้ปัญหาเฉพาะที่คุณนำเสนอ - และในความเป็นจริงมันอาจเป็นได้ว่าแนวทางแบบคลาสสิกนั้นดีกว่า (โดยเฉพาะกับอุปกรณ์
ในท้ายที่สุดเพียงเพราะคุณมีอัลกอริทึมควอนตัมในการแก้ปัญหาไม่ได้หมายความว่ามันเป็นวิธีที่ดีที่สุดในการแก้ปัญหา นี่เป็นความจริงของอัลกอริทึมของ Deutsch – Josza: แม้ในการตั้งค่า oracle การใช้การสุ่มนั้นทำได้เกือบดีและดีกว่ามากเนื่องจากเรายังไม่มีคอมพิวเตอร์ควอนตัมขนาดใหญ่ที่เชื่อถือได้! แต่แล้วอีกครั้ง ...
"การนำไปใช้" oracle
วัตถุประสงค์ของการใช้อัลกอริทึม Deutsch – Josza นั้นเหมือนกับการใช้ " Hello, World! " - ไม่ใช่เพื่อแก้ปัญหาที่ยังไม่ได้แก้ไข แต่เพื่อฝึกใช้เครื่องมือที่คุณคาดว่าจะเป็นประโยชน์สำหรับการทำสิ่งอื่น ๆ
ในการฝึกการเขียนโค้ดคุณควรรู้สึกผ่อนคลายและสบายใจกับความคิดในการใช้ oracle และด้วยความคิดของคอมพิวเตอร์ในการประเมิน oracle โดยหลักการแล้วนี่คือจุดที่คุณต้องการทำ แม้ว่าคุณกำลังใช้ตัวจำลองแบบคลาสสิกซึ่งคอมพิวเตอร์แบบคลาสสิคกำลังประเมินผลการวางซ้อนของกิ่งก้านสาขาทั้งหมดและค้นหาคำตอบของปัญหาอย่างชัดเจนเพื่อแกล้งทำเป็นว่ามันเป็นคอมพิวเตอร์ควอนตัมที่ทำในลักษณะวงเวียนเล็กน้อยดังนั้น ไม่ว่าจะเป็น - คุณกำลังฝึกฝนวิธีการใช้เครื่องมือที่อาจมีประโยชน์สำหรับสิ่งอื่น ๆ และวันใดวันหนึ่งจะไม่สามารถทำงานบนคอมพิวเตอร์คลาสสิค
ดังนั้นคุณควรจะดำเนินการพยากรณ์อย่างไร?
(i)ถ้าคุณมีความมุ่งมั่นต่อความคิดที่ว่าคุณเพิ่งได้รับการฝึกฝนคุณไม่จำเป็นต้องแกล้งทำเป็นว่าคุณกำลังทำอะไรมหัศจรรย์ หาวิธีใด ๆ ที่จะใช้ฟังก์ชั่น oracle แม้ว่ามันจะเห็นได้ชัดอย่างชัดแจ้งกับผู้สังเกตการณ์ชั่วคราวว่าผลลัพธ์นั้นคงที่หรือมีความสมดุล คุณเพียงแค่พยายามฝึกฝนการตระหนักถึงอัลกอริทึม - ไม่ต้องกังวลว่าจะมีคนกล่าวหาว่าคุณเป็นนักต้มตุ๋นว่าคุณแกล้งทำเพื่อรักษามะเร็ง แต่กำลังเล่นกับเลโก้จริง ๆ ที่คุณไม่เคยได้รับการทำท่าจะรักษาโรคมะเร็งและคุณกำลังเล่นกับเลโก้โดยทางเลือกโดยเจตนา ยอมรับและทำมัน
ฉ( x ) = g( x , r )Rก.( x , r )xRและในกรณีที่มันไม่ชัดเจนว่าจะแก้ปัญหาแบบคลาสสิกได้อย่างไรไม่สำคัญ
ก.( x , r ) = x ⋅ rx , r ∈ { 0 , 1 }nก.( x , r )ฉ( x )ฉ( x )r ≠ 0
เป็นไปได้ว่าการก่อสร้างด้านบนอาจจะมีการอธิบายรายละเอียด / ทำให้งงงวยเล็กน้อยเพื่อให้ได้สิ่งก่อสร้างที่รับประกันว่าจะประเมินฟังก์ชั่นคงที่หรือฟังก์ชั่นที่สมดุลและที่ซึ่งทั้งสองเกิดขึ้นไม่ชัดเจนหรือยาก ไม่คิดว่าในขณะนี้
โปรดจำไว้ว่านี่เป็นเรื่องยากมากที่จะทำ - แต่ถ้าคุณเห็นวิธีที่จะทำมันอาจคุ้มค่ามาก: Bravyi, Gossett และ Koeningทำสิ่งนี้สำหรับปัญหาของ Bernstein – Vazirani และอนุญาตให้พวกเขาทำ เพื่อแสดงการแยกขนาดเล็ก แต่ไม่มีเงื่อนไขระหว่างควอนตัมและความซับซ้อนแบบคลาสสิกซึ่งเป็นหนึ่งในสิ่งที่น่าสนใจมากกว่าที่จะเกิดขึ้นในความซับซ้อนของควอนตัมในช่วงหลายปีที่ผ่านมา
TL; DR
อย่าเหงื่อเกินความจริงที่ว่าคุณกำลังประเมิน 'oracle'
หากคุณรู้สึกเหนื่อยล้ากับทุกสิ่งเพียงแค่กังวลว่าคำอธิบายที่แท้จริงของฟังก์ชันอาจทำให้สามารถแก้ปัญหาเดียวกันได้อย่างง่ายดายโดยไม่ต้องใช้คอมพิวเตอร์ควอนตัม
หากแรงจูงใจของคุณเพียงเพื่อฝึกหัดการเขียนโปรแกรมควอนตัมอย่ากังวลไปเลย ประหยัดความกังวลของคุณสำหรับปัญหาที่คุ้มค่าเช่นภาวะโลกร้อน ในขณะเดียวกันสนุกกับการเล่นกับ Legos ในขณะที่คุณสร้างอะไรเพิ่มเติม