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

C++-এ সেট বিট কাউন্ট অনুযায়ী অ্যারে সর্ট করা

এখানে আমরা একটি আকর্ষণীয় সমস্যা দেখব সেট-বিটস alapján অ্যারে সর্ট করার সম্পর্কে। যখন অ্যারেতে একটি এলিমেন্টের সেট-বিটস বেশি, তবে সেটি অন্য এলিমেন্টের চেয়ে আগে প্লেস হবে যার সেট-বিটস কম। মনে করুন কিছু সংখ্যা 12, 15, 7। সেট বিটস মূলত তাদের বাইনারি রিপ্রেজেন্টেশনে ১ গুলোর সংখ্যা। এগুলো হল 1100 (12), 1111 (15), এবং 0111 (7)। তাই সর্ট করার পর এটি হবে -

1111, 0111, 1100 (15, 7, 12)

এখানে আমাদের প্রথমে সেট-বিটস সংখ্যা বের করতে হবে। তারপর আমরা C++ STL সর্ট ফাংশন ব্যবহার করব সেগুলো সর্ট করার জন্য। আমাদের সেট-বিট কাউন্টস ভিত্তিক করে কমপারিজন লজিক তৈরি করতে হবে।

অ্যালগরিদম

getSetBitCount(number): 
শুরু 
    count := 0
    যতক্ষণ number ০ না হয়, করো
        যদি number AND 1 = 1, তবে
            count ১ বাড়াও
        number = number কে এক বিট রাইট শিফ্ট করো
    শেষ
    count রিটার্ন করো
শেষ

compare(num1, num2): 
শুরু 
    count1 = getSetBitCount(num1)
    count2 = getSetBitCount(num2)
    যদি count1 <= count2, তবে false রিটার্ন করো, অন্যথায় true রিটার্ন করো
শেষ

উদাহরণ (C++ কোড)

#include <iostream>
#include <algorithm>
using namespace std;

int getSetBitCount(int number) {
    int count = 0;
    while(number) {
        if(number & 1 == 1)
            count++;
        number = number >> 1; // 넘্বার কে এক বিট রাইট শিফ্ট করো
    }
    return count;
}

int compare(int num1, int num2) {
    int count1 = getSetBitCount(num1);
    int count2 = getSetBitCount(num2);
    if(count1 <= count2)
        return 0;
    return 1;
}

main() {
    int data[] = {2, 9, 4, 3, 5, 7, 15, 6, 8};
    int n = sizeof(data)/sizeof(data[0]);
    sort(data, data + n, compare);
    for(int i = 0; i < n; i++) {
        cout << data[i] << " ";
    }
}

আউটপুট

15 7 9 3 5 6 2 4 8
  1. C++-এ অড্ড সেট বিট থাকা ইন্টিজার সংখ্যা গণনা

  2. সি++-এ একই সেট বিট সংখ্যক পরবর্তী বড় সংখ্যা বের করা

  3. ২ডি ক্যারেক্টার অ্যারেতে নির্দিষ্ট স্ট্রিংর বার্তা গণনা (C++)

  4. C++-এ একটি সেটকে k সাবসেটে ভাগ করার পদ্ধতির সংখ্যা গণনা