এমন একটি প্রোগ্রাম লিখুন (বা ফাংশন) যা এটি পরিচালিত হয় তার উপর নির্ভর করে চারটি সাধারণ বড় ও টাইম জটিলতা প্রদর্শন করে। কোন ফর্ম এটা একটি ধনাত্মক পূর্ণসংখ্যা এন আপনি অনুমান হতে পারে কম 2 হয় লাগে 31 ।
প্রোগ্রামটি যখন আসল আকারে চালিত হয় তখন এর ধ্রুবক জটিলতা থাকা উচিত । অর্থাৎ জটিলতাটি Θ (1) বা সমতুল্য, (1 ^ N) হওয়া উচিত ।
প্রোগ্রামটি যখন বিপরীত হয় এবং চালিত হয় তখন এর লিনিয়ার জটিলতা থাকা উচিত । অর্থাৎ জটিলতাটি Θ (এন) বা সমতুল্য Θ (এন ^ 1) হওয়া উচিত ।
(যেহেতু বিপরীত হয়েছেN^1
এটি বোঝায়1^N
।)যখন প্রোগ্রাম দ্বিগুণ , অর্থাৎ নিজেই ঘনিভূত, এবং চালানোর এটা থাকা উচিত সূচকীয় জটিলতা, নির্দিষ্টভাবে 2 এন । অর্থাৎ জটিলতাটি Θ (2 ^ N) হওয়া উচিত ।
(যেহেতু এই জ্ঞান করে তোলে2
মধ্যে2^N
দ্বিগুণ1
মধ্যে1^N
।)প্রোগ্রামটি দ্বিগুণ হয়ে গেলে এবং বিপরীত হয়ে চালিত হলে এর বহুপাক্ষিক জটিলতা হওয়া উচিত , বিশেষত এন 2 । অর্থাৎ জটিলতাটি Θ (N ^ 2) হওয়া উচিত ।
(যেহেতু বিপরীত হয়েছেN^2
এটি বোঝায়2^N
।)
এই চারটি কেসই আপনার পরিচালনা করতে হবে।
নোট করুন যে নির্ভুলতার জন্য আমি বড় ও-র পরিবর্তে বড় থিটা (Θ) স্বরলিপি ব্যবহার করছি কারণ আপনার প্রোগ্রামগুলির রানটাইমগুলি প্রয়োজনীয় জটিলতার দ্বারা উপরের এবং নীচে উভয়ভাবে আবদ্ধ হওয়া আবশ্যক। অন্যথায় কেবল ও (1) এ একটি ফাংশন লিখলে চারটি পয়েন্টই সন্তুষ্ট হবে। এখানে উপদ্রবটি বোঝা খুব বেশি গুরুত্বপূর্ণ নয়। মূলত, যদি আপনার প্রোগ্রামটি কিছু ধ্রুবক কে-এর জন্য কে * ফ (এন) অপারেশন করে থাকে তবে সম্ভবত এটি Θ (চ (এন)) এ হতে পারে।
উদাহরণ
যদি আসল প্রোগ্রামটি হত
ABCDE
তারপরে এটি চালানোর জন্য ধ্রুব সময় নেওয়া উচিত। অর্থাৎ ইনপুট এন 1 বা 2147483647 (2 31 -1) বা এর মধ্যে কোনও মানই হোক না কেন, এটি প্রায় একই পরিমাণে সমাপ্ত হওয়া উচিত।
প্রোগ্রামটির বিপরীত সংস্করণ
EDCBA
এন এর ক্ষেত্রে রৈখিক সময় নেওয়া উচিত, এটি সমাপ্ত হতে সময়টি প্রায় N এর সাথে আনুপাতিক হওয়া উচিত N সুতরাং এন = 1 কমপক্ষে সময় নেয় এবং এন = 2147483647 সবচেয়ে বেশি সময় নেয়।
প্রোগ্রামটির দ্বিগুণ সংস্করণ
ABCDEABCDE
এন এর ক্ষেত্রে দ্বি-থেকে-এন সময় নেওয়া উচিত That অর্থাৎ, এটি শেষ হতে সময়টি প্রায় 2 এন এর সমানুপাতিক হওয়া উচিত । সুতরাং যদি এন = 1 প্রায় এক সেকেন্ডের মধ্যে শেষ হয় তবে এন = 60 মহাবিশ্বের সমাপ্ত হতে আরও বেশি সময় লাগবে। (না, আপনি এটি পরীক্ষা করতে হবে না।)
প্রোগ্রামটির দ্বিগুণ এবং বিপরীত সংস্করণ
EDCBAEDCBA
এন এর ক্ষেত্রে স্কোয়ারড সময় নেওয়া উচিত, এটি যে সময়টি শেষ করতে সময় লাগে এটি N * N এর সাথে সমানুপাতিক হওয়া উচিত। সুতরাং যদি এন = 1 প্রায় এক সেকেন্ডে সমাপ্ত হয়, এন = 60 সমাপ্ত হতে প্রায় এক ঘন্টা সময় নিতে পারে।
বিস্তারিত
আপনাকে দেখানোর বা তর্ক করতে হবে যে আপনার প্রোগ্রামগুলি যে জটিলতায় আপনি বলছেন তা চলছে। কিছু টাইমিং ডেটা দেওয়া একটি ভাল ধারণা তবে তাত্ত্বিকভাবে জটিলতা কেন সঠিক তা বোঝানোর চেষ্টা করুন।
এটি ঠিক আছে যদি অনুশীলনে আপনার প্রোগ্রামগুলির সময়গুলি তাদের জটিলতার (অথবা এমনকি নির্বিচারবাদী) পুরোপুরি প্রতিনিধিত্ব না করে। যেমন ইনপুট N + 1 কখনও কখনও এন এর চেয়ে দ্রুত চলতে পারে
আপনি যে পরিবেশে আপনার প্রোগ্রামগুলি চালাচ্ছেন সে বিষয়টি গুরুত্বপূর্ণ। আপনি কীভাবে জনপ্রিয় ভাষাগুলি কখনই অ্যালগরিদমে ইচ্ছাকৃতভাবে সময় নষ্ট করেন না সে সম্পর্কে আপনি প্রাথমিক অনুমানগুলি তৈরি করতে পারেন তবে উদাহরণস্বরূপ, আপনি যদি জাভাগুলির নির্দিষ্ট সংস্করণটি দ্রুত বাছাই করা অ্যালগরিদমের পরিবর্তে বুদ্বুদ সাজানোর বিষয়টি জানেন তবে আপনার যদি কোনও বাছাই করা হয় তবে তা বিবেচনায় নেওয়া উচিত ।
এখানে সমস্ত জটিলতার জন্য ধরে নেওয়া যাক আমরা সবচেয়ে খারাপ-পরিস্থিতি সম্পর্কিত পরিস্থিতিতে কথা বলছি , সেরা-ক্ষেত্রে বা গড়-কেস নয়।
প্রোগ্রামগুলির স্পেস জটিলতা কোনও বিষয় নয়, কেবল সময়ের জটিলতা।
প্রোগ্রামগুলি কিছু আউটপুট করতে পারে। এটি কেবল গুরুত্বপূর্ণ যে তারা ইতিবাচক পূর্ণসংখ্যক N গ্রহণ করে এবং সঠিক সময়ের জটিলতা রয়েছে।
মন্তব্য এবং মাল্টলাইন প্রোগ্রাম অনুমোদিত। (আপনি ধরে নিতে পারেন উইন্ডোজ সামঞ্জস্যের জন্য
\r\n
বিপরীত is\r\n
বিগ হে রিমাইন্ডার
দ্রুত থেকে ধীরে ধীরে এটি O(1), O(N), O(N^2), O(2^N)
(উপরে অর্ডার 1, 2, 4, 3)।
ধীর শর্তাবলী সর্বদা আধিপত্য, যেমন O(2^N + N^2 + N) = O(2^N)
।
O(k*f(N)) = O(f(N))
ধ্রুবক কে। তাই O(2) = O(30) = O(1)
এবং O(2*N) = O(0.1*N) = O(N)
।
মনে রাখবেন O(N^2) != O(N^3)
এবং O(2^N) != O(3^N)
।
স্কোরিং
এটি নরমাল কোড গল্ফ। সংক্ষিপ্ততম আসল প্রোগ্রাম (ধ্রুবক এক সময়) বাইট জিতেছে।
n = input(); for i in xrange(n): pass
তাত্পর্যপূর্ণ জটিলতা রয়েছে, কারণ এটি 2 ** k
পদক্ষেপ নেয় , যেখানে k = log_2(n)
ইনপুট আকার। নাটকীয়ভাবে প্রয়োজনীয়তাগুলি পরিবর্তন করার কারণে এটি কেস কিনা তা আপনার স্পষ্ট করা উচিত।