Forwarded from Python3
آموزش الگوریتمهای کوانتومی – پارت ۳: گیتهای چند کیوبیتی و درهمتنیدگی
هدف پارت سوم
در این بخش، با گیتهای چند کیوبیتی مانند CNOT آشنا میشویم و مفهوم مهم درهمتنیدگی (Entanglement) را بررسی میکنیم. درهمتنیدگی یکی از ویژگیهای منحصربهفرد محاسبات کوانتومی است که در الگوریتمهای پیشرفته نقش کلیدی دارد.
گیت CNOT (Controlled NOT)
گیت CNOT یک گیت دو کیوبیتی است که در آن یک کیوبیت بهعنوان کنترل و دیگری بهعنوان هدف عمل میکند. اگر کیوبیت کنترل در حالت |1⟩ باشد، گیت X روی کیوبیت هدف اعمال میشود؛ در غیر این صورت، تغییری روی کیوبیت هدف ایجاد نمیشود.
- تأثیر گیت CNOT:
ایجاد درهمتنیدگی با گیت CNOT و Hadamard
برای ایجاد درهمتنیدگی، ابتدا یک کیوبیت را با گیت Hadamard به حالت برهمنهی میبریم و سپس گیت CNOT را اعمال میکنیم. نتیجه، حالتی است که دو کیوبیت کاملاً به هم وابسته میشوند؛ به طوری که اندازهگیری یکی، حالت دیگری را نیز مشخص میکند.
مدار درهمتنیدگی در Qiskit:
توضیح کد
1. ایجاد مدار:
مدار شامل دو کیوبیت و دو بیت کلاسیک است.
2. اعمال گیت Hadamard:
کیوبیت اول را به حالت برهمنهی میبرد، بنابراین به طور همزمان در حالتهای |0⟩ و |1⟩ قرار میگیرد.
3. اعمال گیت CNOT:
با استفاده از گیت CNOT، کیوبیت دوم را به کیوبیت اول وابسته میکنیم و در نتیجه درهمتنیدگی ایجاد میشود.
4. اندازهگیری:
هر دو کیوبیت را اندازهگیری کرده و نتایج را مشاهده میکنیم. در خروجی، مشاهده خواهید کرد که فقط حالاتی مانند
تمرین برای شما:
۱. مدار را تغییر دهید و بهجای گیت Hadamard روی کیوبیت اول، روی کیوبیت دوم اعمال کنید. آیا همچنان درهمتنیدگی ایجاد میشود؟
۲. بهجای گیت CNOT، از گیتهای دیگر مانند X و Z استفاده کنید و تأثیر آن را بررسی کنید.
پارت بعدی:
در پارت ۴، با الگوریتم دیوش-جوزا (Deutsch-Jozsa Algorithm) بهعنوان اولین الگوریتم کوانتومی واقعی آشنا خواهیم شد.
ادامه دارد...
[برای یا گرفتن چیزای بیشتر اینجا کلیک کن]
هدف پارت سوم
در این بخش، با گیتهای چند کیوبیتی مانند CNOT آشنا میشویم و مفهوم مهم درهمتنیدگی (Entanglement) را بررسی میکنیم. درهمتنیدگی یکی از ویژگیهای منحصربهفرد محاسبات کوانتومی است که در الگوریتمهای پیشرفته نقش کلیدی دارد.
گیت CNOT (Controlled NOT)
گیت CNOT یک گیت دو کیوبیتی است که در آن یک کیوبیت بهعنوان کنترل و دیگری بهعنوان هدف عمل میکند. اگر کیوبیت کنترل در حالت |1⟩ باشد، گیت X روی کیوبیت هدف اعمال میشود؛ در غیر این صورت، تغییری روی کیوبیت هدف ایجاد نمیشود.
- تأثیر گیت CNOT:
|00⟩ → |00⟩
|01⟩ → |01⟩
|10⟩ → |11⟩
|11⟩ → |10⟩
ایجاد درهمتنیدگی با گیت CNOT و Hadamard
برای ایجاد درهمتنیدگی، ابتدا یک کیوبیت را با گیت Hadamard به حالت برهمنهی میبریم و سپس گیت CNOT را اعمال میکنیم. نتیجه، حالتی است که دو کیوبیت کاملاً به هم وابسته میشوند؛ به طوری که اندازهگیری یکی، حالت دیگری را نیز مشخص میکند.
مدار درهمتنیدگی در Qiskit:
from qiskit import QuantumCircuit, Aer, transpile, assemble, execute
from qiskit.visualization import plot_histogram
# ایجاد مدار با دو کیوبیت و دو بیت کلاسیک
qc = QuantumCircuit(2, 2)
# اعمال گیت Hadamard روی کیوبیت اول
qc.h(0)
# اعمال گیت CNOT با کیوبیت ۰ بهعنوان کنترل و کیوبیت ۱ بهعنوان هدف
qc.cx(0, 1)
# اندازهگیری هر دو کیوبیت
qc.measure([0, 1], [0, 1])
# اجرای مدار روی شبیهساز
simulator = Aer.get_backend('qasm_simulator')
compiled_circuit = transpile(qc, simulator)
qobj = assemble(compiled_circuit)
result = simulator.run(qobj).result()
# نمایش نتایج
counts = result.get_counts()
print("Counts:", counts)
plot_histogram(counts)
توضیح کد
1. ایجاد مدار:
مدار شامل دو کیوبیت و دو بیت کلاسیک است.
2. اعمال گیت Hadamard:
کیوبیت اول را به حالت برهمنهی میبرد، بنابراین به طور همزمان در حالتهای |0⟩ و |1⟩ قرار میگیرد.
3. اعمال گیت CNOT:
با استفاده از گیت CNOT، کیوبیت دوم را به کیوبیت اول وابسته میکنیم و در نتیجه درهمتنیدگی ایجاد میشود.
4. اندازهگیری:
هر دو کیوبیت را اندازهگیری کرده و نتایج را مشاهده میکنیم. در خروجی، مشاهده خواهید کرد که فقط حالاتی مانند
00
و 11
ظاهر میشوند؛ این به دلیل وابستگی کامل دو کیوبیت است.تمرین برای شما:
۱. مدار را تغییر دهید و بهجای گیت Hadamard روی کیوبیت اول، روی کیوبیت دوم اعمال کنید. آیا همچنان درهمتنیدگی ایجاد میشود؟
۲. بهجای گیت CNOT، از گیتهای دیگر مانند X و Z استفاده کنید و تأثیر آن را بررسی کنید.
پارت بعدی:
در پارت ۴، با الگوریتم دیوش-جوزا (Deutsch-Jozsa Algorithm) بهعنوان اولین الگوریتم کوانتومی واقعی آشنا خواهیم شد.
ادامه دارد...
[برای یا گرفتن چیزای بیشتر اینجا کلیک کن]
👍6❤1
Forwarded from Python3
آموزش الگوریتمهای کوانتومی – پارت ۴: الگوریتم دیوش-جوزا (Deutsch-Jozsa Algorithm)
هدف پارت چهارم
در این بخش، با اولین الگوریتم کوانتومی که برتری خود را نسبت به الگوریتمهای کلاسیک نشان میدهد آشنا میشویم: الگوریتم دیوش-جوزا. این الگوریتم بهخوبی اهمیت موازیسازی کوانتومی را نشان میدهد.
مقدمهای بر الگوریتم دیوش-جوزا
فرض کنید تابعی داریم که ورودی n بیتی میگیرد و خروجی آن یا همیشه ۰ است یا دقیقاً به تعداد مساوی ۰ و ۱ برمیگرداند. هدف ما این است که تشخیص دهیم این تابع ثابت (Constant) یا متعادل (Balanced) است.
- در روش کلاسیک:
برای تشخیص این موضوع، در بدترین حالت باید تابع را روی نیمی از ورودیهای ممکن اجرا کنیم.
اگر تابع دارای n بیت ورودی باشد، این به معنای اجرای تابع روی ۲^(n-1) ورودی است.
- در روش کوانتومی:
با استفاده از الگوریتم دیوش-جوزا میتوان تنها با یک بار اجرا تشخیص داد که تابع ثابت یا متعادل است!
مراحل الگوریتم دیوش-جوزا
1. ایجاد حالت برهمنهی:
تمام ورودیهای ممکن به تابع را بهطور همزمان ایجاد میکنیم.
2. اعمال تابع f به حالت برهمنهی:
تابع کوانتومی را روی کیوبیتها اعمال میکنیم.
3. اندازهگیری نتیجه:
نتیجه اندازهگیری به ما میگوید که تابع ثابت یا متعادل است.
مدار الگوریتم دیوش-جوزا در Qiskit
در اینجا یک پیادهسازی ساده از الگوریتم دیوش-جوزا برای یک تابع ۲ بیتی ارائه شده است.
توضیح کد
1. ایجاد مدار:
مدار شامل سه کیوبیت و دو بیت کلاسیک است.
2. آمادهسازی کیوبیتها:
گیت Hadamard روی کیوبیتهای ورودی اعمال میشود تا تمام ورودیهای ممکن بهطور همزمان ایجاد شوند.
3. اعمال تابع f:
تابعی نمونه بهعنوان یک تابع متعادل تعریف شده است که با استفاده از گیتهای CNOT پیادهسازی میشود.
4. اندازهگیری:
پس از اعمال گیت Hadamard مجدد، نتیجه اندازهگیری به ما نشان میدهد که تابع متعادل است.
نتیجه اجرای کد
در این مثال، خروجی مدار نشان میدهد که تابع متعادل است، زیرا نتیجه اندازهگیری بهصورت
تمرین برای شما:
۱. تابعی ثابت تعریف کنید و ببینید آیا الگوریتم میتواند آن را تشخیص دهد.
۲. تعداد ورودیها را افزایش دهید و تأثیر آن را روی مدار مشاهده کنید.
پارت بعدی:
در پارت ۵، با الگوریتم گراور (Grover's Algorithm) آشنا میشویم که برای جستجوی سریع در پایگاه دادههای غیر مرتب استفاده میشود.
ادامه دارد...
[برای یا گرفتن چیزای بیشتر اینجا کلیک کن]
هدف پارت چهارم
در این بخش، با اولین الگوریتم کوانتومی که برتری خود را نسبت به الگوریتمهای کلاسیک نشان میدهد آشنا میشویم: الگوریتم دیوش-جوزا. این الگوریتم بهخوبی اهمیت موازیسازی کوانتومی را نشان میدهد.
مقدمهای بر الگوریتم دیوش-جوزا
فرض کنید تابعی داریم که ورودی n بیتی میگیرد و خروجی آن یا همیشه ۰ است یا دقیقاً به تعداد مساوی ۰ و ۱ برمیگرداند. هدف ما این است که تشخیص دهیم این تابع ثابت (Constant) یا متعادل (Balanced) است.
- در روش کلاسیک:
برای تشخیص این موضوع، در بدترین حالت باید تابع را روی نیمی از ورودیهای ممکن اجرا کنیم.
اگر تابع دارای n بیت ورودی باشد، این به معنای اجرای تابع روی ۲^(n-1) ورودی است.
- در روش کوانتومی:
با استفاده از الگوریتم دیوش-جوزا میتوان تنها با یک بار اجرا تشخیص داد که تابع ثابت یا متعادل است!
مراحل الگوریتم دیوش-جوزا
1. ایجاد حالت برهمنهی:
تمام ورودیهای ممکن به تابع را بهطور همزمان ایجاد میکنیم.
2. اعمال تابع f به حالت برهمنهی:
تابع کوانتومی را روی کیوبیتها اعمال میکنیم.
3. اندازهگیری نتیجه:
نتیجه اندازهگیری به ما میگوید که تابع ثابت یا متعادل است.
مدار الگوریتم دیوش-جوزا در Qiskit
در اینجا یک پیادهسازی ساده از الگوریتم دیوش-جوزا برای یک تابع ۲ بیتی ارائه شده است.
from qiskit import QuantumCircuit, Aer, transpile, assemble, execute
from qiskit.visualization import plot_histogram
# ایجاد مدار با ۳ کیوبیت و ۲ بیت کلاسیک
n = 2 # تعداد ورودیهای تابع
qc = QuantumCircuit(n + 1, n)
# آمادهسازی کیوبیتها: ایجاد برهمنهی
qc.h(range(n)) # اعمال گیت H روی n کیوبیت اول
qc.x(n) # اعمال گیت X روی کیوبیت کمکی
qc.h(n) # اعمال گیت H روی کیوبیت کمکی
# اعمال تابع f (در اینجا یک تابع متعادل نمونه)
qc.cx(0, n) # گیت CNOT با کیوبیت ۰ بهعنوان کنترل
qc.cx(1, n) # گیت CNOT با کیوبیت ۱ بهعنوان کنترل
# اعمال گیت Hadamard مجدد
qc.h(range(n))
# اندازهگیری کیوبیتها
qc.measure(range(n), range(n))
# اجرای مدار روی شبیهساز
simulator = Aer.get_backend('qasm_simulator')
compiled_circuit = transpile(qc, simulator)
qobj = assemble(compiled_circuit)
result = simulator.run(qobj).result()
# نمایش نتایج
counts = result.get_counts()
print("Counts:", counts)
plot_histogram(counts)
توضیح کد
1. ایجاد مدار:
مدار شامل سه کیوبیت و دو بیت کلاسیک است.
2. آمادهسازی کیوبیتها:
گیت Hadamard روی کیوبیتهای ورودی اعمال میشود تا تمام ورودیهای ممکن بهطور همزمان ایجاد شوند.
3. اعمال تابع f:
تابعی نمونه بهعنوان یک تابع متعادل تعریف شده است که با استفاده از گیتهای CNOT پیادهسازی میشود.
4. اندازهگیری:
پس از اعمال گیت Hadamard مجدد، نتیجه اندازهگیری به ما نشان میدهد که تابع متعادل است.
نتیجه اجرای کد
در این مثال، خروجی مدار نشان میدهد که تابع متعادل است، زیرا نتیجه اندازهگیری بهصورت
11
خواهد بود. اگر نتیجه 00
بود، به این معنی بود که تابع ثابت است.تمرین برای شما:
۱. تابعی ثابت تعریف کنید و ببینید آیا الگوریتم میتواند آن را تشخیص دهد.
۲. تعداد ورودیها را افزایش دهید و تأثیر آن را روی مدار مشاهده کنید.
پارت بعدی:
در پارت ۵، با الگوریتم گراور (Grover's Algorithm) آشنا میشویم که برای جستجوی سریع در پایگاه دادههای غیر مرتب استفاده میشود.
ادامه دارد...
[برای یا گرفتن چیزای بیشتر اینجا کلیک کن]
Telegram
Python3
🎓 آموزش و پروژههای Python
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
❤2👍2
Forwarded from Python3
آموزش الگوریتمهای کوانتومی – پارت ۵: الگوریتم گراور (Grover's Algorithm)
هدف پارت پنجم
در این بخش، با یکی از مهمترین الگوریتمهای کوانتومی به نام الگوریتم گراور آشنا میشویم. این الگوریتم یک روش بسیار کارآمد برای جستجو در یک پایگاه داده غیر مرتب است و از برتری کوانتومی نسبت به روشهای کلاسیک بهره میبرد.
مقدمهای بر الگوریتم گراور
فرض کنید یک پایگاه داده غیر مرتب داریم و میخواهیم یک مقدار خاص را پیدا کنیم. در روشهای کلاسیک، در بدترین حالت نیاز به جستجو در تمام ورودیها داریم، یعنی O(N) عملیات.
اما الگوریتم گراور این کار را در حدود √N عملیات انجام میدهد!
ایده اصلی الگوریتم گراور
الگوریتم گراور به کمک مفهوم تقویت دامنه (Amplitude Amplification) عمل میکند. ایده به این صورت است که بهطور پیوسته حالتهای صحیح (که به دنبال آنها هستیم) را تقویت کرده و حالتهای نادرست را تضعیف میکند، تا در نهایت با احتمال بالایی بتوانیم حالت صحیح را با یک اندازهگیری پیدا کنیم.
مراحل الگوریتم گراور
1. ایجاد برهمنهی یکنواخت:
تمام حالتهای ممکن را بهطور همزمان ایجاد میکنیم.
2. اوراکل (Oracle):
تابعی را تعریف میکنیم که حالت هدف را مشخص میکند.
3. عملگر گراور:
به کمک گیتهای خاص، دامنه حالت هدف را تقویت میکنیم.
4. اندازهگیری:
در نهایت، با اندازهگیری حالت تقویتشده را به دست میآوریم.
پیادهسازی الگوریتم گراور در Qiskit
در اینجا یک پیادهسازی ساده از الگوریتم گراور برای یک پایگاه داده کوچک با ۲ کیوبیت ارائه شده است.
توضیح کد
1. ایجاد برهمنهی یکنواخت:
با اعمال گیتهای Hadamard، تمام حالتهای ممکن برای دو کیوبیت ایجاد میشود.
2. اوراکل:
در این مثال، یک اوراکل ساده تعریف شده که حالت |11⟩ را بهعنوان حالت هدف مشخص میکند.
3. عملگر گراور:
عملگر گراور با استفاده از گیتهای Hadamard، X و Controlled-Z پیادهسازی شده است تا دامنه حالت هدف تقویت شود.
4. اندازهگیری:
در نهایت، اندازهگیری انجام شده و نتیجه مشاهده میشود.
نتیجه اجرای کد
در خروجی، مشاهده خواهید کرد که با احتمال بالایی حالت |11⟩ به دست میآید، که همان حالت هدف ماست.
تمرین برای شما:
۱. تعداد کیوبیتها را افزایش دهید و بررسی کنید که آیا الگوریتم همچنان به درستی کار میکند.
۲. اوراکل را تغییر دهید تا حالت دیگری بهعنوان هدف در نظر گرفته شود و تأثیر آن را روی نتایج مشاهده کنید.
پارت بعدی:
در پارت ۶، به بررسی الگوریتم شُر (Shor’s Algorithm) میپردازیم که برای فاکتورگیری اعداد بزرگ استفاده میشود و کاربرد مهمی در شکستن رمزنگاریهای کلاسیک دارد.
ادامه دارد...
[برای یا گرفتن چیزای بیشتر اینجا کلیک کن]
هدف پارت پنجم
در این بخش، با یکی از مهمترین الگوریتمهای کوانتومی به نام الگوریتم گراور آشنا میشویم. این الگوریتم یک روش بسیار کارآمد برای جستجو در یک پایگاه داده غیر مرتب است و از برتری کوانتومی نسبت به روشهای کلاسیک بهره میبرد.
مقدمهای بر الگوریتم گراور
فرض کنید یک پایگاه داده غیر مرتب داریم و میخواهیم یک مقدار خاص را پیدا کنیم. در روشهای کلاسیک، در بدترین حالت نیاز به جستجو در تمام ورودیها داریم، یعنی O(N) عملیات.
اما الگوریتم گراور این کار را در حدود √N عملیات انجام میدهد!
ایده اصلی الگوریتم گراور
الگوریتم گراور به کمک مفهوم تقویت دامنه (Amplitude Amplification) عمل میکند. ایده به این صورت است که بهطور پیوسته حالتهای صحیح (که به دنبال آنها هستیم) را تقویت کرده و حالتهای نادرست را تضعیف میکند، تا در نهایت با احتمال بالایی بتوانیم حالت صحیح را با یک اندازهگیری پیدا کنیم.
مراحل الگوریتم گراور
1. ایجاد برهمنهی یکنواخت:
تمام حالتهای ممکن را بهطور همزمان ایجاد میکنیم.
2. اوراکل (Oracle):
تابعی را تعریف میکنیم که حالت هدف را مشخص میکند.
3. عملگر گراور:
به کمک گیتهای خاص، دامنه حالت هدف را تقویت میکنیم.
4. اندازهگیری:
در نهایت، با اندازهگیری حالت تقویتشده را به دست میآوریم.
پیادهسازی الگوریتم گراور در Qiskit
در اینجا یک پیادهسازی ساده از الگوریتم گراور برای یک پایگاه داده کوچک با ۲ کیوبیت ارائه شده است.
from qiskit import QuantumCircuit, Aer, transpile, assemble, execute
from qiskit.visualization import plot_histogram
# ایجاد مدار با ۲ کیوبیت و ۲ بیت کلاسیک
n = 2 # تعداد کیوبیتها
qc = QuantumCircuit(n, n)
# مرحله ۱: ایجاد برهمنهی یکنواخت
qc.h(range(n)) # اعمال گیت H روی تمام کیوبیتها
# مرحله ۲: تعریف اوراکل (Oracle)
qc.cz(0, 1) # یک اوراکل ساده که حالت |11⟩ را هدف قرار میدهد
# مرحله ۳: اعمال گیتهای گراور
qc.h(range(n))
qc.x(range(n))
qc.h(n-1)
qc.mcx([0], 1)
qc.h(n-1)
qc.x(range(n))
qc.h(range(n))
# اندازهگیری
qc.measure(range(n), range(n))
# اجرای مدار روی شبیهساز
simulator = Aer.get_backend('qasm_simulator')
compiled_circuit = transpile(qc, simulator)
qobj = assemble(compiled_circuit)
result = simulator.run(qobj).result()
# نمایش نتایج
counts = result.get_counts()
print("Counts:", counts)
plot_histogram(counts)
توضیح کد
1. ایجاد برهمنهی یکنواخت:
با اعمال گیتهای Hadamard، تمام حالتهای ممکن برای دو کیوبیت ایجاد میشود.
2. اوراکل:
در این مثال، یک اوراکل ساده تعریف شده که حالت |11⟩ را بهعنوان حالت هدف مشخص میکند.
3. عملگر گراور:
عملگر گراور با استفاده از گیتهای Hadamard، X و Controlled-Z پیادهسازی شده است تا دامنه حالت هدف تقویت شود.
4. اندازهگیری:
در نهایت، اندازهگیری انجام شده و نتیجه مشاهده میشود.
نتیجه اجرای کد
در خروجی، مشاهده خواهید کرد که با احتمال بالایی حالت |11⟩ به دست میآید، که همان حالت هدف ماست.
تمرین برای شما:
۱. تعداد کیوبیتها را افزایش دهید و بررسی کنید که آیا الگوریتم همچنان به درستی کار میکند.
۲. اوراکل را تغییر دهید تا حالت دیگری بهعنوان هدف در نظر گرفته شود و تأثیر آن را روی نتایج مشاهده کنید.
پارت بعدی:
در پارت ۶، به بررسی الگوریتم شُر (Shor’s Algorithm) میپردازیم که برای فاکتورگیری اعداد بزرگ استفاده میشود و کاربرد مهمی در شکستن رمزنگاریهای کلاسیک دارد.
ادامه دارد...
[برای یا گرفتن چیزای بیشتر اینجا کلیک کن]
Telegram
Python3
🎓 آموزش و پروژههای Python
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
❤3👍1
Forwarded from Python3
آموزش الگوریتمهای کوانتومی – پارت ۶: الگوریتم شُر (Shor’s Algorithm)
هدف پارت ششم
در این بخش، الگوریتم معروف شُر را بررسی میکنیم که در حوزه رمزنگاری اهمیت بالایی دارد. الگوریتم شُر به دلیل توانایی آن در فاکتورگیری اعداد صحیح بزرگ، میتواند بسیاری از سیستمهای رمزنگاری مبتنی بر فاکتورگیری مانند RSA را درهم بشکند.
ایده اصلی الگوریتم شُر
هدف الگوریتم شُر این است که عدد N را به دو عدد اول فاکتورگیری کند. مثلاً برای عدد 15 به دنبال دو عدد 3 و 5 میگردیم.
- روشهای کلاسیک مانند آزمون تقسیم برای اعداد بزرگ ناکارآمد هستند و زمان بسیار زیادی میبرند.
- الگوریتم شُر با استفاده از خاصیتهای کوانتومی مانند تحلیل فوریه کوانتومی (QFT) این کار را بسیار سریعتر انجام میدهد.
مراحل الگوریتم شُر
1. انتخاب یک عدد a که کوچکتر از N باشد و نسبت به N اول باشد (یعنی gcd(a, N) = 1).
2. پیدا کردن دوره تناوب r از تابع f(x) = a^x mod N به طوری که کوچکترین عدد r برای آن a^r mod N = 1 باشد.
3. استفاده از r برای محاسبه فاکتورها: اگر r فرد باشد یا a^(r/2) mod N برابر 1 باشد، مراحل را تکرار میکنیم. در غیر این صورت، فاکتورها را به صورت gcd(a^(r/2) - 1, N) و gcd(a^(r/2) + 1, N) به دست میآوریم.
مثال ساده برای عدد 15
1. عدد a را برابر با 2 انتخاب میکنیم. چون gcd(2, 15) = 1 است، a و N نسبت اول هستند.
2. تابع f(x) = 2^x mod 15 را برای مقادیر مختلف x محاسبه میکنیم:
- 2^1 mod 15 = 2
- 2^2 mod 15 = 4
- 2^3 mod 15 = 8
- 2^4 mod 15 = 1
بنابراین، دوره تناوب r برابر با 4 است.
3. حالا فاکتورها را محاسبه میکنیم:
gcd(2^(4/2) - 1, 15) = gcd(3, 15) = 3
gcd(2^(4/2) + 1, 15) = gcd(5, 15) = 5
بنابراین فاکتورهای عدد 15 به دست آمدند: 3 و 5.
پیادهسازی در Qiskit
در اینجا از Qiskit استفاده میکنیم تا الگوریتم شُر را روی یک شبیهساز اجرا کنیم.
توضیح کد
- ابتدا عدد N را تعریف میکنیم که همان عددی است که میخواهیم فاکتورگیری کنیم.
- با استفاده از کلاس Shor یک نمونه از الگوریتم شُر ایجاد میکنیم.
- الگوریتم روی شبیهساز QASM اجرا شده و فاکتورها بهصورت خروجی نمایش داده میشوند.
تمرین برای شما
1. الگوریتم شُر را برای اعداد 21 و 35 پیادهسازی کنید و نتایج را بررسی کنید.
2. توضیح دهید چرا الگوریتم شُر از نظر تئوری میتواند سیستم رمزنگاری RSA را بشکند.
پارت بعدی
در پارت 7 با مفهوم گیتهای چندکیوبیتی و درهمتنیدگی (Entanglement) آشنا خواهیم شد.
ادامه دارد...
[برای یا گرفتن چیزای بیشتر اینجا کلیک کن]
هدف پارت ششم
در این بخش، الگوریتم معروف شُر را بررسی میکنیم که در حوزه رمزنگاری اهمیت بالایی دارد. الگوریتم شُر به دلیل توانایی آن در فاکتورگیری اعداد صحیح بزرگ، میتواند بسیاری از سیستمهای رمزنگاری مبتنی بر فاکتورگیری مانند RSA را درهم بشکند.
ایده اصلی الگوریتم شُر
هدف الگوریتم شُر این است که عدد N را به دو عدد اول فاکتورگیری کند. مثلاً برای عدد 15 به دنبال دو عدد 3 و 5 میگردیم.
- روشهای کلاسیک مانند آزمون تقسیم برای اعداد بزرگ ناکارآمد هستند و زمان بسیار زیادی میبرند.
- الگوریتم شُر با استفاده از خاصیتهای کوانتومی مانند تحلیل فوریه کوانتومی (QFT) این کار را بسیار سریعتر انجام میدهد.
مراحل الگوریتم شُر
1. انتخاب یک عدد a که کوچکتر از N باشد و نسبت به N اول باشد (یعنی gcd(a, N) = 1).
2. پیدا کردن دوره تناوب r از تابع f(x) = a^x mod N به طوری که کوچکترین عدد r برای آن a^r mod N = 1 باشد.
3. استفاده از r برای محاسبه فاکتورها: اگر r فرد باشد یا a^(r/2) mod N برابر 1 باشد، مراحل را تکرار میکنیم. در غیر این صورت، فاکتورها را به صورت gcd(a^(r/2) - 1, N) و gcd(a^(r/2) + 1, N) به دست میآوریم.
مثال ساده برای عدد 15
1. عدد a را برابر با 2 انتخاب میکنیم. چون gcd(2, 15) = 1 است، a و N نسبت اول هستند.
2. تابع f(x) = 2^x mod 15 را برای مقادیر مختلف x محاسبه میکنیم:
- 2^1 mod 15 = 2
- 2^2 mod 15 = 4
- 2^3 mod 15 = 8
- 2^4 mod 15 = 1
بنابراین، دوره تناوب r برابر با 4 است.
3. حالا فاکتورها را محاسبه میکنیم:
gcd(2^(4/2) - 1, 15) = gcd(3, 15) = 3
gcd(2^(4/2) + 1, 15) = gcd(5, 15) = 5
بنابراین فاکتورهای عدد 15 به دست آمدند: 3 و 5.
پیادهسازی در Qiskit
در اینجا از Qiskit استفاده میکنیم تا الگوریتم شُر را روی یک شبیهساز اجرا کنیم.
from qiskit import Aer, execute
from qiskit.algorithms import Shor
N = 15 # عددی که میخواهیم فاکتورگیری کنیم
shor = Shor() # ایجاد نمونه الگوریتم شُر
backend = Aer.get_backend('qasm_simulator') # انتخاب شبیهساز
result = shor.run(backend, N) # اجرای الگوریتم
print("Factors of", N, ":", result.factors) # نمایش نتیجه
توضیح کد
- ابتدا عدد N را تعریف میکنیم که همان عددی است که میخواهیم فاکتورگیری کنیم.
- با استفاده از کلاس Shor یک نمونه از الگوریتم شُر ایجاد میکنیم.
- الگوریتم روی شبیهساز QASM اجرا شده و فاکتورها بهصورت خروجی نمایش داده میشوند.
تمرین برای شما
1. الگوریتم شُر را برای اعداد 21 و 35 پیادهسازی کنید و نتایج را بررسی کنید.
2. توضیح دهید چرا الگوریتم شُر از نظر تئوری میتواند سیستم رمزنگاری RSA را بشکند.
پارت بعدی
در پارت 7 با مفهوم گیتهای چندکیوبیتی و درهمتنیدگی (Entanglement) آشنا خواهیم شد.
ادامه دارد...
[برای یا گرفتن چیزای بیشتر اینجا کلیک کن]
Telegram
Python3
🎓 آموزش و پروژههای Python
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
❤3👍2
Forwarded from Python3
آموزش الگوریتمهای کوانتومی – پارت ۷: گیتهای چندکیوبیتی و درهمتنیدگی (Entanglement)
هدف پارت هفتم
در این پارت، با گیتهای چندکیوبیتی و مفهوم درهمتنیدگی آشنا میشویم. درهمتنیدگی یکی از ویژگیهای منحصر بهفرد سیستمهای کوانتومی است که بهطور گستردهای در الگوریتمهای کوانتومی مانند الگوریتم شُر و الگوریتم گریور استفاده میشود. این ویژگی به ما این امکان را میدهد که اطلاعات را بهطور همزمان در چندین کیوبیت ذخیره کرده و پردازش کنیم.
درهمتنیدگی (Entanglement)
درهمتنیدگی به وضعیتی گفته میشود که در آن دو یا چند کیوبیت بهگونهای با یکدیگر ارتباط دارند که تغییر وضعیت یک کیوبیت بهطور آنی وضعیت دیگر کیوبیتها را تحت تأثیر قرار میدهد. این ویژگی باعث میشود که اطلاعات در سیستمهای کوانتومی بهطور بسیار کارآمدتر از سیستمهای کلاسیک پردازش شوند.
برای درک بهتر این موضوع، بیایید یک نمونه ساده از درهمتنیدگی را بررسی کنیم.
گیتهای چندکیوبیتی و درهمتنیدگی در Qiskit
یکی از ابزارهای اصلی برای ایجاد درهمتنیدگی در سیستمهای کوانتومی استفاده از گیت CNOT (Controlled-NOT) است. این گیت دو کیوبیت را بهگونهای به هم متصل میکند که وضعیت یکی از کیوبیتها (کیوبیت کنترل) میتواند وضعیت دیگری (کیوبیت هدف) را تغییر دهد.
در اینجا یک نمونه کد برای درهمتنیدگی دو کیوبیت با استفاده از گیتهای کوانتومی آورده شده است:
توضیح کد
1. ایجاد مدار کوانتومی:
ابتدا یک مدار کوانتومی با دو کیوبیت ساخته میشود.
2. گیت هادامارد (Hadamard):
گیت هادامارد را روی کیوبیت اول (Q0) اعمال میکنیم. این گیت وضعیت کیوبیت را از حالت پایه (|0⟩) به حالت سوپراپوزیشن تغییر میدهد، بهطوریکه احتمال پیدا شدن کیوبیت در حالت 0 یا 1 برابر است.
3. گیت CNOT:
گیت CNOT که یک گیت کنترل-هدف است، روی کیوبیتهای Q0 (کنترل) و Q1 (هدف) اعمال میشود. این گیت وضعیت کیوبیت هدف (Q1) را فقط در صورتی تغییر میدهد که کیوبیت کنترل (Q0) در حالت 1 باشد.
4. اندازهگیری:
پس از ایجاد درهمتنیدگی بین کیوبیتها، هر دو کیوبیت را اندازهگیری میکنیم.
5. شبیهسازی مدار:
مدار را با استفاده از شبیهساز Qiskit اجرا کرده و نتایج اندازهگیری را مشاهده میکنیم.
نتیجه اجرای کد
اگر این کد را اجرا کنید، نتایج بهصورت زیر خواهد بود:
این نشاندهنده آن است که کیوبیتها در دو حالت درهمتنیده 00 یا 11 قرار دارند، و هر دو حالت با احتمال برابر مشاهده میشوند.
توضیح درهمتنیدگی
در این حالت، کیوبیتهای Q0 و Q1 درهمتنیده هستند. این بدین معنی است که وضعیت یکی از کیوبیتها بهطور آنی وضعیت دیگری را تحت تأثیر قرار میدهد. حتی اگر این کیوبیتها از هم فاصله زیادی داشته باشند، وضعیت آنها همچنان بهطور کوانتومی بههم مرتبط است.
تمرین برای شما:
1. یک مدار مشابه بسازید که در آن از گیتهای مختلفی مانند گیتهای Toffoli یا گیتهای کنترل شده دیگر استفاده کنید.
2. تأثیر درهمتنیدگی در الگوریتمهای مختلف کوانتومی را بررسی کرده و توضیح دهید که چگونه این ویژگی به بهبود عملکرد الگوریتمهای کوانتومی کمک میکند.
پارت بعدی:
در پارت ۸، با الگوریتم گریور (Grover's Algorithm) آشنا خواهیم شد و نحوه استفاده از درهمتنیدگی و گیتهای چندکیوبیتی را در جستجوهای کوانتومی بررسی خواهیم کرد.
ادامه دارد...
برای بیشتر یاد گرفتن اینجا کلیک کن
هدف پارت هفتم
در این پارت، با گیتهای چندکیوبیتی و مفهوم درهمتنیدگی آشنا میشویم. درهمتنیدگی یکی از ویژگیهای منحصر بهفرد سیستمهای کوانتومی است که بهطور گستردهای در الگوریتمهای کوانتومی مانند الگوریتم شُر و الگوریتم گریور استفاده میشود. این ویژگی به ما این امکان را میدهد که اطلاعات را بهطور همزمان در چندین کیوبیت ذخیره کرده و پردازش کنیم.
درهمتنیدگی (Entanglement)
درهمتنیدگی به وضعیتی گفته میشود که در آن دو یا چند کیوبیت بهگونهای با یکدیگر ارتباط دارند که تغییر وضعیت یک کیوبیت بهطور آنی وضعیت دیگر کیوبیتها را تحت تأثیر قرار میدهد. این ویژگی باعث میشود که اطلاعات در سیستمهای کوانتومی بهطور بسیار کارآمدتر از سیستمهای کلاسیک پردازش شوند.
برای درک بهتر این موضوع، بیایید یک نمونه ساده از درهمتنیدگی را بررسی کنیم.
گیتهای چندکیوبیتی و درهمتنیدگی در Qiskit
یکی از ابزارهای اصلی برای ایجاد درهمتنیدگی در سیستمهای کوانتومی استفاده از گیت CNOT (Controlled-NOT) است. این گیت دو کیوبیت را بهگونهای به هم متصل میکند که وضعیت یکی از کیوبیتها (کیوبیت کنترل) میتواند وضعیت دیگری (کیوبیت هدف) را تغییر دهد.
در اینجا یک نمونه کد برای درهمتنیدگی دو کیوبیت با استفاده از گیتهای کوانتومی آورده شده است:
from qiskit import QuantumCircuit, Aer, execute
# ایجاد یک مدار کوانتومی با 2 کیوبیت
qc = QuantumCircuit(2)
# قرار دادن گیت هادامارد روی کیوبیت اول (Q0)
qc.h(0)
# قرار دادن گیت CNOT (کنترل-هدف) با کیوبیت اول به عنوان کنترل و کیوبیت دوم به عنوان هدف
qc.cx(0, 1)
# اندازهگیری کیوبیتها
qc.measure_all()
# شبیهسازی مدار
backend = Aer.get_backend('aer_simulator')
result = execute(qc, backend, shots=1024).result()
# نمایش نتایج
counts = result.get_counts(qc)
print(counts)
توضیح کد
1. ایجاد مدار کوانتومی:
ابتدا یک مدار کوانتومی با دو کیوبیت ساخته میشود.
2. گیت هادامارد (Hadamard):
گیت هادامارد را روی کیوبیت اول (Q0) اعمال میکنیم. این گیت وضعیت کیوبیت را از حالت پایه (|0⟩) به حالت سوپراپوزیشن تغییر میدهد، بهطوریکه احتمال پیدا شدن کیوبیت در حالت 0 یا 1 برابر است.
3. گیت CNOT:
گیت CNOT که یک گیت کنترل-هدف است، روی کیوبیتهای Q0 (کنترل) و Q1 (هدف) اعمال میشود. این گیت وضعیت کیوبیت هدف (Q1) را فقط در صورتی تغییر میدهد که کیوبیت کنترل (Q0) در حالت 1 باشد.
4. اندازهگیری:
پس از ایجاد درهمتنیدگی بین کیوبیتها، هر دو کیوبیت را اندازهگیری میکنیم.
5. شبیهسازی مدار:
مدار را با استفاده از شبیهساز Qiskit اجرا کرده و نتایج اندازهگیری را مشاهده میکنیم.
نتیجه اجرای کد
اگر این کد را اجرا کنید، نتایج بهصورت زیر خواهد بود:
{'00': 512, '11': 512}
این نشاندهنده آن است که کیوبیتها در دو حالت درهمتنیده 00 یا 11 قرار دارند، و هر دو حالت با احتمال برابر مشاهده میشوند.
توضیح درهمتنیدگی
در این حالت، کیوبیتهای Q0 و Q1 درهمتنیده هستند. این بدین معنی است که وضعیت یکی از کیوبیتها بهطور آنی وضعیت دیگری را تحت تأثیر قرار میدهد. حتی اگر این کیوبیتها از هم فاصله زیادی داشته باشند، وضعیت آنها همچنان بهطور کوانتومی بههم مرتبط است.
تمرین برای شما:
1. یک مدار مشابه بسازید که در آن از گیتهای مختلفی مانند گیتهای Toffoli یا گیتهای کنترل شده دیگر استفاده کنید.
2. تأثیر درهمتنیدگی در الگوریتمهای مختلف کوانتومی را بررسی کرده و توضیح دهید که چگونه این ویژگی به بهبود عملکرد الگوریتمهای کوانتومی کمک میکند.
پارت بعدی:
در پارت ۸، با الگوریتم گریور (Grover's Algorithm) آشنا خواهیم شد و نحوه استفاده از درهمتنیدگی و گیتهای چندکیوبیتی را در جستجوهای کوانتومی بررسی خواهیم کرد.
ادامه دارد...
برای بیشتر یاد گرفتن اینجا کلیک کن
❤3👍1
Forwarded from Python3
آموزش الگوریتمهای کوانتومی – پارت ۸: آشنایی با گیتهای چندکیوبیتی و entanglement
هدف پارت هشتم
در این بخش، با گیتهای چندکیوبیتی و مفهوم entanglement (درهمتنیدگی) آشنا میشویم که یکی از ویژگیهای اساسی محاسبات کوانتومی است. این مفاهیم نقش کلیدی در ایجاد و پیادهسازی الگوریتمهای کوانتومی دارند.
گیتهای چندکیوبیتی
گیتهای چندکیوبیتی، برخلاف گیتهای تککیوبیتی که تنها روی یک کیوبیت اعمال میشوند، روی دو یا چند کیوبیت به صورت همزمان اثر میگذارند. این گیتها امکان ایجاد ارتباط بین کیوبیتها را فراهم کرده و پایهگذار مفهوم entanglement هستند.
گیتهای رایج دوکیوبیتی
1. گیت CNOT (Controlled-NOT)
این گیت روی دو کیوبیت، به نامهای کنترل و هدف، اعمال میشود. اگر مقدار کیوبیت کنترل برابر 1 باشد، عملگر NOT روی کیوبیت هدف اعمال میشود. جدول صحت این گیت به صورت زیر است:
ورودی | خروجی
00 → 00
01 → 01
10 → 11
11 → 10
2. گیت SWAP
این گیت مقدار دو کیوبیت را با هم جابجا میکند. اگر ورودی دو کیوبیت a و b باشد، خروجی آن به صورت b و a خواهد بود.
Entanglement (درهمتنیدگی)
درهمتنیدگی حالتی است که در آن کیوبیتها به گونهای به هم مرتبط میشوند که وضعیت یک کیوبیت به طور مستقیم با وضعیت کیوبیت دیگر وابسته است، حتی اگر فاصله زیادی بین آنها وجود داشته باشد. این ویژگی یکی از تفاوتهای اصلی بین محاسبات کلاسیک و کوانتومی است.
ایجاد درهمتنیدگی با استفاده از گیت هادامارد و CNOT
یک روش ساده برای ایجاد entanglement بین دو کیوبیت به صورت زیر است:
1. اعمال گیت هادامارد روی کیوبیت اول برای ایجاد حالت ابرموقعیت.
2. اعمال گیت CNOT با کیوبیت اول به عنوان کنترل و کیوبیت دوم به عنوان هدف.
این عملیات حالت entانگل شده زیر را ایجاد میکند:
|ψ⟩ = (1 / √2) (|00⟩ + |11⟩)
این بدان معناست که اگر کیوبیت اول را اندازهگیری کرده و مقدار آن 0 باشد، کیوبیت دوم نیز 0 خواهد بود و اگر کیوبیت اول برابر 1 باشد، کیوبیت دوم نیز 1 خواهد بود.
مثال از پیادهسازی entanglement در Qiskit
در ادامه، یک کد ساده برای ایجاد درهمتنیدگی بین دو کیوبیت را مشاهده میکنید:
توضیح کد
1. ابتدا یک مدار کوانتومی با دو کیوبیت تعریف شده است.
2. گیت هادامارد روی کیوبیت اول اعمال شده تا حالت ابرموقعیت ایجاد شود.
3. گیت CNOT روی دو کیوبیت اعمال شده تا entanglement ایجاد شود.
4. در نهایت، کیوبیتها اندازهگیری شده و نتیجه اجرا به صورت هیستوگرام نمایش داده میشود.
نتیجه اجرای کد
خروجی به صورت یک هیستوگرام خواهد بود که نشان میدهد حالات 00 و 11 با احتمال مساوی ظاهر میشوند، در حالی که حالات 01 و 10 اصلاً دیده نمیشوند. این نشاندهنده ایجاد موفقیتآمیز درهمتنیدگی بین دو کیوبیت است.
پارت بعدی:
در پارت ۹، با الگوریتم دیچک (Deutsch Algorithm) آشنا خواهیم شد که یکی از اولین الگوریتمهای کوانتومی است و نشان میدهد چگونه محاسبات کوانتومی میتوانند از محاسبات کلاسیک سریعتر باشند.
ادامه دارد...
برای بیشتر یاد گرفتن اینجا کلیک کن
هدف پارت هشتم
در این بخش، با گیتهای چندکیوبیتی و مفهوم entanglement (درهمتنیدگی) آشنا میشویم که یکی از ویژگیهای اساسی محاسبات کوانتومی است. این مفاهیم نقش کلیدی در ایجاد و پیادهسازی الگوریتمهای کوانتومی دارند.
گیتهای چندکیوبیتی
گیتهای چندکیوبیتی، برخلاف گیتهای تککیوبیتی که تنها روی یک کیوبیت اعمال میشوند، روی دو یا چند کیوبیت به صورت همزمان اثر میگذارند. این گیتها امکان ایجاد ارتباط بین کیوبیتها را فراهم کرده و پایهگذار مفهوم entanglement هستند.
گیتهای رایج دوکیوبیتی
1. گیت CNOT (Controlled-NOT)
این گیت روی دو کیوبیت، به نامهای کنترل و هدف، اعمال میشود. اگر مقدار کیوبیت کنترل برابر 1 باشد، عملگر NOT روی کیوبیت هدف اعمال میشود. جدول صحت این گیت به صورت زیر است:
ورودی | خروجی
00 → 00
01 → 01
10 → 11
11 → 10
2. گیت SWAP
این گیت مقدار دو کیوبیت را با هم جابجا میکند. اگر ورودی دو کیوبیت a و b باشد، خروجی آن به صورت b و a خواهد بود.
Entanglement (درهمتنیدگی)
درهمتنیدگی حالتی است که در آن کیوبیتها به گونهای به هم مرتبط میشوند که وضعیت یک کیوبیت به طور مستقیم با وضعیت کیوبیت دیگر وابسته است، حتی اگر فاصله زیادی بین آنها وجود داشته باشد. این ویژگی یکی از تفاوتهای اصلی بین محاسبات کلاسیک و کوانتومی است.
ایجاد درهمتنیدگی با استفاده از گیت هادامارد و CNOT
یک روش ساده برای ایجاد entanglement بین دو کیوبیت به صورت زیر است:
1. اعمال گیت هادامارد روی کیوبیت اول برای ایجاد حالت ابرموقعیت.
2. اعمال گیت CNOT با کیوبیت اول به عنوان کنترل و کیوبیت دوم به عنوان هدف.
این عملیات حالت entانگل شده زیر را ایجاد میکند:
|ψ⟩ = (1 / √2) (|00⟩ + |11⟩)
این بدان معناست که اگر کیوبیت اول را اندازهگیری کرده و مقدار آن 0 باشد، کیوبیت دوم نیز 0 خواهد بود و اگر کیوبیت اول برابر 1 باشد، کیوبیت دوم نیز 1 خواهد بود.
مثال از پیادهسازی entanglement در Qiskit
در ادامه، یک کد ساده برای ایجاد درهمتنیدگی بین دو کیوبیت را مشاهده میکنید:
from qiskit import QuantumCircuit, Aer, assemble
from qiskit.visualization import plot_histogram
# ایجاد مدار کوانتومی با 2 کیوبیت
qc = QuantumCircuit(2)
# اعمال گیت هادامارد روی کیوبیت اول
qc.h(0)
# اعمال گیت CNOT با کیوبیت 0 به عنوان کنترل و کیوبیت 1 به عنوان هدف
qc.cx(0, 1)
# اندازهگیری
qc.measure_all()
# اجرای مدار
backend = Aer.get_backend('qasm_simulator')
qobj = assemble(qc)
result = backend.run(qobj).result()
counts = result.get_counts()
# نمایش هیستوگرام نتایج
plot_histogram(counts)
توضیح کد
1. ابتدا یک مدار کوانتومی با دو کیوبیت تعریف شده است.
2. گیت هادامارد روی کیوبیت اول اعمال شده تا حالت ابرموقعیت ایجاد شود.
3. گیت CNOT روی دو کیوبیت اعمال شده تا entanglement ایجاد شود.
4. در نهایت، کیوبیتها اندازهگیری شده و نتیجه اجرا به صورت هیستوگرام نمایش داده میشود.
نتیجه اجرای کد
خروجی به صورت یک هیستوگرام خواهد بود که نشان میدهد حالات 00 و 11 با احتمال مساوی ظاهر میشوند، در حالی که حالات 01 و 10 اصلاً دیده نمیشوند. این نشاندهنده ایجاد موفقیتآمیز درهمتنیدگی بین دو کیوبیت است.
پارت بعدی:
در پارت ۹، با الگوریتم دیچک (Deutsch Algorithm) آشنا خواهیم شد که یکی از اولین الگوریتمهای کوانتومی است و نشان میدهد چگونه محاسبات کوانتومی میتوانند از محاسبات کلاسیک سریعتر باشند.
ادامه دارد...
برای بیشتر یاد گرفتن اینجا کلیک کن
❤3👍1
Forwarded from Python3
آموزش الگوریتمهای کوانتومی – پارت ۹: گیتهای چندکیوبیتی و درهمتنیدگی (Entanglement)
هدف پارت نهم
در این پارت، به بررسی گیتهای چندکیوبیتی و مفهوم درهمتنیدگی (Entanglement) میپردازیم که یکی از مهمترین ویژگیهای محاسبات کوانتومی است. درهمتنیدگی به ما این امکان را میدهد که با استفاده از گیتهای خاص، حالتهایی ایجاد کنیم که بین چند کیوبیت بهطور وابسته عمل میکنند.
گیت CNOT
یکی از مهمترین گیتهای دوکیوبیتی، گیت CNOT است که یک گیت کنترلی است. این گیت به این شکل عمل میکند:
- اگر کیوبیت کنترلی برابر با 0 باشد، کیوبیت هدف تغییر نمیکند.
- اگر کیوبیت کنترلی برابر با 1 باشد، کیوبیت هدف NOT میشود (حالتش برعکس میشود).
به زبان ساده:
ایجاد درهمتنیدگی با گیت CNOT و H
حالا میخواهیم با استفاده از گیت هادامارد (H) و گیت CNOT یک حالت درهمتنیده ایجاد کنیم. حالت درهمتنیده معروف Bell به شکل زیر ساخته میشود:
1. ابتدا هر دو کیوبیت در حالت اولیه |0⟩ هستند.
2. یک گیت هادامارد روی کیوبیت اول اعمال میکنیم:
3. سپس یک گیت CNOT روی هر دو کیوبیت اعمال میکنیم که کیوبیت اول بهعنوان کنترلی عمل میکند:
این حالت درهمتنیدگی کامل دو کیوبیت را نشان میدهد، به این معنی که اگر یکی از کیوبیتها را اندازهگیری کنیم، کیوبیت دیگر نیز بهطور آنی وضعیت متناظر را خواهد داشت.
مثال پیادهسازی در Qiskit
در اینجا، یک مدار ساده برای ایجاد حالت Bell را پیادهسازی میکنیم:
توضیح کد
1. ایجاد مدار:
مدار شامل دو کیوبیت و دو بیت کلاسیک است که برای ذخیره نتایج اندازهگیری استفاده میشوند.
2. اعمال گیت هادامارد:
گیت هادامارد روی کیوبیت 0 اعمال شده و آن را در حالت سوپریپوزیشن قرار میدهد.
3. اعمال گیت CNOT:
این گیت کیوبیت 1 را با توجه به وضعیت کیوبیت 0 تغییر میدهد و حالت درهمتنیده ایجاد میکند.
4. اندازهگیری:
کیوبیتها اندازهگیری شده و نتایج آنها در بیتهای کلاسیک ذخیره میشود.
5. نمایش نتیجه:
نتیجه شامل مقادیر اندازهگیریشده خواهد بود که بهطور معمول شامل حالتهای 00 و 11 است.
نتیجه اجرای کد
خروجی ممکن است به شکل زیر باشد:
این خروجی نشان میدهد که مدار کوانتومی بهدرستی حالت Bell را ایجاد کرده است.
تمرین برای شما:
1. مدار را بهگونهای تغییر دهید که به جای ایجاد حالت |00⟩ + |11⟩، حالت |01⟩ + |10⟩ ایجاد کند.
2. توضیح دهید که چگونه درهمتنیدگی در الگوریتمهای کوانتومی مانند الگوریتم شُر و الگوریتم گروور استفاده میشود.
پارت بعدی:
در پارت ۱۰، به بررسی تحلیل فوریه کوانتومی (QFT) و کاربرد آن در الگوریتمهای کوانتومی میپردازیم.
ادامه دارد...
برای بیشتر یاد گرفتن اینجا کلیک کن
هدف پارت نهم
در این پارت، به بررسی گیتهای چندکیوبیتی و مفهوم درهمتنیدگی (Entanglement) میپردازیم که یکی از مهمترین ویژگیهای محاسبات کوانتومی است. درهمتنیدگی به ما این امکان را میدهد که با استفاده از گیتهای خاص، حالتهایی ایجاد کنیم که بین چند کیوبیت بهطور وابسته عمل میکنند.
گیت CNOT
یکی از مهمترین گیتهای دوکیوبیتی، گیت CNOT است که یک گیت کنترلی است. این گیت به این شکل عمل میکند:
- اگر کیوبیت کنترلی برابر با 0 باشد، کیوبیت هدف تغییر نمیکند.
- اگر کیوبیت کنترلی برابر با 1 باشد، کیوبیت هدف NOT میشود (حالتش برعکس میشود).
به زبان ساده:
CNOT |00⟩ = |00⟩
CNOT |01⟩ = |01⟩
CNOT |10⟩ = |11⟩
CNOT |11⟩ = |10⟩
ایجاد درهمتنیدگی با گیت CNOT و H
حالا میخواهیم با استفاده از گیت هادامارد (H) و گیت CNOT یک حالت درهمتنیده ایجاد کنیم. حالت درهمتنیده معروف Bell به شکل زیر ساخته میشود:
1. ابتدا هر دو کیوبیت در حالت اولیه |0⟩ هستند.
2. یک گیت هادامارد روی کیوبیت اول اعمال میکنیم:
|ψ⟩ = H|0⟩ = 1/√2 * (|0⟩ + |1⟩)
3. سپس یک گیت CNOT روی هر دو کیوبیت اعمال میکنیم که کیوبیت اول بهعنوان کنترلی عمل میکند:
|ψ⟩ = 1/√2 * (|00⟩ + |11⟩)
این حالت درهمتنیدگی کامل دو کیوبیت را نشان میدهد، به این معنی که اگر یکی از کیوبیتها را اندازهگیری کنیم، کیوبیت دیگر نیز بهطور آنی وضعیت متناظر را خواهد داشت.
مثال پیادهسازی در Qiskit
در اینجا، یک مدار ساده برای ایجاد حالت Bell را پیادهسازی میکنیم:
from qiskit import QuantumCircuit, Aer, execute
# ایجاد یک مدار کوانتومی با 2 کیوبیت و 2 کلاسیک
qc = QuantumCircuit(2, 2)
# اعمال گیت هادامارد روی کیوبیت 0
qc.h(0)
# اعمال گیت CNOT با کیوبیت 0 بهعنوان کنترل و کیوبیت 1 بهعنوان هدف
qc.cx(0, 1)
# اندازهگیری کیوبیتها
qc.measure([0, 1], [0, 1])
# اجرای مدار روی شبیهساز
backend = Aer.get_backend('qasm_simulator')
result = execute(qc, backend, shots=1000).result()
# نمایش نتیجه
counts = result.get_counts()
print("نتایج اندازهگیری:", counts)
توضیح کد
1. ایجاد مدار:
مدار شامل دو کیوبیت و دو بیت کلاسیک است که برای ذخیره نتایج اندازهگیری استفاده میشوند.
2. اعمال گیت هادامارد:
گیت هادامارد روی کیوبیت 0 اعمال شده و آن را در حالت سوپریپوزیشن قرار میدهد.
3. اعمال گیت CNOT:
این گیت کیوبیت 1 را با توجه به وضعیت کیوبیت 0 تغییر میدهد و حالت درهمتنیده ایجاد میکند.
4. اندازهگیری:
کیوبیتها اندازهگیری شده و نتایج آنها در بیتهای کلاسیک ذخیره میشود.
5. نمایش نتیجه:
نتیجه شامل مقادیر اندازهگیریشده خواهد بود که بهطور معمول شامل حالتهای 00 و 11 است.
نتیجه اجرای کد
خروجی ممکن است به شکل زیر باشد:
نتایج اندازهگیری: {'00': 512, '11': 488}
این خروجی نشان میدهد که مدار کوانتومی بهدرستی حالت Bell را ایجاد کرده است.
تمرین برای شما:
1. مدار را بهگونهای تغییر دهید که به جای ایجاد حالت |00⟩ + |11⟩، حالت |01⟩ + |10⟩ ایجاد کند.
2. توضیح دهید که چگونه درهمتنیدگی در الگوریتمهای کوانتومی مانند الگوریتم شُر و الگوریتم گروور استفاده میشود.
پارت بعدی:
در پارت ۱۰، به بررسی تحلیل فوریه کوانتومی (QFT) و کاربرد آن در الگوریتمهای کوانتومی میپردازیم.
ادامه دارد...
برای بیشتر یاد گرفتن اینجا کلیک کن
❤4👍1
This media is not supported in your browser
VIEW IN TELEGRAM
کاربران ویندوز ۱۱ نگاه کنن😳
💻میدونستی میتونی توی ویندوز ۱۱ چندین
دسکتاپ داشته باشی؟؟🖥
کانال رو دنبال داشته باشید❤️
💻میدونستی میتونی توی ویندوز ۱۱ چندین
دسکتاپ داشته باشی؟؟🖥
کانال رو دنبال داشته باشید❤️
🔥4👍1
import os
import sys
def get_hidden_password(prompt="Enter your password: "):
password = ""
sys.stdout.write(prompt)
sys.stdout.flush()
while True:
char = sys.stdin.read(1)
if char == "\n":
break
elif char == "\b":
password = password[:-1]
else:
password += char
sys.stdout.write("*")
sys.stdout.flush()
return password
def main():
correct_password = "Amir_123_ka"
while True:
user_password = get_hidden_password()
if user_password == correct_password:
print("\nWelcome!")
break
else:
print("\nIncorrect password, please try again.")
if name == "main":
main()
برنامه پسورد با پایتون
🔥5
در حال ساخت برنامه paint
امید بدید😅❤️
امید بدید😅❤️
❤6👍1
و تمامممممممممممم
😁4
هر کس میتونه مثل برنامه من درست کنه و توی پیوی با کداش بفرسته
@Amir_123_ka
@Amir_123_ka
اگر میخواید یکم دوستاتون رو اذیت کنید کافیه کد زیر رو در قالب برنامه ویندوزی با Tkinter در بیارید😁:
(صفحه نمایش رو هر 1 ثانیه میچرخونه)
از کتابخانه time و rotatescreen استفاده شده که برای دومی نیازه از طریق pip نصب کنید:
```
display = rs.get_primary_display()
display.rotate_to(x)
صفحه نمایش رو به زاویه x درجه میچرخونه که x بر اساس اون پیمایشی که از طریق حلقه for بر روی لیست داره هستش و time.sleep(1) هر 1ثانیه اجرا میشه😁
(صفحه نمایش رو هر 1 ثانیه میچرخونه)
import time
import rotatescreen
import rotatescreen as rs
display = rs.get_primary_display()
listOfAngels = [90,180,270,0]
while True:
for x in listOfAngels:
display.rotate_to(x)
time.sleep(1)
از کتابخانه time و rotatescreen استفاده شده که برای دومی نیازه از طریق pip نصب کنید:
pip install rotate-screen
```
display = rs.get_primary_display()
کارش اینه میاد صفحه نمایش رو ایجاد میکنه
و بعد در listOfAngels زوایا مشخص شده که اولین مورد: 90 درجه عمودی،180 چرخش معکوس،،270درجه عمودی در سمت چپ و 0 در حالت افقی اولیه
یه حلقه while تعریف شده و تا زمانی که شرطش برقرار هست حلقه for داخلش بی نهایت تکرار میشه
display.rotate_to(x)
`
صفحه نمایش رو به زاویه x درجه میچرخونه که x بر اساس اون پیمایشی که از طریق حلقه for بر روی لیست داره هستش و time.sleep(1) هر 1ثانیه اجرا میشه😁
❤6