Thuật toán của Grover: một ví dụ thực tế?


13

Tôi khá bối rối về cách thuật toán của Grover có thể được sử dụng trong thực tế và tôi muốn yêu cầu trợ giúp làm rõ thông qua một ví dụ.

Giả sử cơ sở dữ liệu phần tử có chứa các màu Đỏ, Cam, Vàng, Xanh lục, Lục lam, Xanh lam, Chàm và Tím và không nhất thiết phải theo thứ tự này. Mục tiêu của tôi là tìm Red trong cơ sở dữ liệu.N=số 8

Đầu vào cho thuật toán của Grover là qubit, trong đó 3 qubit mã hóa các chỉ số của tập dữ liệu. Sự nhầm lẫn của tôi xuất hiện ở đây (có thể bị nhầm lẫn về các cơ sở nên nói rằng sự nhầm lẫn xảy ra ở đây) rằng, theo tôi hiểu, nhà tiên tri thực sự tìm kiếm một trong các chỉ số của tập dữ liệu (đại diện bởi sự chồng chất của 3 qubit), và hơn nữa, nhà tiên tri là "mã hóa cứng" cho chỉ số nào cần tìm.n= =log2(N= =số 8)= =3

Câu hỏi của tôi là:

  • Làm gì ở đây?
  • Nếu nhà tiên tri thực sự đang tìm kiếm một trong những chỉ số của cơ sở dữ liệu, điều đó có nghĩa là chúng ta đã biết chúng ta đang tìm kiếm chỉ mục nào, vậy tại sao lại tìm kiếm?
  • Với các điều kiện trên với màu sắc, ai đó có thể chỉ ra nếu Grover có thể tìm kiếm Red trong một tập dữ liệu không có cấu trúc không?

Có các triển khai cho thuật toán của Grover với một orest cho tìm kiếm | 111>, ví dụ (hoặc xem triển khai R của cùng một orory bên dưới): /quantum//a/2205n=3Oracle cho 111

Một lần nữa, sự nhầm lẫn của tôi là, do tôi không biết vị trí của các phần tử trong tập dữ liệu, thuật toán yêu cầu tôi tìm kiếm một chuỗi mã hóa vị trí của các phần tửLàm cách nào để biết vị trí nào tôi cần tìm khi tập dữ liệu không có cấu trúc?NN

Mã 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)

Hình ảnh 2



Câu trả lời:


5

Một giả định chính để có hiệu quả trong việc sử dụng cơ sở dữ liệu là bạn có thể tải với sự chồng chất của dữ liệu địa chỉ từ RAM, còn được gọi là QRAM (xem https://arxiv.org/abs/0708.1879 ). Sau đó, giả sử bạn có một trạng thái cho địa chỉ, một trạng thái cho giá trị và hoạt động tải, tải giá trị của địa chỉ tương ứng vào thanh ghi giá trị. Vì vậy, hoạt động tải sẽ làm bước

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

Trong bước đầu tiên, bạn áp dụng cổng Hadamard trên thanh ghi địa chỉ và sau đó áp dụng thao tác tải trên cả hai thanh ghi. Sau đó, bạn sẽ có sự chồng chất của tất cả các giá trị trong cơ sở dữ liệu một thanh ghi giá trị. áp dụng tải1

Haddressn|0address|0value=12n/2x=02n1|xaddress|0giá trị
Sau đó, bạn áp dụng thuật toán Grover trên thanh ghi giá trị với bất kỳ lời tiên tri nào bạn muốn như tìm kiếm một số nguyên tố hoặc một giá trị cụ thể. Chúng ta biết sauO(
apply load12n/2x=02n1|xaddress|load(x)value
lặp lại câu trả lời đúng sẽ được đo với xác suất cao. Vì vậy, giải pháp cùng nhau đúng với địa chỉ đăng kýx*của giải pháp đúng sẽ rất có thể xảy ra đo | x* địa chỉ | tải(x) giá trị .O(N)x
|xaddress|load(x)value.

Có lẽ vấn đề chính bạn gặp phải là hiểu cơ sở dữ liệu chứ không phải thuật toán Grover. Bạn có thể thấy một lời giải thích chi tiết hơn trong chương 6.5 Nielsen & Chuang cho điều này.

Tôi cũng nghĩ rằng ứng dụng hữu ích nhất của thuật toán Grover không phải là ứng dụng cơ sở dữ liệu, mà là khái quát của nó như khuếch đại biên độ (xem https://arxiv.org/abs/quant-ph/0005055 ) trên bất kỳ thuật toán lượng tử nào.


k|k|skksk=+1sk.
glS


4

Điều này đã được thảo luận một phần trong câu hỏi liên quan này , nhưng tôi sẽ cố gắng giải quyết cụ thể hơn một số vấn đề bạn nêu ra.

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

f(xi)xixixiPP

fxiixi

xi=ixi

Trong trường hợp như vậy, thuật toán thực sự không đặc biệt hữu ích ở chỗ câu trả lời phải được mã hóa cứng thành lời tiên tri, nhưng điều này không cần phải nói chung.


Cảm ơn bạn đã trả lời của bạn! Có lẽ có thể cung cấp một ví dụ thực tế trong đó Grover là "hữu ích" được áp dụng trên một số dữ liệu thực tế được đưa ra lời sấm truyền? Ví dụ, làm thế nào nó hoạt động với cơ sở dữ liệu 8 phần tử với số nguyên tố và số nguyên tố không?
01000001

1
ffx
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.