@yuichirominato 2019.02.01更新 201views

【初心者】量子コンピュータを直感的に理解する。


はじめに

やっぱり理解しづらいと言われます。量子コンピュータを今のコンピュータの延長線上で考えてみます。

(追記)最近もっともっと直感的を追加しました。
https://blog.blueqat.com/post/2392

01ビット

私たちのコンピュータはたとえどんな難しい計算でも0と1をぱちぱち切り替えて計算しています。それはそろばんを高速で弾くようなものです。

その0と1はデータを扱う最小の単位です。

こんな感じです。では、もう早速量子コンピュータを見てみます。

今のコンピュータと量子コンピュータ

今のコンピュータと量子コンピュータはデータの扱い方が少しだけ違います。今のコンピュータは0と1を考えるとき、左のように点滅で考えてみます。量子コンピュータはちょっと工夫して真ん中(原点)から矢印の向いている向きで考えてみます。0の時には矢印は真上を向いて、1の時には矢印は真下を向きます。

大事なことは、基本的にはZ軸という軸をもっていて、0はその軸の上の上向き矢印、1は下向き矢印で表現されます。これさえ覚えればもう量子コンピュータは理解できたも同然です。

量子コンピュータではこの切り替えを量子ゲートと呼ばれる演算を使い、0と1の切り替えにX(エックス)ゲートを使います。

今のコンピュータでできないこと(その1)

ここからが少し違います。今のコンピュータはデータを0と1の最小単位で持ちますが、量子コンピュータはさらに単位を拡張できます。今回はZ軸と交わるX軸を作ってみて、「+(プラス)」と「ー(マイナス)」を0と1のように追加してみます。

こうすることで、0のほかに1や+や-をデータの最小単位として使えます。では、どのように切り替えるのでしょうか?それには先ほど少し出てきた「量子ゲート」を利用します。

Xゲートで0と1を切り替え

Xゲートは0と1を切り替えます。今のコンピュータではNOTゲートとも呼ばれます。なぜXゲートと呼ばれているかというと、X軸の周りに矢印を180度回転させると0と1が反転するからです。

Hゲートで0と+(プラス)、1と-(マイナス)を切り替え

H(アダマール)ゲートを使うことによって0を+にして、+を0にできます。また、1を-にして、-を1に戻すことができます。Hゲートは軸を切り替える大事なゲートです。

Zゲートで+(プラス)と-(マイナス)を切り替え

Zゲートは+と-を切り替えます。Z軸周りに矢印を180度回転させると+が-に、-が+になります。

中間まとめ

このように今のコンピュータはZ軸だけを使って0と1を活用していましたが、量子コンピュータではX軸を増やして計算を行うことができます。計算は通常0からスタートしますので、0からはじまりゲートを駆使して計算を行います。

例えば、0からスタートして下記のような操作をしてみます。
①Hゲートをかける
②Zゲートをかける
③Hゲートをかける

これは、まず0を+にして、+を-にして、-を1にするという操作と同じです。そのため、この計算の答えは1になります。

このような操作を複雑にすることによって計算ができます。

計算結果について

計算結果に関しては、今のコンピュータと同じ0か1で結果をみます。ですので、+や-の結果は見ることができません。では、その際にどのように判断をするかというと、+や-のような場合には0と1が半々で出ます。答えは必ず私たちの目に見えるZ軸に乗ります。

今のコンピュータでできないこと(その2)

さらに量子コンピュータができることはこれだけではありません。最後にY軸を加えることでより複雑な波の計算を導入できます。Yゲートや回転ゲートなど波の計算に大事な要素が多々あります。応用になりますので、興味ある人はみてみてください。

まとめ

今回は量子コンピュータを少しでも理解してもらいたくてデータの扱い方を見てみました。今のコンピュータは0と1だけですが、量子コンピュータはそれを3次元でデータを見ます。

実際のプログラミングにはPythonを使います。このようにblueqatを使ってプログラミングすることで簡単に量子コンピュータの計算ができます。

from blueqat import Circuit

Circuit().h[0].cx[0,1].run()

これからも少しずつ量子コンピュータを理解しやすく考えてみたいと思います。

Recommended


CONTACT

info@mdrft.com

ブログトップへ Wikiへ移動

量子コンピュータ一般

量子ゲートアルゴリズム

量子アニーリング一般

量子アニーリングアルゴリズム

BlueqatSDKの使い方