হ্যাঁ, আমি বলব যে কোনও গুরুতর প্রোগ্রামারটির জন্য গণ্য জটিলতা সম্পর্কে কিছু জানা জরুরি। যতক্ষণ না আপনি বিশাল ডেটা সেটগুলির সাথে ডিল করছেন না আপনি জটিলতা না জেনে ভাল হবেন, তবে আপনি যদি এমন একটি প্রোগ্রাম লিখতে চান যা গুরুতর সমস্যাগুলি মোকাবেলা করে আপনার প্রয়োজন হয়।
আপনার নির্দিষ্ট ক্ষেত্রে, সংযুক্ত উপাদানগুলি অনুসন্ধানের আপনার উদাহরণটি নোডের গ্রাফের জন্য কাজ করতে পারে । তবে, আপনি যদি 100.000 নোড সহ একটি গ্রাফ চেষ্টা করে থাকেন তবে আপনার প্রভাষকের অ্যালগরিদম সম্ভবত এটি 1 সেকেন্ডে পরিচালনা করতে পারত, যখন আপনার অ্যালগরিদমটি (জটিলতাটি কতটা খারাপ ছিল তার উপর নির্ভর করে) 1 ঘন্টা, 1 দিন, এমনকি এমনকি 1 অনন্তকালও গ্রহণ করেছিল।100100.000
আমাদের অ্যালগরিদম কোর্সে শিক্ষার্থীরা কিছুটা সাধারণ ভুল করে তা এই জাতীয় অ্যারেতে পুনরাবৃত্তি হয়:
while array not empty
examine first element of array
remove first element from array
এটি সর্বাধিক সুন্দর কোড নাও হতে পারে তবে একটি জটিল প্রোগ্রামে প্রোগ্রামার এটি সম্পর্কে অবহিত না হয়ে এর মতো কিছু প্রদর্শিত হতে পারে। এখন, এই প্রোগ্রামে সমস্যা কি?
ধরুন আমরা এটি উপাদানগুলির একটি ডেটা সেটটিতে চালাই । নিম্নলিখিত প্রোগ্রামের তুলনায়, পূর্ববর্তী প্রোগ্রামটি চলবে 50.000 ধীর গতিতে।100.00050.000
while array not empty
examine last element of array
remove last element from array
আমি আশা করি আপনি সম্মত হন যে আপনার প্রোগ্রামটি গুণ দ্রুত চালিত করার জ্ঞান থাকা সম্ভবত কোনও প্রোগ্রামারের পক্ষে একটি গুরুত্বপূর্ণ বিষয়। দুটি প্রোগ্রামের মধ্যে পার্থক্য বোঝার জন্য জটিলতা তত্ত্ব সম্পর্কে কিছু প্রাথমিক জ্ঞান এবং আপনি যে ভাষায় প্রোগ্রামিং করছেন সেগুলির বিশদ সম্পর্কে কিছুটা জ্ঞান প্রয়োজন।50.000
আমার সিউডোকোড ভাষায়, "অ্যারের থেকে একটি উপাদান সরিয়ে ফেলা" সমস্ত উপাদানকে বাম থেকে একটি অবস্থান সরিয়ে ফেলা উপাদানটির ডানদিকে স্থানান্তরিত করে। এটি কেবলমাত্র 1 টি উপাদানের সাথে ইন্টারঅ্যাক্ট করতে হবে তা করার জন্য এটি সর্বশেষ উপাদানটিকে একটি অপারেশন সরিয়ে দেয় । প্রথম উপাদান মুছে ফেলার পদ্ধতি হল হে ( ঢ ) প্রথম উপাদান আমরা সব অন্যান্য নামান প্রয়োজন পরিষ্কার করার জন্য যেহেতু এন - 1 পাশাপাশি বাম এক অবস্থানে রয়েছে এমন উপাদানগুলির।O(1)O(n)n−1
জটিলতার একটি খুব প্রাথমিক অনুশীলন হ'ল প্রথম প্রোগ্রামটি 1 করবে তা প্রমাণ করাঅপারেশন যখন দ্বিতীয় প্রোগ্রামটি কেবলএনক্রিয়াকলাপব্যবহারকরে। আপনি যদিএন=100.000প্লাগ করেনতবে দেখতে পাবেন একটি প্রোগ্রাম অন্যটির চেয়ে মারাত্মকভাবে কার্যকর efficient12n2nn=100.000
এটি কেবল একটি খেলনার উদাহরণ তবে এর মধ্যে দুটি প্রোগ্রামের মধ্যে পার্থক্য বলতে জটিলতার প্রাথমিক ধারণাটি প্রয়োজন, এবং যদি আপনি প্রকৃতপক্ষে আরও জটিল প্রোগ্রামটি ডিবাগ / অপ্টিমাইজ করার চেষ্টা করছেন তবে এই ভুলটি খুঁজে পেতে এটি আরও বৃহত্তর বোঝার দরকার পড়ে বাগ যেখানে আছে। কারণ এই ফ্যাশনে একটি অ্যারে থেকে কোনও উপাদান সরানোর মতো একটি ভুল কোডের বিমূর্ততা দ্বারা খুব ভালভাবে আড়াল করা যেতে পারে।
সমস্যা সমাধানের জন্য দুটি পদ্ধতির তুলনা করার সময় জটিলতার বিষয়ে ভাল বোঝাপড়া করাও সহায়তা করে। ধরুন আপনি নিজেরাই সংযুক্ত উপাদানগুলির সমস্যা সমাধানের জন্য দুটি ভিন্ন পদ্ধতির সাথে নিয়ে এসেছেন: তাদের মধ্যে সিদ্ধান্ত নেওয়ার জন্য এটি খুব কার্যকর হবে যদি আপনি (দ্রুত) তাদের জটিলতার অনুমান করতে পারেন এবং আরও ভালটি বেছে নিতে পারেন।