【发布时间】:2012-03-23 20:15:50
【问题描述】:
我想熟悉量子计算基础知识。
熟悉它的一个好方法是编写非常基本的虚拟量子计算机机器。 据我所知,实现单个量子比特的努力不能简单地复制到实现两个量子比特系统。但我也不知道如何实现单个量子位。
如何实现量子比特? 如何实现一组量子位?
【问题讨论】:
我想熟悉量子计算基础知识。
熟悉它的一个好方法是编写非常基本的虚拟量子计算机机器。 据我所知,实现单个量子比特的努力不能简单地复制到实现两个量子比特系统。但我也不知道如何实现单个量子位。
如何实现量子比特? 如何实现一组量子位?
【问题讨论】:
示例代码
如果你想从简单但有效的东西开始,你可以玩这个basic quantum circuit simulator on jsfiddle(大约 2k 行,但其中大部分是 UI 内容 [绘图和点击] 和数学内容 [定义复数和矩阵])。
州
量子计算机的状态是一组复杂的权重,称为amplitudes。每个可能的经典状态都有一个幅度。在量子比特的情况下,经典状态只是普通比特可以处于的各种状态。
例如,如果您有 3 个位,那么您需要为 000、001、010、011、100、101、110 和 @ 设置复数权重987654332@ 州。
var threeQubitState = new Complex[8];
幅度必须满足一个约束:如果将它们的平方幅度相加,则结果为 1。经典状态对应于幅度为 1 的幅度,而其他幅度均为 0:
threeQubitState[3] = 1; // the system is 100% in the 011 state
运营
对量子态的操作让您可以通过在经典状态之间流动来重新分配振幅,但是您选择的流动必须保留 squared-magnitudes-add-up-to-1 属性 在所有情况下。从技术上讲,操作必须对应一些unitary matrix。
var myOperation = state => new[] {
(state[1] + state[0])/sqrt(2),
(state[1] - state[0])/sqrt(2),
state[2],
state[3],
state[4],
state[5],
state[6],
state[7]
};
var myNewState = myOperation(threeQubitState);
...这些是基础。状态是具有单位 2 范数的复数列表,运算是酉矩阵,测量状态的概率就是其幅度的平方。
等
您可能需要考虑的其他事项:
【讨论】:
我实际上并不知道答案,但是开始阅读有关量子位的一个有趣的地方是this article。它没有详细描述纠缠量子比特的工作原理,但暗示了所涉及的复杂性:
如果这就是仅使用两个量子位就能使事情变得如此复杂,那么如何 3 或 4 或 100 会变得复杂吗?事实证明, N-qubit量子计算机的状态只能完全定义 当绘制为具有 (4^N-1) 维度的空间中的一个点时。这意味着 我们需要 4^N 个很好的老式经典数字来模拟它。
请注意,这是最大的空间复杂度,例如,对于 15 个量子位,大约有 10 亿个数字 (2^30=4^15)。它没有说明模拟的时间复杂度。
【讨论】:
@Qwertie 引用的文章是一个很好的介绍。如果您想在您的计算机上实现这些,您可以使用libquantum 模拟器,它在 C 库中实现了复杂的量子操作。大家可以看看this example,看看使用代码是什么样子的。
【讨论】:
信息实际上存储在不同Qbit之间的交互中,因此没有实现1 Qbit不会转化为使用多个。我认为您可以玩的另一种方法是使用现有的语言,如 QCL 或 google QCP http://qcplayground.withgoogle.com/#/home 玩
【讨论】: