ฉันจะใช้ oracle ควอนตัมในอัลกอริทึมของ Deutsch ได้อย่างไร


13

ฉันพยายามจำลองอัลกอริธึมของ Deutsch (กรณีเบื้องต้นของอัลกอริธึม Deutsch-Josza) และฉันไม่แน่ใจว่าฉันจะดำเนินการตามควอนตัมพยากรณ์ที่จำเป็นสำหรับอัลกอริธึมในการทำงานได้อย่างไรโดยไม่ต้องเอาชนะวัตถุประสงค์ของอัลกอริธึม สิ่งที่ฟังก์ชั่นอินพุตคือโดยการประเมินฟังก์ชั่น


นี้อาจจะเป็นประโยชน์: quantumcomputing.stackexchange.com/a/2262/2645
meowzz

ทำไมไม่เลือกแบบสุ่มทุกครั้งที่คุณทำการทดสอบ ด้วยวิธีนี้คุณไม่รู้
DaftWullie

@DaftWullie คุณหมายถึงการเลือกฟังก์ชั่นแบบสุ่มในแต่ละการจำลองหรือไม่? ปัญหายังคงเกิดขึ้นว่าคอมพิวเตอร์จะต้องรู้ว่าผลลัพธ์ของฟังก์ชั่นอินพุตเพื่อสร้างฟังก์ชั่นที่ต้องการผ่านทางควอนตัมออราเคิล
Jack Ceroni

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

@DaftWullie หากคุณคำนวณคุณสมบัติของฟังก์ชั่นแบบสุ่มทำไมไม่เพียงสร้างผลการสุ่มทันที?
Norbert Schuch

คำตอบ:


9

มีสองคำถามที่นี่ คนแรกถามว่าคุณจะใช้งานสิ่งนี้ได้อย่างไรในรหัสและข้อที่สองถามว่าอะไรคือจุดที่คุณรู้ว่ามี oracle ตัวไหนกำลังผ่าน

การดำเนินงาน

อาจเป็นวิธีที่ดีที่สุดในการสร้างฟังก์ชันIsBlackBoxConstantที่ใช้ oracle เป็นอินพุตจากนั้นรันโปรแกรม Deutsch Oracle เพื่อตรวจสอบว่ามีค่าคงที่หรือไม่ คุณสามารถเลือกพยากรณ์โดยการสุ่มถ้าคุณต้องการ นี่มันนำมาใช้ใน Q #:

operation IsBlackBoxConstant(blackBox: ((Qubit, Qubit) => ())) : (Bool)
{
    body
    {
        mutable inputResult = Zero;
        mutable outputResult = Zero;

        // Allocate two qbits
        using (qbits = Qubit[2])
        {
            // Label qbits as inputs and outputs
            let input = qbits[0];
            let output = qbits[1];

            // Pre-processing
            X(input);
            X(output);
            H(input);
            H(output);

            // Send qbits into black box
            blackBox(input, output);

            // Post-processing
            H(input);
            H(output);

            // Measure both qbits
            set inputResult = M(input);
            set outputResult = M(output);

            // Clear qbits before release
            ResetAll(qbits);
        }

        // If input qbit is 1, then black box is constant; if 0, is variable
        return One == inputResult;
    }
}

ประเด็นคืออะไร?

ความซับซ้อนของแบบสอบถาม

ความซับซ้อนในการคำนวณเป็นฟิลด์ที่เกี่ยวข้องกับการจำแนกอัลกอริทึมตามปริมาณของทรัพยากรที่ใช้เป็นฟังก์ชันของขนาดอินพุต ทรัพยากรเหล่านี้รวมถึงเวลา (วัดตามขั้นตอน / คำแนะนำ), หน่วยความจำและยังเป็นสิ่งที่เรียกว่าความซับซ้อนแบบสอบถาม ความซับซ้อนของเคียวรีเกี่ยวข้องกับจำนวนครั้งที่อัลกอริทึมต้องค้นหาฟังก์ชันออราเคิลกล่องดำ

ปัญหาออราเคิลของ Deutsch นั้นน่าสนใจสำหรับนักทฤษฎีที่ซับซ้อนเนื่องจากอัลกอริธึมเชิงควอนตัมมีเพียงการค้นหากล่องดำครั้งเดียว แต่อัลกอริทึมแบบดั้งเดิมต้องค้นหามันสองครั้ง กับปัญหาทั่วไป Deutsch-Josza โดยที่n oracle บิตมีฟังก์ชั่นซึ่งเป็นทั้งคงที่หรือสมดุลอัลกอริทึมควอนตัมอีกครั้งเพียง แต่มีการสอบถามครั้งเดียว แต่ (กำหนด) ขั้นตอนวิธีคลาสสิกต้องใช้2n-1คำสั่ง

ควรสังเกตว่าอัลกอริธึมแบบดั้งเดิมน่าจะมีอยู่ซึ่งแก้ปัญหา Deutsch-Josza ในแบบสอบถามน้อยกว่า2n-1โดยสุ่มตัวอย่าง oracle inputs: ถ้า oracle ยังคงเอาท์พุทค่าเดียวกันไม่ว่าอินพุตจะเป็นเท่าใดoracle นั้นเติบโตอย่างรวดเร็วมาก ซึ่งหมายความว่า Deutsch-Josza ไม่ใช่ผู้สมัครที่ดีสำหรับปัญหาควอนตัมมากที่สุด / ความได้เปรียบซึ่งนำไปสู่ ​​...

แอพพลิเคชั่นในโลกแห่งความเป็นจริง

หากคุณไม่ได้เป็นนักทฤษฎีความซับซ้อนคุณอาจไม่สนใจเรื่องความซับซ้อนในการสืบค้นมากนักและต้องการทราบว่าทำไมปัญหาออราเคิลของ Deutsch จึงมีความสำคัญในโลก "ไม่มีกฎ" ที่คุณได้รับอนุญาตให้มองเข้าไปในกล่องดำ การพยายามวิเคราะห์ปัญหา oracle เป็นปัญหาที่ไม่ใช่ oracle นั้นเต็มไปด้วยความยากลำบากและฉันไม่เชื่อว่ามีใครแก้ไขคำถามของอัลกอริธึมคลาสสิคที่ดีที่สุดสำหรับปัญหา oracle ของ Deutsch เมื่อคุณได้รับอนุญาตให้วิเคราะห์วงจร oracle คุณอาจคิดว่า - มีอะไรที่จะวิเคราะห์? มีเพียงสี่วงจรที่เป็นไปได้! ในความเป็นจริงมันซับซ้อนกว่ามาก

หากเราพิจารณาการเป็นตัวแทนของ Deutsch Oracle แบบบิตเดียวที่ง่ายที่สุดโครงสร้างของประตูจะเป็นดังนี้:

ตัวตน: 1,0

การปฏิเสธ: X01,0

ค่าคงที่ -0: ผม4

ค่าคงที่ -1: X0

อย่างไรก็ตามสิ่งเหล่านี้ไม่ได้เป็นวิธีเดียวที่จะใช้ออราเคิล สิ่งเหล่านี้สามารถเขียนใหม่ได้โดยใช้ประตูตรรกะนับร้อยพันประตูแม้แต่ล้าน! สิ่งที่สำคัญคือผลสะสมของประตูลอจิกเหล่านี้เทียบเท่ากับสิ่งก่อสร้างที่เรียบง่ายข้างต้น พิจารณาการใช้ทางเลือกต่อไปนี้ของ Constant-1:

H0Z0H0

ปรากฎว่าสำหรับการป้อนข้อมูลใด ๆ ที่คุณเคยให้:

H0Z0H0|ψ=X0|ψ

นี่เป็นเพราะการเชื่อมโยงของการคูณเมทริกซ์ ถ้าคุณเขียนเมทริกซ์จริงสำหรับH0Z0H0แล้วคูณพวกมันเข้าด้วยกันคุณจะได้X0 :

H0Z0H0=[121212-12][100-1][121212-12]=[0110]=X0

ดังนั้นเราจึงมี:

(H0(Z0(H0|ψ)))=(((H0Z0)H0)|ψ)=X0|ψ

ดังนั้นคุณสามารถผ่านในวงจรH0Z0H0 (หรือบางสิ่งที่ซับซ้อนยิ่งกว่า) ลงในอัลกอริทึม Deutsch Oracle ของควอนตัมแทนX0และอัลกอริทึมยังคงใช้ได้! มันจะบอกคุณว่า oracle เป็นค่าคงที่หรือแปรผันไม่ว่าภายในจะซับซ้อนแค่ไหน อัลกอริทึมที่ "กลโกง" และดูภายในกล่องดำไม่มีเวลาค่อนข้างง่ายอย่างที่คุณคิด พิจารณากรณีของฉันคนแปลกหน้าบนอินเทอร์เน็ตให้วงจรที่ซับซ้อนมากที่รับประกันว่าจะคงที่หรือแปรผันแล้วถามคุณว่ามันคืออะไร ไม่ใช่สิ่งที่แก้ไขได้ง่าย ๆ เพียงแค่มองมัน!

สำคัญสำหรับเหตุผลทางประวัติศาสตร์และการสอน

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


ฉันอยู่กับคุณจนกระทั่งเรื่อง Gotteman-Knill ทำไมคุณ จำกัด วงจรที่ซับซ้อนของคุณไปที่ (i) one-qubit gates และ (ii) gates stabilizer?
Norbert Schuch

ดังที่ฉันเข้าใจแล้วมีอัลกอริธึมที่มีประสิทธิภาพสำหรับการพิจารณาว่าวงจรควอนตัมตามอำเภอใจใช้หนึ่งในวงจรคลาสสิกธรรมดา ๆ วงจรสุ่มที่กำลังศึกษาเพื่อความได้เปรียบเชิงควอนตัมต้องการพฤติกรรมที่ซับซ้อนมากขึ้น
ahelwer

ฉันไม่คิดว่านี่เป็นเรื่องจริง ถ้าฉันไม่ผิดถามว่าสองวงจรทำสิ่งเดียวกันคือ QMA- สมบูรณ์ เป็นเพียงข้อ จำกัด ของคุณสำหรับประตู Clifford ที่อนุญาตให้จำลองผ่าน Gottesman-Knill
Norbert Schuch

คุณถูกต้องฉันจะวิจัยสิ่งที่ลดวงจรอีกแล้วอัปเดตโพสต์ของฉันเพื่อชี้แจงบทบาทของ Gottesman-Knill
ahelwer

ฉันอัพเดตคำตอบของฉันหลังจากถามRobin Kothariผ่านทางอีเมล
ahelwer

3

ไม่มีทางที่จะสร้าง oracle ในลักษณะที่จะไม่เอาชนะจุดของอัลกอริธึมของ Deutsch นั่นคือสาเหตุที่มันเป็นอัลกอริธึมที่ใช้ oracle

x(x)(0)=(1)

(x)1xยังไม่มีข้อความ(x)Y(x+Y)=(x)(x)

ดังนั้นประเด็นก็คืออัลกอริธึมที่ใช้ oracle พิสูจน์ได้ว่าคุณสามารถเร่งความเร็วได้หากคุณมีปัญหากับโครงสร้างนั้น (เช่นที่คุณต้องการเรียนรู้คุณสมบัติเฉพาะของฟังก์ชัน) แต่ไม่ได้บอกคุณว่า ปัญหาดังกล่าวมีอยู่

ดังนั้นหากคุณต้องการติดตั้ง Deutsch วิธีใด ๆ ในการทำ oracle ก็ใช้ได้ - เป็นอัลกอริธึม "พิสูจน์หลักการ" และไม่ให้ความเร็วจริงกับปัญหาจริง (อย่างน้อยเราก็ไม่รู้)


2

คุณมีสองตัวอย่างบนหน้า IBM Q ประสบการณ์เกี่ยวกับขั้นตอนวิธี พวกเขาแสดงตัวอย่างของฟังก์ชั่น สิ่งนี้สามารถสร้างแรงบันดาลใจให้คุณสำหรับแบบจำลองของคุณฉันหวังว่า


2

ฉันไม่ได้มีตัวอย่างสำหรับอัลกอริทึมของ Deutsch ที่มีประโยชน์ แต่ที่นี่และนี่คือแบบฝึกหัดสองข้อที่แนะนำคุณเกี่ยวกับการใช้อัลกอริทึม Deutsch-Jozsa และ oracles ที่ใช้ใน Q #

แนวคิดสำหรับอัลกอริธึมทั้งสองนี้เหมือนกัน: คุณต้องจัดเตรียม oracle ให้กับอัลกอริทึมในการดำเนินการที่อื่น วิธีนี้อัลกอริทึมไม่ทราบว่ามีการพยากรณ์ใดและไม่มีวิธี "มอง" ที่ oracle นอกเหนือจากการเรียกมัน บทช่วยสอนเหล่านี้มีสายรัดที่นับจำนวน oracle ที่เรียกว่าดังนั้นถ้าโซลูชันของคุณเรียกมันมากกว่าหนึ่งครั้งมันจะล้มเหลวในการทดสอบ

เป็นที่ยอมรับว่านี่ยังคงมีปัญหาที่อัลกอริทึมของออราเคิลมีอยู่บ่อยครั้ง: มนุษย์สามารถดูการใช้งานการทดสอบและ oracle ที่ผ่านไปแล้วและหาคำตอบ สิ่งนี้สามารถตอบโต้ได้โดยการสุ่มตัวเลือก oracle ตามที่ DaftWullie แนะนำ


1

ฉันคิดว่า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)=ก.(x,R)Rก.(x,R)xRและในกรณีที่มันไม่ชัดเจนว่าจะแก้ปัญหาแบบคลาสสิกได้อย่างไรไม่สำคัญ

  • ก.(x,R)=xRx,R{0,1}nก.(x,R)(x)(x)R0

  • เป็นไปได้ว่าการก่อสร้างด้านบนอาจจะมีการอธิบายรายละเอียด / ทำให้งงงวยเล็กน้อยเพื่อให้ได้สิ่งก่อสร้างที่รับประกันว่าจะประเมินฟังก์ชั่นคงที่หรือฟังก์ชั่นที่สมดุลและที่ซึ่งทั้งสองเกิดขึ้นไม่ชัดเจนหรือยาก ไม่คิดว่าในขณะนี้

โปรดจำไว้ว่านี่เป็นเรื่องยากมากที่จะทำ - แต่ถ้าคุณเห็นวิธีที่จะทำมันอาจคุ้มค่ามาก: Bravyi, Gossett และ Koeningทำสิ่งนี้สำหรับปัญหาของ Bernstein – Vazirani และอนุญาตให้พวกเขาทำ เพื่อแสดงการแยกขนาดเล็ก แต่ไม่มีเงื่อนไขระหว่างควอนตัมและความซับซ้อนแบบคลาสสิกซึ่งเป็นหนึ่งในสิ่งที่น่าสนใจมากกว่าที่จะเกิดขึ้นในความซับซ้อนของควอนตัมในช่วงหลายปีที่ผ่านมา

TL; DR

  • อย่าเหงื่อเกินความจริงที่ว่าคุณกำลังประเมิน 'oracle'

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

  • หากแรงจูงใจของคุณเพียงเพื่อฝึกหัดการเขียนโปรแกรมควอนตัมอย่ากังวลไปเลย ประหยัดความกังวลของคุณสำหรับปัญหาที่คุ้มค่าเช่นภาวะโลกร้อน ในขณะเดียวกันสนุกกับการเล่นกับ Legos ในขณะที่คุณสร้างอะไรเพิ่มเติม

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