পর্ব - ২ ( সমস্যা - ৩ )

বিট Manipulation এর প্রথম পর্বটি এখানে ।

একটি সেটের সম্ভাব্য সকল সাবসেট Generate করতে হবে ।

ধরা যাক , {a , b , c} একটি সেট ।

তাহলে এর সম্ভাব্য সাবসেটগুলো হবে ঃ
{ } , {a} , {b} , {c} , {a,b} , {b,c} , {c,a} , {a,b,c}

অর্থাৎ সেটটিতে যদি element সংখ্যা N হয় তাহলে সেটটির Total Subset হবে টি 2টি ।
লুপ চালিয়ে যদিও এটি করা যায় তবুও এক্ষেত্রে বিট Manipulation এর প্রয়োগটি শিখে আমার খুবই ভালো লেগেছে এবং ব্যাপারটি খুবই মজার ।
এখানে যেহেতু element সংখ্যা ৩ টি তাই আমাদের ৩ টি বিট লাগবে প্রতিটি element এর জন্য একটি করে । একটি specific বিট 1 হলে বুঝবো যে , সেই element টি সাবসেট এ আছে । নিচের Table টি লক্ষ্য করলেই ব্যাপারটি বোঝা যাবে । 

সাবসেট নাম্বার
a
b
c
সাবসেট
0
0
0
0
{ }
1
0
0
1
c }
2
0
1
0
b }
3
0
1
1
b c }
4
1
0
0
a }
5
1
0
1
a c }
6
1
1
0
a b }
7
1
1
1
a b c }

প্রোগ্রামে আমরা 0 থেকে less than (1<<N) পর্যন্ত প্রতিটি Number এর জন্য দেখবো Number টির 0 থেকে N-1 (কারণ আমাদের Total element N টি) তম বিটটি 1 কিনা এবং 0 থেকে N-1 তম প্রতিটি বিট 1 পাওয়া মানেই হল element টি সাবসেট এ আছে । কিভাবে i'তম বিট 1 হয় তা আমরা পূর্বের সমস্যায় দেখেছি । কোন বিট টি কাকে Represent করছে সেটা Table এ আমরা বলে দিয়েছি । এখন আমরা Code Implementation টি দেখবো ।

কোড ইমপ্লিমেন্টেশন ঃ



সমাধানের জন্য মজার একটি সমস্যা ঃ
হ্যাপি কোডিং 

2 comments: (+add yours?)

Md. Rezwanul Islam said...

সাবসেট নাম্বার এর ২ - ০ ০ ১ - {C} হওয়ার কথা।

পাবন said...

ধন্যবাদ Rezwan । ঠিক করে দিয়েছি । :)