Liệu lời tiên tri trong thuật toán của Grover có cần chứa thông tin về toàn bộ cơ sở dữ liệu không?


8

Thuật toán của Grover thường được mô tả như một cách để tìm kiếm cơ sở dữ liệu trong thời gian . Để sử dụng nó, chúng ta cần một cổng orory đại diện cho một số hàm sao cho là câu trả lời. Nhưng làm thế nào để bạn thực sự tạo ra một cơ sở dữ liệu như vậyff - 1 (1)O(N)ff-1(1)

Giả sử tôi có một mảng các số chứa chính xác một lần và tôi cần tìm chỉ mục của . Trên một máy tính cổ điển, tôi sẽ tải mảng vào bộ nhớ và lặp qua nó cho đến khi tôi tìm thấy .w w wmộtwww

Ví dụ: nếu và , tôi hy vọng sẽ nhận được 2 là câu trả lời (hoặc 3 trong 1 - lập chỉ mục).w = 0một= =[3,2,0,1,2,3]w= =0

Làm cách nào để biểu diễn mảng này trong máy tính lượng tử và tạo một cổng trả về cho một số ? xmộtxx

Cụ thể, bạn có cần phải có toàn bộ cơ sở dữ liệu của Google trong bộ nhớ lượng tử không (giả sử có một số cách để truy cập các thanh ghi cổ điển từ các cổng lượng tử)?


Câu trả lời:


5

Không, không.

"Lời tiên tri " trong thuật toán của Grover là một hàm, với bất kỳ phần tử nào , kiểm tra xem có phải là phần tử mà chúng ta đang tìm kiếm hay không, giả sử . Để làm điều này, nhà tiên tri không cần bất kỳ kiến ​​thức nào về tất cả các yếu tố khác có trong cơ sở dữ liệu .x k x mục tiêu x jxkxkxtargetxj

Nó có thể giúp xem xét một ví dụ cụ thể hơn. Giả sử bạn có cơ sở dữ liệu gồm số điện thoại gồm bốn chữ số, với biểu thị phần tử thứ trong cơ sở dữ liệu này. Bạn muốn biết vị trí nào trong cơ sở dữ liệu tương ứng với phần tử . Chúng ta hãy giả sử rằng phần tử 10000 của cơ sở dữ liệu là phần tử duy nhất như vậy, nghĩa là, và cho tất cả .x k k 1234 x 10000 = 1234 x k1234 k 1000020000xkk1234x10000=1234xk1234k10000

Trong trường hợp cổ điển, là cơ sở dữ liệu chưa được sắp xếp, không có cách nào tốt hơn là đi qua từng phần tử trong cơ sở dữ liệu, kiểm tra từng phần tử so với mục tiêu . Để làm điều này, bạn chỉ cần có một thuật toán, với , trả về nếu và nếu không. Một cách tương đương để nêu vấn đề này là nói rằng chúng tôi muốn một thuật toán, đưa ra danh sách các cặp , trả về cặp sao cho là những gì chúng ta muốn. Do đó, trong trường hợp của chúng tôi, chúng tôi muốn một thuật toán đưa ra trả vềx k x k = 1234 không { ( k , x k ) } 20000 k = 1 x k { ( k , x k ) } 20000 k = 1 ( 10000 , x 10000 = 1234 ) x k1234xkyesxk=1234no{(k,xk)}k=120000xk{(k,xk)}k=120000(10000,x10000=1234). Lưu ý rằng điều này có nghĩa là chức năng kiểm tra từng cặp chỉ kiểm tra các tính năng của một phần của trạng thái , cụ thể là phần . Thật vậy, nếu đây không phải là trường hợp, toàn bộ điều này sẽ là vô nghĩa vì chúng tôi sẽ không khôi phục bất kỳ thông tin nào.xk

Cái khung cuối cùng của vấn đề này là cái mà người ta nên ghi nhớ trong khi nghĩ về thuật toán của Grover.

Trong trường hợp lượng tử, các cặp trở thành trạng thái lượng tử (hoặc chỉ cách chúng thường được ký hiệu) và hàm oracular chỉ kiểm tra phần thông tin được lưu trữ trong phù hợp với mục tiêu . Đầu ra của thủ tục là trạng thái . Bây giờ, một phần của trạng thái này mà chúng ta đã biết , bởi vì nó đã được mã hóa cứng trong nhà tiên tri: chúng ta biết rằng phần thứ hai của thông tin được mã hóa trong là(k,xk)|ψk|k|ψk|ψ10000|ψ100001234, bởi vì đó là những gì chúng tôi đang tìm kiếm ở nơi đầu tiên, và là thông tin được mã hóa vào chính lời sấm. Tuy nhiên , trạng thái cũng mang thông tin bổ sung , cụ thể là vị trí trong cơ sở dữ liệu: . Thông tin này không được sử dụng để xây dựng nhà tiên tri và là thông tin mà chúng tôi có được bằng cách chạy thuật toán.|ψ10000 10000

Cuối cùng, lưu ý rằng nhà tiên tri không biết gì về nội dung của cơ sở dữ liệu đầy đủ. Nó chỉ thực hiện một cách mạch lạc một chức năng kiểm tra một trạng thái duy nhất so với mục tiêu của nó. Tuy nhiên, thực tế là cổng này hoạt động mạch lạc có nghĩa là người ta có thể nhập vào trình kiểm tra này chức năng chồng chất của nhiều phần tử (có thể là tất cả) của cơ sở dữ liệu và có được một đầu ra chứa một số thông tin toàn cầu về tất cả các phần tử trong cơ sở dữ liệu.|ψk


1

Bạn sẽ xây dựng một hàm sao cho trước tiên truy cập vào mục -th của mảng của bạn và sau đó so sánh nó với . Một triển khai thực tế có thể truy cập vào mảng được mã hóa trong các qubit đầu vào (tham số) bổ sung như thể chúng là các bit.f ( x ) x wff(x)xw


Có cách nào để biểu diễn nó trong các mạch hoặc ma trận toán tử hoặc một số dạng cụ thể khác không? Tôi hơi bối rối về cách bạn làm cho nó truy cập vào một đầu vào cụ thể.
Norrius

Vì đầu vào là thông tin cổ điển (bit chứ không phải qubit, chỉ được mã hóa dưới dạng qubit), người ta có thể chỉ cần "sao chép" chúng bằng CNOT. Đó không phải là một bản sao thực sự mà là một bản sao vướng víu, nhưng điều đó là đủ tốt cho việc này. Điều quan trọng là giải nén bản sao (một lần nữa với CNOT) nếu không thuật toán của Grover sẽ không hoạt động.
Kim tự tháp
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.