อัลกอริทึมของ Grover: ตัวอย่างชีวิตจริงหรือไม่?


13

ฉันค่อนข้างสับสนเกี่ยวกับวิธีการใช้อัลกอริทึมของ Grover ในทางปฏิบัติและฉันต้องการขอความช่วยเหลือในการอธิบายผ่านตัวอย่าง

สมมติว่าฐานข้อมูลองค์ประกอบที่มีสีแดง, ส้ม, เหลือง, เขียว, ฟ้า, น้ำเงิน, ครามและม่วงไม่จำเป็นต้องเรียงตามลำดับนี้ เป้าหมายของฉันคือค้นหา Red ในฐานข้อมูลN=8

อินพุตสำหรับอัลกอริทึมของ Grover คือ qubits โดยที่ 3 qubits เข้ารหัสดัชนีของชุดข้อมูล ความสับสนของฉันมาที่นี่ (อาจจะสับสนเกี่ยวกับสถานที่ดังนั้นแทนที่จะพูดว่าความสับสนเกิดขึ้นที่นี่) ตามที่ฉันเข้าใจแล้ว oracle จะค้นหาดัชนีของชุดข้อมูลอย่างใดอย่างหนึ่ง (แทนด้วยการซ้อนทับของ 3 qubits) และยิ่งไปกว่านั้น oracle คือ "hardcoded" สำหรับดัชนีที่ควรค้นหาn=log2(N=8)=3

คำถามของฉันคือ:

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

มีการใช้งานสำหรับอัลกอริทึมของ Grover โดยมี oracle สำหรับค้นหา | 111> เช่น (หรือดูการนำ R ไปใช้กับ oracle เดียวกันด้านล่าง): /quantum//a/2205n=3Oracle สำหรับ 111

อีกครั้งความสับสนของฉันคือเนื่องจากฉันไม่ทราบตำแหน่งขององค์ประกอบในชุดข้อมูลอัลกอริทึมต้องให้ฉันค้นหาสตริงที่เข้ารหัสตำแหน่งขององค์ประกอบฉันจะรู้ตำแหน่งที่ฉันควรมองหาเมื่อชุดข้อมูลที่ไม่มีโครงสร้างได้อย่างไรNNN

รหัส R:

 #START
 a = TensorProd(TensorProd(Hadamard(I2),Hadamard(I2)),Hadamard(I2))
 # 1st CNOT
 a1= CNOT3_12(a)
 # 2nd composite
 # I x I x T1Gate
 b = TensorProd(TensorProd(I2,I2),T1Gate(I2)) 
 b1 = DotProduct(b,a1)
 c = CNOT3_02(b1)
 # 3rd composite
 # I x I x TGate
 d = TensorProd(TensorProd(I2,I2),TGate(I2))
 d1 = DotProduct(d,c)
 e = CNOT3_12(d1)
 # 4th composite
 # I x I x T1Gate
 f = TensorProd(TensorProd(I2,I2),T1Gate(I2))
 f1 = DotProduct(f,e)
 g = CNOT3_02(f1)
 #5th composite
 # I x T x T
 h = TensorProd(TensorProd(I2,TGate(I2)),TGate(I2))
 h1 = DotProduct(h,g)
 i = CNOT3_01(h1)
 #6th composite
 j = TensorProd(TensorProd(I2,T1Gate(I2)),I2)
 j1 = DotProduct(j,i)
 k = CNOT3_01(j1)
 #7th composite
 l = TensorProd(TensorProd(TGate(I2),I2),I2)
 l1 = DotProduct(l,k)
 #8th composite
 n = TensorProd(TensorProd(Hadamard(I2),Hadamard(I2)),Hadamard(I2))
 n1 = DotProduct(n,l1)
 n2 = TensorProd(TensorProd(PauliX(I2),PauliX(I2)),PauliX(I2))
 a = DotProduct(n2,n1)
 #repeat the same from 2st not gate
 a1= CNOT3_12(a)
 # 2nd composite
 # I x I x T1Gate
 b = TensorProd(TensorProd(I2,I2),T1Gate(I2))
 b1 = DotProduct(b,a1)
 c = CNOT3_02(b1)
 # 3rd composite
 # I x I x TGate
 d = TensorProd(TensorProd(I2,I2),TGate(I2))
 d1 = DotProduct(d,c)
 e = CNOT3_12(d1)
 # 4th composite
 # I x I x T1Gate
 f = TensorProd(TensorProd(I2,I2),T1Gate(I2))
 f1 = DotProduct(f,e)
 g = CNOT3_02(f1)
 #5th composite
 # I x T x T
 h = TensorProd(TensorProd(I2,TGate(I2)),TGate(I2))
 h1 = DotProduct(h,g)
 i = CNOT3_01(h1)
 #6th composite
 j = TensorProd(TensorProd(I2,T1Gate(I2)),I2)
 j1 = DotProduct(j,i)
 k = CNOT3_01(j1)
 #7th composite
 l = TensorProd(TensorProd(TGate(I2),I2),I2)
 l1 = DotProduct(l,k)
 #8th composite
 n = TensorProd(TensorProd(PauliX(I2),PauliX(I2)),PauliX(I2))
 n1 = DotProduct(n,l1)
 n2 = TensorProd(TensorProd(Hadamard(I2),Hadamard(I2)),Hadamard(I2))
 n3 = DotProduct(n2,n1)
 result=measurement(n3)
 plotMeasurement(result)

ภาพที่ 2



นอกจากนี้ยังเกี่ยวข้องกับ: quantumcomputing.stackexchange.com/q/175/55
แอลเอส

คำตอบ:


5

ข้อสันนิษฐานหลักประการหนึ่งที่มีประสิทธิภาพในการใช้ฐานข้อมูลคือคุณสามารถโหลดข้อมูลทับที่อยู่จาก RAM ที่เรียกว่า QRAM (ดูที่https://arxiv.org/abs/0708.1879 ) จากนั้นสมมติว่าคุณมีหนึ่งสถานะสำหรับที่อยู่หนึ่งสถานะสำหรับค่าและการดำเนินการโหลดซึ่งจะโหลดค่าของที่อยู่ที่สอดคล้องกันในการลงทะเบียนค่า ดังนั้นการดำเนินการโหลดจะทำตามขั้นตอน

|xaddress|0value|xaddress|load(x)0value=|xaddress|load(x)value.

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

Haddressn|0address|0value=12n/2x=02n1|xaddress|0value
apply load12n/2x=02n1|xaddress|load(x)value
x| x*อยู่ | โหลด(x*)ค่าO(N)ซ้ำคำตอบที่ถูกต้องจะถูกวัดด้วยความน่าจะเป็นสูง ดังนั้นการแก้ปัญหาที่ถูกต้องพร้อมกับที่อยู่การลงทะเบียนของการแก้ปัญหาที่ถูกต้องจะวัดได้มาก x
|xaddress|load(x)value.

บางทีปัญหาหลักที่คุณมีก็คือการเข้าใจฐานข้อมูลไม่ใช่อัลกอริทึมของ Grover คุณสามารถดูคำอธิบายโดยละเอียดเพิ่มเติมในบทที่ 6.5 Nielsen & Chuang สำหรับสิ่งนี้

ฉันคิดว่าแอปพลิเคชั่นที่มีประโยชน์ที่สุดของอัลกอริทึม Grover ไม่ใช่แอปพลิเคชันฐานข้อมูล แต่เป็นการสรุปเป็นแอมพลิจูดแอมพลิจูด (ดูhttps://arxiv.org/abs/quant-ph/0005055 ) สำหรับอัลกอริทึมควอนตัมใด ๆ

แก้ไข: ฉันคิดว่าปัญหา glS ตอบแล้วเล็กน้อย: ถ้าเราสามารถสร้าง oracle ปัญหาไม่ได้แก้ไขแล้ว? เนื่องจากการสร้าง oracle เราจำเป็นต้องทราบว่าโซลูชันที่ถูกต้องมีลักษณะอย่างไร และถ้าคุณไม่มีพื้นฐานทางด้านวิทยาศาสตร์คอมพิวเตอร์คำถามนี้จะตอบยากด้วยตัวเอง อย่างไรก็ตามภายใต้สมมติฐานที่นักวิทยาศาสตร์ส่วนใหญ่เชื่อ (NP P) นี่เป็นกรณีของเซตย่อยของปัญหาที่สมบูรณ์แบบ (ซึ่งไม่มีวิธีการประมาณที่ดี) เราสามารถสร้าง oracle ซึ่งสามารถตรวจสอบว่าคำตอบนั้นถูกต้องในเวลาพหุนามหรือไม่ แต่เพื่อสร้าง oracle ซึ่งพบว่าคำตอบที่ถูกต้องนั้นดูเหมือนจะไม่สามารถคำนวณได้อย่างมีประสิทธิภาพ


ฉันไม่คิดว่าคุณจะต้องเรียกใช้ P NP สำหรับเรื่องนี้ ตัวอย่างเช่นพิจารณากรณีที่คุณมี qudit มิติสูงควบคู่ไปกับคิวบิตดังนั้นรัฐในรูปแบบ| สิ่งนี้สามารถเข้ารหัสบางสิ่งเช่น "สมุดโทรศัพท์" (ชุดหมายเลข) โดยมีระเบียน (นี่เป็นเลขฐานสอง) ที่เกี่ยวข้องกับแต่ละหมายเลข เป้าหมายของคุณคือการหาที่เกี่ยวข้องกับ 1 จากนั้นคุณสามารถใช้อัลกอริทึมของโกรเวอร์โดยมีออราเคิลทำหน้าที่เฉพาะที่ด้านในและปล่อยให้ดัชนีนั้นแตะต้อง อาคาร oracle เป็นเรื่องง่าย: เพียงแค่การสร้างสิ่งที่ probes s_kk|k|skksk=+1sk
glS

ใช่ตัวอย่างนี้อาจเข้าใจง่ายกว่าเป็นตัวอย่างแรก แต่ฉันคิดว่าจะเข้าใจว่าอัลกอริทึม Grover มีประโยชน์สำหรับแอปพลิเคชันในระดับปัญหาที่สำคัญกว้างกว่าความคิดเบื้องหลัง P NP เป็นสิ่งสำคัญ
Alex Go

4

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

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

|i(1)f(xi)|i,
ixii

คุณคิดว่าเป็น " ถามคำถามเกี่ยวกับ " ยกตัวอย่างเช่น " เป็นจำนวนเฉพาะ? " หรือ " ไม่มีคุณสมบัติ ?" ที่อาจหมายถึง "เป็นสีแดง"f(xi)xixixiPP

มันเป็นสิ่งสำคัญที่จะต้องทราบว่าอาจจะถามคำถามที่ไม่ได้อย่างเต็มที่สมบัติx_iซึ่งหมายความว่าหลังจากที่ฉันเรียกใช้อัลกอริทึมและดึงและดังนั้นด้วยฉันก็ยังได้รับความรู้ที่ไม่ได้ใช้ในการสร้าง oraclefxiixi

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

ในกรณีเช่นนี้อัลกอริทึมไม่ได้มีประโยชน์โดยเฉพาะอย่างยิ่งในการที่คำตอบจะต้องถูก hardcoded ลงในออราเคิล แต่นี่ไม่จำเป็นต้องเป็นกรณีทั่วไป


ขอบคุณสำหรับการตอบกลับของคุณ! บางทีเป็นไปได้ไหมที่จะแสดงตัวอย่างชีวิตจริงที่โกรเวอร์ใช้ "ประโยชน์" กับข้อมูลจริงบางอย่างที่ได้รับจากออราเคิลที่นำเสนอ? เช่นจะทำงานกับฐานข้อมูล 8 องค์ประกอบที่มีเฉพาะช่วงเวลาและไม่มีช่วงเวลาได้อย่างไร
01000001

1
@ 01000001 ฉันเชื่อว่าคำตอบนี้สำหรับคำถามที่เกี่ยวข้องกับ cstheory.SE อาจมีคุณสมบัติ มันเป็นตัวอย่างที่ดีของ Grover ที่ใช้สำหรับไม่ใช่เรื่องสำคัญ ในกรณีของเขาประมวลผลว่าสูตรบูลีนที่กำหนดนั้นเป็นที่น่าพอใจโดยอินพุตหรือไม่ ผลลัพธ์ของอัลกอริทึมจึงเป็นทำให้สูตรบูลีนเป็นที่น่าพอใจffx
glS
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.