রিকারেন্স রিলেশন (Recurrence Relations)
ভোজের রান্নার এমন একটি রেসিপির কথা ভাবুন যা বলছে: "N জনের জন্য রান্না করতে, অতিথিদের দুই ভাগে ভাগ করুন, প্রতিটি ভাগের জন্য আলাদাভাবে রান্না করুন, তারপর দুই ভাগের খাবার একসাথে মেশান।" রেসিপিটি নিজেই নিজেকে নির্দেশ করছে! এই স্বয়ং-নির্দেশকারী (self-referencing) বিষয়টাই হলো অ্যালগরিদমের ক্ষেত্রে একটি রিকারেন্স রিলেশন (recurrence relation)।
যখন একটি রিকার্সিভ অ্যালগরিদম n আকারের একটি সমস্যাকে উপ-সমস্যায় (sub-problems) ভাগ করে এবং ফলাফলগুলো একত্রিত করে সমাধান করে, তখন এর চলন-সময় (running time) T(n) নির্ভর করে T(ছোট n) এর ওপর। একটি রিকারেন্স রিলেশন হলো সেই সমীকরণ যা এই নির্ভরতাকে ধারণ করে — এবং এর সমাধান থেকে আমরা চূড়ান্ত Big-O পেয়ে থাকি।
T(n) = aT(n/b) + f(n) পড়া
এটি ডিভাইড-অ্যান্ড-ভনকার (divide-and-conquer) এর আদর্শ টেমপ্লেট। a = আপনি কয়টি উপ-সমস্যা তৈরি করবেন। n/b = প্রতিটি উপ-সমস্যার আকার। f(n) = রিকার্সিভ কলের বাইরে করা কাজ (ভাগ করা, একত্রিত করা)।
মার্জ সর্ট: T(n) = 2T(n/2) + O(n) — দুটি ভাগ (a=2), প্রতিটি অর্ধেকের সমান আকারের (b=2), এর সাথে একত্রিত করার জন্য O(n) কাজ (f(n)=n)।
বাইনারি সার্চ: T(n) = T(n/2) + O(1) — একটি উপ-সমস্যা (a=1), আকারের অর্ধেক (b=2), শুধুমাত্র একটি তুলনা (f(n)=1)।
মাস্টার থিওরেম (The Master Theorem) — আপনার সহজ উপায়
মাস্টার থিওরেম T(n) = aT(n/b) + f(n) এর সমাধান করে f(n) কে "প্রাকৃতিক" রিকার্সনের খরচ n^(log_b a) এর সাথে তুলনা করে:
ক্ষেত্র ১ — রিকার্সন প্রভাবশালী: f(n) হলো n^(log_b a) এর চেয়ে ছোট। তাহলে T(n) = Θ(n^(log_b a))। বেশিরভাগ কাজ রিকার্সন ট্রির একেবারে গভীরে বা নিচে ঘটে থাকে।
ক্ষেত্র ২ — উভয়ই সমান: f(n) = Θ(n^(log_b a))। তাহলে T(n) = Θ(n^(log_b a) · log n)। ট্রির প্রতিটি স্তর সমান কাজ করে, তাই আমরা স্তরের সংখ্যা দিয়ে গুণ করি।
ক্ষেত্র ৩ — একত্রিত করা প্রভাবশালী: f(n) হলো n^(log_b a) এর চেয়ে বড় (একটি রেগুলারিটি শর্তসহ)। তাহলে T(n) = Θ(f(n))। বেশিরভাগ কাজ উপরের স্তরে ঘটে থাকে।
রিকার্সন ট্রি — ভিজ্যুয়াল ইনট্যুইশন
রিকার্সনটিকে একটি ট্রি হিসেবে আঁকুন। প্রতিটি নোড দেখায় যে ওই স্তরে কতটা নন-রিকার্সিভ কাজ করা হয়েছে। মার্জ সর্টের জন্য: স্তর ০-এ ১টি নোড O(n) কাজ করছে; স্তর ১-এ ২টি নোড প্রত্যেকে O(n/2) কাজ করছে = মোট O(n); স্তর ২-এ ৪টি নোড প্রত্যেকে O(n/4) কাজ করছে = মোট O(n)। প্রতিটি স্তর O(n) কাজ করছে, এবং O(log n) টি স্তর রয়েছে — তাই মোট খরচ হলো O(n log n)। এই ট্রিটি গুণফলকে দৃশ্যগতভাবে সহজ করে তোলে।
মার্জ সর্টের রিকারেন্স সমাধান — রিকার্সন ট্রি
Complexity
ছোট কুইজ
পড়া চালিয়ে যান