Алгоритм Гровера: де список?


15

Використовується алгоритм Гровера, серед іншого, шукати потрібний пункт y в неврегульованих списку елементів [x0,x1,...,xn1] довжини n . Незважаючи на те, що тут є багато питань щодо цієї теми, я все одно пропускаю суть.

Пошук у списку, класичним способом

Як правило, я б розробити функцію пошуку таким способом

search([x0,x1,...,xn1],y)=iNsuch that xi=y
Отже, я даю список і шуканий елемент як вхідні дані, і я отримую позицію елемента в списку як вихід. Здаєтьсяя зрозумівщо інформація проy вбудовується в алгоритмі через оракула ворітO , такнаша функція стає
searchy([x1,x2,...,xn])=iNsuch that xi=y
Давайте зробимо практичний приклад. Розглянемо пошук лопат туза1 у послідовності 8 карт зістандартної колоди на 52 картки:

перетасовували колоду

Список довжини 8 дорівнює [x0=J, x1=10, x2=4, x3=Q, x4=3, x5=1, x6=6, x7=6] .

Шуканий елемент - x5 . Я повинен отримати search(cards)=5 . Кожна карта може бути закодована log252=6 біт, у списку є 8 елементів, тому для кодування списку нам потрібно 6×8=48 біт. У цьому випадку oracle O реалізує функцію:

f(x)={1,x=10,otherwise

Однак вхід алгоритму Гровера - це не стан 48 кубітів.

(Примітка. Зображення перетасованої колоди зроблено звідси )

Гровер та його оракул

(Наприклад. Деякі джерела тут - графічний пояснити) говорять про те , що вхід алгоритму відрізняється: вхід стан береться з простору пошуку S={0,1,2,...,N}={0,1,2,...,7} де N - кількість елементів списку. Кожне число відповідає позиції елемента в списку.

Вхід search() тепер log28=3 кубітний вектор |ψ , яке повинно бути суперпозицією всіх елементів в просторі пошуку S .

Ми знаємо

  • |03qubits=|000 відповідаєJ ;
  • |13qubits=|001 відповідає10 ;
  • |23qubits=|010 Відповідає4 ;
  • |53qubits=|101 відповідає до1 який є елементом розшукуваний;
  • і так далі...

У цьому випадку ми маємо

search(|ψ)=|53qubits
Але в цьому випадку, наш оракул б реалізувати функцію
f(|ψ)={1,|ψ=|53qubits0,otherwise

Побудова оракула вимагає від нас знати, що знаходиться в положенні 5. Який сенс виконати алгоритм, якщо ми вже шукали елемент для побудови оракула?


Мені також важко зрозуміти перевагу алгоритму Гровера. Припустимо, у мене в списку є N елементів. Чи оцінював він під час кожного дзвінка до Oracle всі N можливостей? Навіть якщо оцінка дуже швидка, але якщо нам все-таки потрібно повторити всі конфігурації, то складність оцінки Oracle становить O (N). Тож алгоритм Гровера не здається швидшим за тупий пошук. Це правильно?
Санпарит Марукатат

@SanparithMarukatat Це невірно. Елементи вашого списку - це умови суперпозиції держави, яка бере участь у пошуку. Коли Oracle працює в цьому стані, це вважається однією операцією. Здатність Oracle позначити шуканий термін вашої суперпозиції є фундаментальною частиною розуміння Гровера. Щоб зрозуміти алгоритм Гровера, рекомендую спочатку зрозуміти, як відбувається таке маркування від бажаного стану. Згодом переконайтесь, що розумієте роль держави в Oracle. |
Р. Шопен

Якщо ви це розумієте, то вам слід вивчити оператора, який здатний збільшити амплітуду потрібного члена в суперпозиції, одночасно зменшуючи амплітуду небажаних доданків суперпозиції. Мені найпростіший спосіб наблизитися до Гровера - подивитися на оператора зворотного значення. (Деякі люди сприймають геометричний вигляд, але я не вважаю це зрозумілим.)
Р. Шопен

Відповіді:


10

Якщо у списку є 8 елементів (наприклад, у прикладі вашої картки), то вхід oracle - це 3 (qu) біт. Кількість карт в колоді (52) не має значення, для кодування 8 карт вам потрібно лише 3 біти.

Можна подумати, що 3 біти кодують позицію у списку картки, яку ви шукаєте; тоді ви не знаєте позиції, але оракул знає. Отже, якщо ви шукаєте лози піки, то оракул знає, що лопата туза - це 6-а карта (або 5-я підрахунок від нуля) і реалізує функцію

f(х)={1,якщо x = 5, або двійкове «101»0,інакше

PS: Краще думати про алгоритм Гровера по-іншому: у вас є оракул, що реалізує булеву функцію, яка виводить за одну комбінацію вхідних бітів, інакше виводить нуль, і ваше завдання - знайти комбінацію. Проблема має таку ж складність, як пошук у несортованому списку чи базі даних, тому алгоритм Гровера зазвичай описується як пошук у несортованій базі даних. Але застосування алгоритму до пошуку в базі даних у реальному світі справді викликає питання, що виходять за межі самого алгоритму. Алгоритм Гровера просто шукає те, що знає оракул.1


Yes sorry, that 6 was from a previous edit
incud

2
Thank you for your answer. I fixed the miswriting. What's the point of executing the algorithm if in order to build the oracle I need to know the position of the searched element?
incud

1
@incud Indeed it does not make sense. I've updated the answer.
kludg

" Алгоритм Гровера просто шукає те, що знає оракул ": не обов'язково. Оракул може перевіряти лише якесь певне властивість вхідного сигналу, щоб результат, який ви отримуєте в кінці, містив більше інформації, ніж той, що закодований в itracle. Типовий приклад - пошук у телефонній книзі. Оракул "просить" запису, прикріпленого до конкретного імені, але як тільки буде знайдено правильний запис, ви також отримаєте додаткову інформацію про номер телефону, приєднаний до цього запису, який взагалі не був закодований в оракулі
glS

4

Хоча нам, мабуть, найпростіше думати про функцію оракула, як вже обчислив усі ці значення, але це не те, що він робить. У випадку, який ви описали, у oracle є 8 можливих входів (тобто закодованих у 3 (qu) біти), і oracle виконує всі обчислення, які вам потрібні під час руху . Отже, момент, коли ви спробуєте оцінити оракул за деякою цінністюх, оракул шукає (у цьому випадку) картку, значення якої хвідповідає, а потім перевіряє, чи ця карта є позначеною карткою. Ідея полягає в тому, що кожного разу, коли ви телефонуєте оракулу, він проходить цей процес один раз. Загалом ви оцінюєте функцію в кілька разів, що дорівнює кількості разів, коли ви викликаєте оракул. Мета будь-якого алгоритму пошуку - викликати цей оракул якомога рідше.

У випадку, якщо це здається трохи круговим (з урахуванням вводу х, знайдіть, яка карта відповідає), пам’ятайте, що ваша таблиця пошуку для чого хвідповідає тому, яку карту можна замовити, що є іншим, простішим, набагато швидшим запитом пошуку.

Ключові відмінності у вашому прикладі порівняно з більш реалістичним сценарієм використання:

  • Простір пошуку зазвичай є масовим. Немає реальної перспективи попередньо обчислити всі значення. Дійсно, саме цього ми намагаємось уникати.

  • Зазвичай ми фактично не кажемо «знайти лопату лопати». Натомість єf(х) це нетривіально для оцінки, щоб перевірити, якщо х is the 'marked' item or not. The fact that the oracle can take quite a long time to evaluate, even for a single entry, is what makes the oracle the costly part to implement (and all other gates are given for free) and why you need to minimise the number of calls.

So, really, the way a classical search would work on your problem is: pick an x at random. Evaluate y=f(x). If y=1, return x, otherwise repeat. While the net effect of f(x) is 'is the input x0, the marked entry?', that is not the actual calculation that it does.


2

The question is ultimately: "What's the point to execute the algorithm if we have already searched for the element in order to build the oracle?"

Whilst somebody prebuilt the oracle, it may not have been the person using the oracle.

Grover's algorithm requires the oracle be queried no more times than size of list. Naturally we cannot hope respective database lookups, as proposed earlier against which I cannot comment for lack of reputation, on say 5 million keys will return the content we want if our content is not addressed by any of those 5 million keys, but by saying the 9 millionth key, which happens not to be in our sample. How does Grover's algorithm do it then?

We ask the oracle: what is the answer it already has for the question it already has? Even Mateus and Omar would ask the "oracle-for-a-particular-alphabet-symbol" during runtime, what are the position(s) of its symbol in the string that it has already compiled? The oracle will give the answer to our query after only one consultation, but in this story, it cannot for example simply write out the answer as a binary string and send it to us over a classical communication channel. It will hide its answer in a superposition for us to draw it out.

Я дозволяю фантазії чи метафорі втекти в наступному шматочку: ми не чуємо відповіді в перший раз, і нам доведеться просити оракул повторювати ту ж відповідь знову і знову, поки ми не будемо впевнені, що сказав оракул, за винятком того, що ми починаємо галюцинувати від дезінформації в процесі дифузії, якщо ми запитуємо занадто багато разів.


2

Враховуючи наданий вами оракул, пошук справді є безглуздим. Однак цей оракул не вистачає точки алгоритму Гровера, оскільки пошук картки в колоді карт не є неструктурованим пошуком, оскільки, як ви заявили, ви вже знаєте порядок. Ерго, ваш пошук структурований. Причина, якою використовується цей оракул, полягає в тому, що він демонструє, як можна застосувати Гровер, не обговорюючи оракул, який зробить Гровер корисним, оскільки такий оракул буде складнішим, ніж цінним. Тому кращим оракулом для демонстрації корисності Гровера може бути щось на зразок:

f(x)={1,x[0,,3]+x[4,,7]=10100,otherwise

What this oracle implies is that you have an 8-qubit search where you take the first four qubits and add them to the second four qubits and flip M if the addition makes 10 (1010 in binary). The difference between this oracle and the one you provided is that this oracle tests a pattern (do the operands add to 10) whereas yours tests equality (is this index 5). This oracle is much more difficult to build but it leverages the true power of Grover's, which is, in essence, a brute-force search where your oracle defines the search space.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.