Можно ли объяснить разницу между кубитом и битом на простом примере кода?

Единственные места, где я знаю, что вы можете играть с квантовыми вычислениями, - это квантовая площадка Google и квантовый опыт IBM. В то время как первый использует языки qscript и второй язык qasm (которые легко изучаются), их использование по-прежнему не сильно отличается от обычного программирования (за исключением нескольких специфических функций). Вот объяснение Википедии:

Кубит имеет несколько сходств с классическим битом, но в целом сильно отличается. Существует два возможных результата измерения кубита - обычно 0 и 1, например, бит. Разница заключается в том, что, хотя состояние бита равно 0 или 1, состояние кубита также может быть суперпозицией обоих. Возможно полное кодирование одного бита в одном кубите. Однако кубит может содержать даже больше информации, например, до двух битов с использованием сверхплотного кодирования.

Для системы из n компонентов полное описание ее состояния в классической физике требует только n битов, тогда как в квантовой физике требуется 2^n - 1 комплексных чисел.

Что более-менее понятно. Но как это можно показать на примере кода?

1 ответ

Решение

Вот некоторый классический код, который подбрасывает монеты и подсчитывает, сколько у вас голов:

def coin_count():
    bit = False
    counter = 0
    for _ in range(500):
        bit ^= random() < 0.5  # False → 50% False, 50% True
                               #  True → 50% False, 50% True
        if bit:
            counter += 1
    return counter

Если вы запустите этот код много раз и создадите гистограмму, результатом будет примерно биномиальное распределение:

Классическое биномиальное распределение

Теперь приведем некоторый псевдокод, который делает то же самое, за исключением того, что монета заменена кубитом. Мы "переворачиваем кубит", применяя к нему операцию Адамара.

def hadamard_coin_count():
    qubit = qalloc()
    counter = 0
    for _ in range(500):
        apply Hadamard to qubit # |0⟩ → √½|0⟩ + √½|1⟩
                                # |1⟩ → √½|0⟩ - √½|1⟩
        if qubit:  # (not a measurement; controls nested operations)
            counter += 1  # (happens only in some parts of the superposition)
    return measure(counter)  # (note: counter was in superposition)

Сделайте это много раз, постройте распределение, и вы получите что-то совсем другое:

распределение квантовых блужданий

Очевидно, что эти фрагменты кода делают совершенно разные вещи, несмотря на их поверхностное сходство. Квантовые прогулки не действуют так же, как классические случайные прогулки. Эта разница полезна в некоторых алгоритмах.

Другие вопросы по тегам