我想熟悉量子計算的基礎知識。如何在我的計算機上實現一組量子位?
熟悉它的好方法是編寫非常基本的虛擬量子計算機。 從我所瞭解的情況來看,實現單個量子位的努力不能簡單地被複制來實現兩個量子位系統。但我不知道如何實現一個量子位。
如何實現量子位? 如何實現一組量子位?
我想熟悉量子計算的基礎知識。如何在我的計算機上實現一組量子位?
熟悉它的好方法是編寫非常基本的虛擬量子計算機。 從我所瞭解的情況來看,實現單個量子位的努力不能簡單地被複制來實現兩個量子位系統。但我不知道如何實現一個量子位。
如何實現量子位? 如何實現一組量子位?
我實際上並不知道答案,但開始閱讀關於量子位的一個有趣的地方是this article。它沒有詳細量子糾纏是如何工作的描述,但它暗示了涉及的複雜性:
如果是這樣的事情多麼複雜只能與兩個量子比特,如何 複雜的將它獲得3或4得到,或100?事實證明,當繪製爲具有(4^N-1)維的空間中的點時,只能完全定義N量子位量子計算機的狀態 。這意味着 我們需要4^N個古老的時尚經典數字來模擬它。
請注意,這是最大的空間複雜度,例如對於15個量子位約爲10億個數(2^30 = 4^15)。它沒有提到模擬的時間複雜性。
@Qwertie引用的文章是一個很好的介紹。如果你想在你的計算機上實現這些功能,你可以使用模擬器libquantum,它可以在C庫中實現複雜的量子操作。你可以看看this example看看使用代碼是什麼樣的。
這些信息實際上存儲在不同Qbits之間的交互中,所以沒有實現1 Qbit不會轉換爲使用多個Qbit。我倒是覺得另一種方式,你可以玩就是用像QCL或谷歌QCP http://qcplayground.withgoogle.com/#/home現有的語言玩弄
示例代碼
如果你想從簡單的東西,但工作開始,你可以玩與此basic quantum circuit simulator on jsfiddle(約2千行左右,但大部分是UI的東西[繪圖和點擊]和數學的東西[定義複數和矩陣])。
國家
量子計算機的狀態是一套複雜的權重,稱爲amplitudes。每個可能的經典狀態都有一個幅度。在量子位的情況下,傳統狀態僅僅是各種狀態的正常位可以英寸
舉例來說,如果你有三個位,那麼你就需要一個複雜的重量爲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
操作
量子態操作讓你由傳統狀態之間流動它重新分配幅度,但流動您選擇必須保留在所有情況下的平方幅度相加-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-範數的複數列表,操作是酉矩陣,測量狀態的概率只是其平方的幅度。
等
你可能需要考慮其他的事情: