我想熟悉量子计算基础知识。
熟悉它的一个好方法是编写非常基本的虚拟量子计算机机器。据我所知,实现单个量子比特的努力不能简单地复制到实现两个量子比特系统。但我也不知道如何实现单个量子位。
如何实现量子比特?如何实现一组量子位?
我想熟悉量子计算基础知识。
熟悉它的一个好方法是编写非常基本的虚拟量子计算机机器。据我所知,实现单个量子比特的努力不能简单地复制到实现两个量子比特系统。但我也不知道如何实现单个量子位。
如何实现量子比特?如何实现一组量子位?
示例代码
如果你想从简单但有效的东西开始,你可以在 jsfiddle 上玩这个基本的量子电路模拟器(大约 2k 行,但其中大部分是 UI 的东西 [绘图和点击] 和数学的东西 [定义复数和矩阵])。
状态
量子计算机的状态是一组复杂的权重,称为幅值。每个可能的经典状态都有一个幅度。在量子比特的情况下,经典状态只是普通比特可以处于的各种状态。
例如,如果您有 3 个位,那么您需要为000
、001
、010
、011
、100
、101
、110
和111
状态使用复权重。
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 属性。从技术上讲,该操作必须对应于一些酉矩阵。
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 范数的复数列表,操作是酉矩阵,测量状态的概率只是其幅度的平方。
ETC
您可能需要考虑的其他事项:
我实际上不知道答案,但是这篇文章是开始阅读有关量子位的一个有趣的地方。它没有详细描述纠缠量子比特的工作原理,但暗示了所涉及的复杂性:
如果这就是仅使用两个量子位可以使事情变得多么复杂,那么使用 3 个或 4 个或 100 个量子位会变得多么复杂?事实证明,只有将 N 量子位量子计算机的状态绘制为具有 (4^N-1) 维空间中的一个点时,才能完全定义其状态。这意味着我们需要 4^N 个老式经典数字来模拟它。
请注意,这是最大的空间复杂度,例如,对于 15 个量子位,大约有 10 亿个数字 (2^30=4^15)。它没有说明模拟的时间复杂度。
@Qwertie 引用的文章是一个很好的介绍。如果你想在你的计算机上实现这些,你可以使用libquantum模拟器,它在 C 库中实现了复杂的量子操作。您可以查看此示例以了解使用代码的情况。
信息实际上存储在不同 Qbit 之间的交互中,因此不实现 1 Qbit 不会转化为使用多个。我认为您可以玩的另一种方法是使用现有的语言,如 QCL 或 google QCP http://qcplayground.withgoogle.com/#/home玩