Чим відрізняється програмування квантового алгоритму? Як виглядатиме мова на мові С, якби вона була розроблена для кубітів? Чи змінилися б типи?
Чим відрізняється програмування квантового алгоритму? Як виглядатиме мова на мові С, якби вона була розроблена для кубітів? Чи змінилися б типи?
Відповіді:
Коли я до цього заглянув, було зрозуміло, що квантові алгоритми, хоча і не особливо швидкі, дозволяють експоненціально масова паралелізм. Таким чином вони будуть світити у випадках, пов’язаних із пошуком у просторах, які не практичні для послідовного обладнання, навіть масово паралельного послідовного обладнання.
Однією властивістю квантових алгоритмів є те, що вони повинні бути оборотні . Будь-який заданий алгоритм може бути перетворений в той, який є оборотним, додавши до нього достатньо обліку, щоб він міг запускатися назад.
Ще одна властивість полягає в тому, що отримання відповіді за квантовим алгоритмом - справа випадкових випадків, тому що те, що ви отримуєте в кінці обчислення, - це багато відповідей, кожен зі своєю вірогідністю. Це потрібно виконувати так, щоб відповідь, яку ви хочете, мала високу ймовірність. Це може включати виконання алгоритму кілька разів вперед та назад.
Перевірте алгоритм пошуку Гровера .
ВСТАНОВЛЕНО, щоб показати фундаментальну роботу алгоритму Гровера. Припустимо, є проблема пошуку. Можливі відповіді - 0, 1, 2 і 3, але правильна відповідь - 2. Отже, квантовий комп'ютер ставиться в суперпозицію всіх чотирьох станів, і він проходить послідовність кроків, щоб побачити, який з них правильний, і перевертає свою амплітуду, як чорні точки та стрілки внизу:
Ви можете бачити, що стрілка 2 перевернута всередині машини, але немає можливості сказати це зовні, оскільки зовні видно лише ймовірності, які мають амплітуди у квадраті , а при квадраті вони всі рівні.
Однак амплітуди мають середнє значення, позначене червоною лінією, і комп'ютер може бути виконаний через послідовність кроків, яка інвертує кожну амплітуду щодо середнього . Коли це буде зроблено, амплітуди та ймовірності переходять у стан 2, правильна відповідь ! Тож якщо машина спостерігається, стан 2 світиться.
Це не зовсім так просто. Зазвичай потрібно кілька циклів роботи машини, вперед і назад, перевертаючи в кінці кожного циклу, щоб збільшити ймовірність правильної відповіді. Крім того, потрібно дбати про те, щоб не робити цього більше, ніж стільки разів, тому що це так само легко може змінити себе.
То чому вони кажуть, що квантові комп'ютери так швидко бувають ? Тому що кожного разу, коли ви подвоюєте кількість кубітів, ви формулюєте паралелізм, але ви не квадратуєте тривалість часу, тож зрештою він виграє.
Хіба це не весело?
Мене особисто цікавило, як це можна застосувати для перевірки правильності програмного забезпечення. Тепер ми тестуємо програмне забезпечення, кидаючи на нього купу тестових входів і (бути надмірно просто), бачачи, чи потрапляє він у Assert. У квантовому комп’ютері можливо, паралельно його запустити проти набагато щільнішого набору входів і побачити, чи потрапив якийсь із цих випадків у Assert.
Як, якби вхід в алгоритм становив 128 байт або 1024 біт, можливі різні 2 входи 10 10 або 10 ^ 308. Немає можливості перевірити, чи багато входів на звичайному комп'ютері, але квантовий комп'ютер міг би їх спробувати паралельно.
Як виглядатиме мова на мові С, якби вона була розроблена для кубітів? Чи змінилися б типи?
Це було б настільки різко, як бути незрозумілим, як C.
Основне питання (наскільки я це розумію) полягає в тому, що квантові обчислення не працюють приємно, так як це потрібно: "зроби це, то що, то це інше". Спроба змусити С зробити здатність зробити це в «процесорі» квантового комп'ютера буде, якщо не неможливо, дико неефективною.
Алгоритми програмування для квантових комп'ютерів (знову ж таки, наскільки я їх розумію), як правило, наближаються до карти / стилю функціонального стилю програмування, оскільки квантові обчислення дозволяють одночасно існувати всім кандидатам у частині "скорочення" та "випадати" з комп'ютера при спостереженні.
Зауважте, що існують деякі існуючі алгоритми для квантових комп'ютерів, хоча пристроїв не існує для їх запуску. Алгоритм Саймона, наприклад.
Для максимально ефективного використання квантового комп'ютера потрібно мати можливість впоратися з входами та виходами, які є станами квантового реєстру, для яких насправді немає класичного аналога. Якщо говорити про багаторічний досвід роботи в галузі квантової інформації, я повинен попередити вас, що ніхто не має для цього хорошої інтуїції за межами абстрактної математики алгебр С *, і мені кажуть, що навіть ця інтуїція виявляється недостатньою якщо ви почнете цікавитися теорією відносності.
Клас задач, які ефективно вирішуються на квантовому комп'ютері, відомий як BQP, для обмеженого квантового полінома. Це квантова версія BPP, і ви можете знайти більше інформації в цьому документі: http://www.scottaaronson.com/papers/bqpph.pdf
Мені минулої ночі дослідник квантових алгоритмів сказав мені, що існує дуже важлива проблема, яка є повною BQP: вирішення лінійної системи з N рівнянь. Класично це розв’язується на етапах O (N) з елімінацією Гаусса. Алгоритм Харроу-Хассідима-Ллойда ( http://arxiv.org/abs/0811.3171 ) вирішує його в полілозі (N), за умови, що ви готові прийняти відповідь, що рішення кодується як квантове стан. Якщо ви хочете в повній мірі використовувати квантовий комп'ютер, тому вам здається необхідним мати тип, що відповідає стану квантового регістра.
Хоча я зараз трохи поза моїм конкретним досвідом, я б загрожував здогадкою, що ви зможете запрограмувати квантовий комп'ютер, доки у вас буде доступ до типу, що відповідає магічним станам. Однак це складне поняття, яке потребує певного вивчення цього питання.
Попереджуйте, що ми дуже довго не маємо квантової мови програмування, оскільки ми перебуваємо на дуже примітивній стадії досліджень квантових обчислень. Попросити квантовий С прямо зараз схоже на те, щоб піти до Алана Тьюрінга і попросити його розробити Python. У нас ще навіть немає квантової версії вакуумної трубки!