可以用简单的代码示例解释量子位和位之间的区别吗?

npo*_*aka 6 bit quantum-computing qscript qubit

我知道你可以玩量子计算的唯一地方是谷歌量子游乐场ibm的量子体验.虽然第一个使用qscript和第二个qasm语言(易于学习),但它们的使用仍然与常规编程(除了少数特定功能)没有太大差别.这是维基百科的解释:

量子比特与经典比特有一些相似之处,但总体上非常不同.测量量子位有两种可能的结果 - 通常是0和1,就像一点.不同之处在于,当比特的状态为0或1时,量子比特的状态也可以是两者的叠加.可以在一个量子比特中完全编码一个比特.然而,量子位可以使用超密码编码来保存更多信息,例如最多两位.

对于n个分量的系统,在经典物理中对其状态的完整描述仅需要n位,而在量子物理学中它需要2 ^ n - 1个复数.

哪个或多或少清楚.但是如何通过代码示例显示?

Cra*_*ney 6

这里有一些经典的代码翻转硬币并计算你得到多少头:

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
Run Code Online (Sandbox Code Playgroud)

如果多次运行此代码并进行直方图,结果将近似为二项分布:

经典二项分布

现在这里有一些基本相同的伪代码,除了硬币由量子比特代替.我们通过应用Hadamard操作来"翻转量子比特".

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)
Run Code Online (Sandbox Code Playgroud)

做了很多次,绘制出分布,你会得到一些非常不同的东西:

量子行走分布

显然,尽管这些代码片段的表面相似性,但它们的表现却截然不同.量子行走与经典随机行走的行为不同.这种差异在某些算法中很有用.