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

C++-এ কাউন্টার ইনক্রিমেন্টের জন্য অ্যামোর্টাইজড অ্যানালিসিস

অ্যামোর্টাইজড অ্যানালিসিস অপারেশন的一系列-এর জন্য রানটাইম নির্ধারণে ব্যবহৃত হয়, গড় সময় যা সিকোয়েন্সটি নেয়। এটি অ্যালগরিদমের গড় কেস অ্যানালিসিস হিসেবে বিবেচনা করা যাবে না কারণ এটি সবসময় গড় কেস সিনারিও নেয় না। কিছু কেস ওৰ্স্ট-কেস অ্যানালিসিস হিসেবে ঘটে। তাই অ্যামোর্টাইজড অ্যানালিসিসকে মাল্টিপল অপারেশন的一系列-এর জন্য ওৰ্স্ট-কেস অ্যানালিসিস হিসেবে বিবেচনা করা যেতে পারে। এখানে প্রতিটি অপারেশনের কস্ট ভিন্ন এবং কিছুর জন্য এটি উচ্চ। এই সমস্যাটি বাইনারি কাউন্টার ব্যবহার করে একটি জেনারেল ভিউ।

একটি k-বিট বাইনারি কাউন্টার বাইনারি অ্যারে দিয়ে ইমপ্লিমেন্ট করা হয় যার দৈর্ঘ্য k এবং যা প্রাথমিকভাবে ০ ভ্যালুড। এই মান”上 ইনক্রিমেন্ট অপারেশন একাধিকবার পারফর্ম করা হয়। নিচে দেখানো হল ৮-বিট বাইনারি অ্যারে ইনক্রিমেন্ট অপারেশনের আচরণ।

প্রাথমিক: 00000000 > 00000001 > 00000010 > 00000011 > 00000100 > 00000101 > .... > 11111111।

লজিকটি হল নম্বরের লাস্ট বিট থেকে প্রথম ০ খুঁজে বের করা এবং সেটিকে ১-এ ফ্লিপ করা এবং তার পরের সব বিটগুলো ০-তে ফ্লিপ করা।

উদাহরণ কোড

#include <iostream>
using namespace std;

int main() {
    int number[] = {1, 0, 0, 1, 0, 1, 1, 1};
    int length = 8;
    int i = length - 1;
    while (number[i] == 1) {
        number[i] = 0;
        i--;
    }
    if (i >= 0)
        number[i] = 1;
    for (int i = 0; i < length; i++)
        cout << number[i] << " ";
    return 0;
}

আউটপুট

1 0 0 1 1 0 0 0

এই সমস্যাতিতে, প্রতিটি অপারেশনের কস্ট কনস্ট্যান্ট এবং বিটের সংখ্যার ওপর নির্ভরশীল নয়।

এখানে সিকোয়েন্সের কস্টের অ্যাসিম্পটোটিক অ্যানালিসিস O(n)।

n অপারেশনে মোট ফ্লিপের সংখ্যা: n + n/2 + n/4 + ... + n/k² যেখানে k হল ফ্লিপের সংখ্যা।

এটি একটি GP যার হরকে HP।

ফ্লিপের যোগফল: Sum = n + n/2 + n/4 + ... + n/k² < n/(1-1/2) = 2n

এখন, অপারেশনের অ্যামোর্টাইজড কস্ট: O(n) / 2n = O(1)

অর্ডার O(1) যা n (নম্বরের বিট সংখ্যা) এর সাথে অনুপাতিক নয়।

  1. C++ দিয়ে ট্রি-এ সাবট্রির DFS কোয়ারী সমাধান

  2. বাইসেকশন মেথড (Bisection Method) C++ প্রোগ্রাম

  3. C++-এ পিরামিডের ভলিউম বের করার প্রোগ্রাম

  4. C++-এ কুইকসর্ট (QuickSort) প্রোগ্রাম