作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
正如标题所说,如何在 Q# 中实现 Grover 的扩散算子?我知道它被定义为 2 ⟨s|s⟩ - I
哪里|s⟩
是任意数量的量子比特的统一状态。这可以进一步定义为夹在一对 H 门之间的 Z0(看到它称为 U0)门。我无法在量子原语和规范文档中找到任何以 Grover、diff 等可能名称开头的函数。
我不想使用功能 AmpAmpByOracle
因为它是非常高级的实现并且没有清除我的理解。我想实现一个函数,它需要一个 oracle Uf(我认为未知)和它需要的量子比特数(N),并通过简单地遵循 Grover's Algorithm | Wikipedia 中给出的电路来执行 Grover 算法。并通过在 r = approx(2^(N/2)) 迭代结束时测量所有 N 个量子位来测量所需的状态。
最佳答案
扩散操作有点棘手。我发现将它分解成碎片最容易:
// register is the Qubit[] that we want to apply the diffusion operation to
using (ancillae = Qubit[1])
{
let ancilla = ancillae[0];
X(ancilla); // Puts the ancilla into the |1> state
H(ancilla); // And now into the |-> state
ApplyToEach(H, register); // Put the register qubits into the X basis
ApplyToEach(X, register); // Flip 0->1 and 1->0
(Controlled X)(register, ancilla); // Do the controlled flip of the ancilla
ApplyToEach(X, register); // Undo the flip
ApplyToEach(H, register); // Undo the basis change
H(ancilla); // Put the ancilla back into |1>
X(ancilla); // And back to |0> so we can return it
}
关于quantum-computing - Q#中如何实现格罗弗扩散算子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51190773/
我是一名优秀的程序员,十分优秀!