Path: blob/main/translations/bn/ch-algorithms/deutsch-jozsa.ipynb
3855 views
Deutsch-Jozsa অ্যালগরিদম
এই বিভাগে, আমরা প্রথমে Deutsch-Jozsa সমস্যা এবং এটি সমাধান করার জন্য ক্লাসিক্যাল এবং কোয়ান্টাম অ্যালগরিদম উপস্থাপন করি। তারপরে আমরা কিস্কিট ব্যবহার করে কোয়ান্টাম অ্যালগরিদম বাস্তবায়ন করবএবং এটি একটি সিমুলেটর এবং ডিভাইসে চালাবো।
Deutsch-Jozsa অ্যালগরিদম, প্রথম রেফারেন্স [1]-এ প্রবর্তিত হয়েছিল, এটি একটি কোয়ান্টাম অ্যালগরিদমের প্রথম উদাহরণ যা সেরা ক্লাসিক্যাল অ্যালগরিদমের চেয়ে ভাল কাজ করে। এটি দেখিয়েছে যে একটি নির্দিষ্ট সমস্যার জন্য একটি কম্পিউটেশনাল টুল হিসাবে একটি কোয়ান্টাম কম্পিউটার ব্যবহার করার সুবিধা থাকতে পারে।
1.1 ডয়েচ-জোজসা সমস্যা
আমাদেরকে একটি লুকানো বুলিয়ান ফাংশন দেওয়া হয়েছে, যা ইনপুট হিসাবে বিটগুলির একটি স্ট্রিং নেয় এবং বা প্রদান করে, অর্থাৎ:
প্রদত্ত বুলিয়ান ফাংশনের বৈশিষ্ট্য হল এটি হয় সুষম বা ধ্রুবক হওয়ার নিশ্চয়তা। একটি ধ্রুবক ফাংশন যেকোনো ইনপুটের জন্য সমস্ত 'স বা সমস্ত 'স ফেরত দেয়, যখন একটি ভারসাম্যপূর্ণ ফাংশন সমস্ত ইনপুটের অর্ধেকের জন্য ' এবং বাকি অর্ধেকের জন্য 'স ফেরত দেয়। আমাদের কাজ হল প্রদত্ত ফাংশনটি সুষম বা ধ্রুবক কিনা তা নির্ধারণ করা।
মনে রাখবেন যে Deutsch-Jozsa সমস্যাটি একক বিট ডয়েচ সমস্যার একটি -বিট এক্সটেনশন।
1.2ক্লাসিক্যাল সমাধান
ক্লাসিকভাবে, সর্বোত্তম ক্ষেত্রে, ওরাকলের কাছে দুটি প্রশ্ন নির্ধারণ করতে পারে যে লুকানো বুলিয়ান ফাংশন, , ভারসাম্যপূর্ণ কিনা: যেমন আমরা যদি এবং , তাহলে আমরা জানি যে ফাংশনটি ভারসাম্যপূর্ণ কারণ আমরা দুটি ভিন্ন আউটপুট পেয়েছি।
সবচেয়ে খারাপ ক্ষেত্রে, যদি আমরা চেষ্টা করি প্রতিটি ইনপুটের জন্য একই আউটপুট দেখতে থাকি, তাহলে ধ্রুবক রয়েছে তা নিশ্চিত করার জন্য আমাদের সম্ভাব্য সমস্ত ইনপুটের অর্ধেক এবং একটি পরীক্ষা করতে হবে। যেহেতু সম্ভাব্য ইনপুটগুলির মোট সংখ্যা হল , এর অর্থ হল যে ট্রায়াল ইনপুট প্রয়োজন তা নিশ্চিত হতে যে সবচেয়ে খারাপ ক্ষেত্রে ধ্রুবক। উদাহরণস্বরূপ, একটি -বিট স্ট্রিংয়ের জন্য, যদি আমরা সম্ভাব্য সংমিশ্রণগুলির মধ্যে চেক করি, সমস্ত পেয়ে থাকি, তবুও এটি সম্ভব যে ইনপুট একটি প্রদান করে। এবং ভারসাম্যপূর্ণ। সম্ভবত, এটি একটি খুব অসম্ভাব্য ঘটনা। প্রকৃতপক্ষে, যদি আমরা ধারাবাহিকভাবে একই ফলাফল পাই, তাহলে আমরা সম্ভাব্যতা প্রকাশ করতে পারি যে ফাংশনটি ইনপুটগুলির একটি ফাংশন হিসাবে ধ্রুবক থাকে:
ParseError: KaTeX parse error: Expected 'EOF', got '&' at position 71: …textrm{for } 1 &̲lt; k \leq 2^{n…বাস্তবসম্মতভাবে, আমরা আমাদের ক্লাসিক্যাল অ্যালগরিদমকে প্রথম দিকে ছেঁটে ফেলতে বেছে নিতে পারি, বলুন যদি আমরা x%-এর বেশি আত্মবিশ্বাসী হতাম। কিন্তু যদি আমরা 100% আত্মবিশ্বাসী হতে চাই, তাহলে আমাদের ইনপুট চেক করতে হবে।
1.3 কোয়ান্টাম সমাধান
একটি কোয়ান্টাম কম্পিউটার ব্যবহার করে, আমরা ফাংশনে শুধুমাত্র একটি কল করার পরে 100% আত্মবিশ্বাসের সাথে এই সমস্যার সমাধান করতে পারি, তবে আমাদের কাছে ফাংশনটি কোয়ান্টাম ওরাকল হিসাবে বাস্তবায়িত আছে, যা থেকে , যেখানে যোগ মডিউল । নিচে Deutsch-Jozsa অ্যালগরিদমের জন্য জেনেরিক সার্কিট দেওয়া হল।

এখন, অ্যালগরিদটি ধাপে ধাপে করা যাক:
- দুটি কোয়ান্টাম রেজিস্টার প্রস্তুত করুন। প্রথমটি হল একটি -qubit রেজিস্টার এ আরম্ভ করা হয়েছে এবং দ্বিতীয়টি হল এ আরম্ভ করা এক-কুবিট রেজিস্টার:
যেহেতু প্রতিটি এর জন্য হয় বা ।
যেখানে হল বিটওয়াইজ পণ্যের সমষ্টি।
1.4 কেন এটি কাজ করে?
ধ্রুবক ওরাকল
ওরাকল যখন ধ্রুবক থাকে , তখন ইনপুট কিউবিটগুলিতে এটির কোন প্রভাব থাকে না (একটি বিশ্বব্যাপী পর্যায় পর্যন্ত), এবং ওরাকলকে জিজ্ঞাসা করার আগে এবং পরে কোয়ান্টাম অবস্থা একই থাকে। যেহেতু H-গেট তার নিজস্ব বিপরীত, ধাপ 4-এ আমরা প্রথম রেজিস্টারে -এর প্রাথমিক কোয়ান্টাম অবস্থা পেতে ধাপ 2কে বিপরীত করি।
$$ H^{\otimes n}
\tfrac{1}{\sqrt{2^n}} \quad \xrightarrow{\text{after } U_f} \quad H^{\otimes n}\tfrac{1}{\sqrt{2^n}}
সুষম ওরাকল
ধাপ 2 এর পরে, আমাদের ইনপুট রেজিস্টার গণনাগত ভিত্তিতে সমস্ত রাজ্যের সমান সুপারপজিশন। যখন ওরাকল ভারসাম্যপূর্ণ হয়, তখন ফেজ কিকব্যাক ঠিক অর্ধেক এই অবস্থাতে একটি নেতিবাচক পর্যায় যোগ করে:
$$ U_f \tfrac{1}{\sqrt{2^n}}
\tfrac{1}{\sqrt{2^n}} $$
ওরাকলকে জিজ্ঞাসা করার পরে কোয়ান্টাম অবস্থা ওরাকলকে জিজ্ঞাসা করার আগে কোয়ান্টাম অবস্থার অর্থোগোনাল। এইভাবে, ধাপ 4-এ, H-গেটগুলি প্রয়োগ করার সময়, আমাদের অবশ্যই একটি কোয়ান্টাম অবস্থার সাথে শেষ করতে হবে যা এর অর্থোগোনাল। এর মানে আমাদের কখনই অল-জিরো স্টেট পরিমাপ করা উচিত নয়।
2. উদাহরণ
চলুন দুই বিট ব্যালেন্সড ফাংশনের জন্য একটি নির্দিষ্ট উদাহরণ দেওয়া যাক:
একটি দুই-বিট ফাংশন বিবেচনা করুন যেমন
এই দুই-বিট ওরালসের সংশ্লিষ্ট ফেজ ওরাকল হল
- দুটি কিউবিটের প্রথম রেজিস্টার এবং দ্বিতীয় রেজিস্টার qubit এ শুরু করা হয়
(উল্লেখ্য যে আমরা কিউবিট সূচী করতে সাবস্ক্রিপ্ট 0, 1, এবং 2 ব্যবহার করছি। "01" এর একটি সাবস্ক্রিপ্ট 0 এবং 1 কিউবিট ধারণকারী রেজিস্টারের অবস্থা নির্দেশ করে)
আপনি নীচের উইজেট ব্যবহার করে অনুরূপ উদাহরণ চেষ্টা করতে পারেন. এইচ-গেট এবং ওরাকল যোগ করতে বোতাম টিপুন, সেলটি পুনরায় চালান এবং/অথবা বিভিন্ন ওরাকল চেষ্টা করার জন্য case="constant" সেট করুন।
3. কোয়ান্টাম ওরাকল তৈরি করা
আসুন কিছু ভিন্ন উপায় দেখি আমরা একটি কোয়ান্টাম ওরাকল তৈরি করতে পারি।
একটি ধ্রুবক ফাংশনের জন্য, এটি সহজ:
1. যদি f(x) = 0 হয়, তাহলে রেজিস্টার 2-এর qubit-এ গেট প্রয়োগ করুন।
2. যদি f(x) = 1 হয়, তাহলে রেজিস্টার 2-এর qubit-এ গেট প্রয়োগ করুন।
একটি ভারসাম্যপূর্ণ ফাংশন জন্য, আমরা তৈরি করতে পারেন অনেক বিভিন্ন সার্কিট আছে. আমাদের সার্কিট ভারসাম্যের গ্যারান্টি দেওয়ার একটি উপায় হল রেজিস্টার 1-এ প্রতিটি কিউবিটের জন্য একটি সিএনওটি সম্পাদন করা, রেজিস্টার 2-এর কিউবিটকে লক্ষ্য হিসাবে। উদাহরণ স্বরূপ:
উপরের ছবিতে, উপরের তিনটি কিউবিট ইনপুট রেজিস্টার গঠন করে এবং নীচের কিউবিটটি আউটপুট রেজিস্টার। নিচের টেবিলে আমরা দেখতে পাচ্ছি কোন ইনপুট স্টেট কোন আউটপুট দেয়:
| ইনপুট বলে যে আউটপুট 0 | ইনপুট স্টেটস যে আউটপুট 1 |
|---|---|
| 000 | 001 |
| 011 | 100 |
| 101 | 010 |
| 110 | 111 |
আমরা এক্স-গেটগুলিতে নির্বাচিত নিয়ন্ত্রণগুলি মোড়ানোর মাধ্যমে ভারসাম্য বজায় রেখে ফলাফলগুলি পরিবর্তন করতে পারি। উদাহরণস্বরূপ, সার্কিট এবং নীচের ফলাফল টেবিল দেখুন:
| ইনপুট বলে যে আউটপুট 0 | ইনপুট বলে যে আউটপুট 1 |
|---|---|
| 001 | 000 |
| 010 | 011 |
| 100 | 101 |
| 111 | 110 |
এর পরে, আমরা আমাদের ওরাকলের জন্য ইনপুট রেজিস্টারের আকার সেট করি:
এর পরে, আমরা একটি সুষম ওরাকল তৈরি করি। যেমনটি আমরা বিভাগ 1b-এ দেখেছি, আমরা প্রতিটি ইনপুট কিউবিটকে নিয়ন্ত্রণ হিসাবে এবং আউটপুট বিটকে লক্ষ্য হিসাবে CNOTs সম্পাদন করে একটি ভারসাম্যপূর্ণ ওরাকল তৈরি করতে পারি। আমরা এক্স-গেটগুলিতে কিছু নিয়ন্ত্রণ মোড়ানোর মাধ্যমে 0 বা 1 দেওয়ার ইনপুট স্টেটগুলি পরিবর্তন করতে পারি। আসুন প্রথমে দৈর্ঘ্যের একটি n স্ট্রিং বেছে নেওয়া যাক যা নির্দেশ করে যে কোনটি মোড়ানো হবে:
এখন আমাদের কাছে এই স্ট্রিংটি রয়েছে, আমরা এটিকে আমাদের এক্স-গেট স্থাপনের জন্য একটি কী হিসাবে ব্যবহার করতে পারি। আমাদের সার্কিটের প্রতিটি কিউবিটের জন্য, আমরা একটি X-গেট রাখি যদি b_str এ সংশ্লিষ্ট সংখ্যা 1 হয়, অথবা অঙ্কটি 0 হলে কিছুই করি না।
এর পরে, আমরা প্রতিটি ইনপুট কিউবিটকে নিয়ন্ত্রণ হিসাবে এবং আউটপুট কিউবিটকে লক্ষ্য হিসাবে ব্যবহার করে আমাদের নিয়ন্ত্রিত-নট গেটগুলি করি:
অবশেষে, এক্স-গেটগুলিতে নিয়ন্ত্রণগুলি মোড়ানো শেষ করতে আমরা দুটি কক্ষ থেকে কোডটি পুনরাবৃত্তি করি:
এর পরে, এর ওরাকল প্রয়োগ করা যাক। এখানে আমরা উপরে তৈরি করা balanced_oracle প্রয়োগ করি:
অবশেষে, আমরা -ইনপুট কিউবিটগুলিতে H-গেটগুলি সম্পাদন করি এবং আমাদের ইনপুট রেজিস্টার পরিমাপ করি:
চলুন আউটপুট দেখিঃ
আমরা উপরের ফলাফলগুলি থেকে দেখতে পাচ্ছি যে আমাদের 000 পরিমাপের 0% সম্ভাবনা রয়েছে। এটি সঠিকভাবে ভবিষ্যদ্বাণী করে যে ফাংশনটি ভারসাম্যপূর্ণ।
4.4 সাধারণ সার্কিট
নীচে, আমরা একটি সাধারণ ফাংশন প্রদান করি যা ডয়েচ-জোজসা ওরাকল তৈরি করে এবং তাদের কোয়ান্টাম গেটে পরিণত করে। এটি case লাগে, (হয় 'balanced' বা ' constant ', এবং n , ইনপুট রেজিস্টারের আকার:
আসুন একটি ফাংশন তৈরি করি যা এই ওরাকল গেটটি নেয় এবং এটিতে ডয়েচ-জোজসা অ্যালগরিদম সম্পাদন করে:
অবশেষে, আসুন অ্যালগরিদমের সাথে খেলার জন্য এই ফাংশনগুলি ব্যবহার করি:
এবং এই সার্কিট চালানোর ফলাফল দেখুন:
আমরা দেখতে পাচ্ছি, সবচেয়ে সম্ভাব্য ফলাফল হল 1111 । অন্যান্য ফলাফলগুলি কোয়ান্টাম গণনার ত্রুটির কারণে।
6. সমস্যা
আপনি একটি ভিন্ন ফর্ম একটি সুষম বা ধ্রুবক ওরাকল তৈরি করতে সক্ষম?
ফাংশন
dj_problem_oracle(নীচে) একটি গেট আকারেn = 4এর জন্য একটি Deutsch-Jozsa oracle প্রদান করে। গেটটি ইনপুট হিসাবে 5 কিউবিট নেয় যেখানে চূড়ান্ত qubit (q_4) হল আউটপুট qubit (উপরের ওরাকলের উদাহরণ হিসাবে)। আপনিdj_problem_oracle1 এবং 5 এর মধ্যে বিভিন্ন পূর্ণসংখ্যা দিয়ে বিভিন্ন ওরাকল পেতে পারেন। প্রতিটি ওরাকল ভারসাম্যপূর্ণ বা ধ্রুবক কিনা তা নির্ধারণ করতে Deutsch-Jozsa অ্যালগরিদম ব্যবহার করুন ( দ্রষ্টব্য: এটি অত্যন্ত সুপারিশ করা হয় যে আপনি একটি বাস্তব ডিভাইসের পরিবর্তেaer_simulatorব্যবহার করে এই উদাহরণটি ব্যবহার করে দেখুন) .
7. References
David Deutsch and Richard Jozsa (1992). "Rapid solutions of problems by quantum computation". Proceedings of the Royal Society of London A. 439: 553–558. doi:10.1098/rspa.1992.0167.
R. Cleve; A. Ekert; C. Macchiavello; M. Mosca (1998). "Quantum algorithms revisited". Proceedings of the Royal Society of London A. 454: 339–354. doi:10.1098/rspa.1998.0164.