কম্পিউটার টিউটোরিয়াল

সি++-এ RLE ইটেরেটর (RLE Iterator)


মান লেযিয়ে একটি রান-লেংথ এনকোডেড সিকোয়েন্সের মাধ্যমে ইটারেট করার জন্য একটি ইটেরেটর তৈরি করতে হবে। ইটেরেটরটি RLEIterator(int[] A) কল করে ইনিশিয়ালাইজ করা হয়, যেখানে A একটি সিকোয়েন্সের রান-লেংথ এনকোডিং। অর্থাৎ সব জোড় i-এর জন্য, A[i] বলে A[i+1] মানটি সিকোয়েন্সে কতবার রিপিট হয়েছে। ইটেরেটর একটি ফাংশন সাপোর্ট করে -

  • next(int n): এই ফাংশন পরবর্তী nটি এলিমেন্ট (n >= 1) এক্সহাস্ট করবে এবং এইভাবে এক্সহাস্ট করা শেষ এলিমেন্টটি রিটার্ন করবে। যদি এক্সহাস্ট করার জন্য কোনো এলিমেন্ট না থাকে, -1 রিটার্ন করবে।

A = [3,8,0,9,2,5] দিয়ে শুরু করলে, এটি [8,8,8,5,5] সিকোয়েন্সের এনকোডিং। "তিনটি ৮, শূন্য ৯, দুটি ৫"। A দিয়ে ইনিশিয়ালাইজ করার পর next(2), next(1), next(1), next(2) কল করলে ফলাফল [8, 8, 5, -1]।

এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব -

  • ইনিশিয়ালাইজারে অ্যারে A এবং index := 0 সেট করুন

  • next() মেথড n ইনপুট নেবে, এটি নিচের মতো কাজ করবে -

    • যখন index < A.size() এবং n > A[index]

      • n := n - A[index], index := index + 2

    • যদি index >= A.size() হয়, -1 রিটার্ন করুন

    • A[index] := A[index] - n

    • A[index + 1] রিটার্ন করুন

নিচের বাস্তবায়নটি দেখে আরও ভালো বুঝতে পারবেন -

উদাহরণ

#include <bits/stdc++.h> using namespace std; class RLEIterator {    public:    vector <int> A;    int idx = 0;    RLEIterator(vector<int>& A) {       this->A = A;       idx = 0;    }    int next(int n) {       while(idx < A.size() && n > A[idx]){          n -= A[idx];          idx += 2;       }       if(idx >= A.size()) return -1;       A[idx] = A[idx] - n;       return A[idx + 1];    } }; main(){    vector<int> v = {3,8,0,9,2,5};    RLEIterator ob(v);    cout << (ob.next(2)) << endl;    cout << (ob.next(1)) << endl;    cout << (ob.next(1)) << endl;    cout << (ob.next(2)) << endl; }

ইনপুট

Initialize with [3,8,0,9,2,5] and call next(2), next(1), next(1), next(2)

আউটপুট

8 8 5 -1

  1. C++-এ বাইনারি সার্চ ট্রি ইটারেটর (Binary Search Tree Iterator)

  2. C++-এ বাইডিরেকশনাল ইটেরেটর (Bidirectional Iterators)

  3. C++-এ ইটেরেটর ইনভ্যালিডেশন (Iterator Invalidation)

  4. সি++-এ লেক্সিকোগ্রাফিকালি পরবর্তী পারমিউটেশন (Lexicographically Next Permutation)