發現 IQFT 有其他的形式。
可依照開頭或是結尾擺放 SWAP gate,讓其運算在古典電腦上減少誤差。
Version 1
Version 1 OpenQASM code
OPENQASM 2.0;
include "qelib1.inc";
qreg q[4];
creg c[4];
x q[1];
x q[3];
barrier q[0], q[1], q[2], q[3];
h q[3];
cu1(pi / 2) q[2], q[3];
cu1(pi / 4) q[1], q[3];
cu1(pi / 8) q[0], q[3];
h q[2];
cu1(pi / 2) q[1], q[2];
cu1(pi / 4) q[0], q[2];
h q[1];
cu1(pi / 2) q[0], q[1];
h q[0];
swap q[0], q[3];
swap q[1], q[2];
barrier q[0], q[1], q[2], q[3];
swap q[1], q[2];
swap q[0], q[3];
h q[0];
cu1(-pi / 2) q[0], q[1];
h q[1];
cu1(-pi / 4) q[0], q[2];
cu1(-pi / 2) q[1], q[2];
h q[2];
cu1(-pi / 8) q[0], q[3];
cu1(-pi / 4) q[1], q[3];
cu1(-pi / 2) q[2], q[3];
h q[3];
barrier q[0], q[1], q[2], q[3];
measure q[0] -> c[0];
measure q[1] -> c[1];
measure q[2] -> c[2];
measure q[3] -> c[3];
Version 2
Version 2 OpenQASM code
OPENQASM 2.0;
include "qelib1.inc";
qreg q[4];
creg c[4];
x q[1];
x q[3];
barrier q[0], q[1], q[2], q[3];
h q[3];
cu1(pi / 2) q[2], q[3];
cu1(pi / 4) q[1], q[3];
cu1(pi / 8) q[0], q[3];
h q[2];
cu1(pi / 2) q[1], q[2];
cu1(pi / 4) q[0], q[2];
h q[1];
cu1(pi / 2) q[0], q[1];
h q[0];
swap q[0], q[3];
swap q[1], q[2];
barrier q[0], q[1], q[2], q[3];
h q[3];
cu1(-pi / 2) q[2], q[3];
cu1(-pi / 4) q[1], q[3];
cu1(-pi / 8) q[0], q[3];
h q[2];
cu1(-pi / 2) q[1], q[2];
cu1(-pi / 4) q[0], q[2];
h q[1];
cu1(-pi / 2) q[0], q[1];
h q[0];
swap q[0], q[3];
swap q[1], q[2];
barrier q[0], q[1], q[2], q[3];
measure q[0] -> c[0];
measure q[1] -> c[1];
measure q[2] -> c[2];
measure q[3] -> c[3];
結語
不過目前看起來 version 1 的執行結果好像似乎大概可能比 version 2 好。