reduceLeft, reduceRight, এবং Recursive Reductions

Reducers এবং Folds (রিডিউসারস এবং ফোল্ডস) - স্কালা কালেকশন (Scala Collections) - Computer Programming

297

reduceLeft, reduceRight, এবং Recursive Reductions (রিকার্সিভ রিডাকশন) হল কালেকশনের উপাদানগুলির উপর অপারেশন করার শক্তিশালী ফাংশনাল প্রোগ্রামিং কৌশল। এই ফাংশনগুলির মূল লক্ষ্য হল একটি বড় কালেকশন (যেমন লিস্ট) এর উপাদানগুলিকে একত্রিত করে একটি একক মানে রূপান্তর করা, এবং এগুলোর মধ্যে কিছু পার্থক্যও রয়েছে। চলুন, এগুলির ব্যাখ্যা এবং উদাহরণ দেখা যাক।


১. reduceLeft ফাংশন

reduceLeft একটি লজিকাল অপারেশন যা একটি কালেকশনের উপাদানগুলির উপর বাম দিক থেকে (left to right) একটি নির্দিষ্ট বাইনারি ফাংশন প্রয়োগ করে একটি একক ফলাফল তৈরি করে। এতে প্রথম দুটি উপাদান নিয়ে অপারেশন করা হয়, তারপর তার সাথে পরবর্তী উপাদান যোগ করা হয়, এবং এই প্রক্রিয়া শেষ উপাদান পর্যন্ত চলতে থাকে।

উদাহরণ:

val numbers = List(1, 2, 3, 4, 5)

// reduceLeft: বাম দিক থেকে যোগফল বের করা
val sumLeft = numbers.reduceLeft((x, y) => x + y)
println(sumLeft)  // 15

এখানে, reduceLeft ফাংশনটি বাম থেকে ডানে (left to right) প্রতিটি উপাদানকে যোগ করে এবং ফলস্বরূপ 15 প্রদান করে।

২. reduceRight ফাংশন

reduceRight ফাংশনটি reduceLeft এর বিপরীত। এটি একটি কালেকশনের উপাদানগুলির উপর ডান দিক থেকে (right to left) একটি নির্দিষ্ট বাইনারি ফাংশন প্রয়োগ করে একটি একক মান তৈরি করে।

উদাহরণ:

val numbers = List(1, 2, 3, 4, 5)

// reduceRight: ডান দিক থেকে যোগফল বের করা
val sumRight = numbers.reduceRight((x, y) => x + y)
println(sumRight)  // 15

এখানে, reduceRight ফাংশনটি ডান থেকে বামে (right to left) প্রতিটি উপাদানকে যোগ করে এবং ফলস্বরূপ 15 প্রদান করে। তবে, এই ক্ষেত্রে, এখানে কোন পার্থক্য নেই কারণ যোগফল সমান থাকবে, কিন্তু কিছু ফাংশন বা অপারেশনে (যেমন গুণফল, ভিন্ন বাইনারি অপারেশন) পার্থক্য হতে পারে।

পার্থক্য

বৈশিষ্ট্যreduceLeftreduceRight
অপারেশন প্রক্রিয়াবাম দিক থেকে ডানে (left to right) অপারেশন করেডান দিক থেকে বামে (right to left) অপারেশন করে
ফলাফলে পার্থক্যসাধারণত, যোগফল বা গুণফল ফাংশনে পার্থক্য হয় না, তবে কিছু ক্ষেত্রে (যেমন গুণফল, স্ট্রিং কনকাটেনেশন) পার্থক্য আসতে পারে।কিছু ফাংশনে পার্থক্য হতে পারে (যেমন স্ট্রিং কনকাটেনেশন, তালিকা উল্টো করা)।

৩. Recursive Reductions (রিকার্সিভ রিডাকশন)

Recursive Reductions হল একটি রিকার্সিভ প্রক্রিয়া যা একটি কালেকশনের উপাদানগুলিকে একত্রিত করে একটি একক মানে রূপান্তর করতে ব্যবহৃত হয়। এটি সাধারাণত একটি ছোট সমস্যাকে সমাধান করার জন্য বড় সমস্যাকে ভাঙতে সাহায্য করে। স্কালাতে, রিকার্সন একটি ফাংশনকে নিজেই নিজে কল করার প্রক্রিয়া।

উদাহরণ (ফ্যাক্টোরিয়াল):

def factorial(n: Int): Int = {
  if (n <= 1) 1
  else n * factorial(n - 1)
}

println(factorial(5))  // 120

এখানে, factorial ফাংশনটি রিকার্সিভভাবে নিজেকে কল করে এবং একটি একক মান তৈরি করছে।

উদাহরণ (লিস্টের উপাদান যোগফল):

def sumList(xs: List[Int]): Int = xs match {
  case Nil => 0
  case head :: tail => head + sumList(tail)
}

val numbers = List(1, 2, 3, 4, 5)
println(sumList(numbers))  // 15

এখানে, sumList ফাংশনটি একটি লিস্টের উপাদানগুলোকে রিকার্সিভভাবে যোগফল করছে। এটি রিকার্সন ব্যবহার করে লিস্টের প্রতিটি উপাদান একে একে যোগ করছে।

যখন রিকার্সন ব্যবহার করবেন:

  • যখন আপনি একটি বড় সমস্যা ছোট ছোট উপ-সমস্যায় ভাগ করে সমাধান করতে চান।
  • যখন আপনি একাধিক উপাদান বা উপসেটের উপর কিছু একক সিদ্ধান্ত নিতে চান (যেমন যোগফল, গুণফল, ফিল্টারিং ইত্যাদি)।

সারাংশ

  • reduceLeft এবং reduceRight হল লিনিয়ার রিডাকশন অপারেশন যা কালেকশনের উপাদানগুলির উপর একত্রিত করে একটি একক ফলাফল তৈরি করে, কিন্তু এগুলির মধ্যে একমাত্র পার্থক্য হল যে, এগুলি উপাদানগুলিকে বাম থেকে ডানে বা ডান থেকে বামে প্রক্রিয়া করে।
  • Recursive Reductions হল রিকার্সিভ অপারেশন যা একটি সমস্যাকে ছোট ছোট অংশে বিভক্ত করে সমাধান করে এবং এই ধরনের অপারেশনগুলি সাধারণত ছোট সমস্যা সমাধানে কার্যকরী।
Content added By
Promotion

Are you sure to start over?

Loading...