বিট Manipulation এর প্রথম পর্বটি এখানে ।
একটি সেটের সম্ভাব্য সকল সাবসেট Generate করতে হবে ।
সমাধানের জন্য মজার একটি সমস্যা ঃ
একটি সেটের সম্ভাব্য সকল সাবসেট Generate করতে হবে ।
ধরা যাক , {a , b , c} একটি সেট ।
তাহলে এর সম্ভাব্য সাবসেটগুলো হবে ঃ
{ } , {a} , {b} , {c} , {a,b} , {b,c} , {c,a} , {a,b,c} ।
অর্থাৎ সেটটিতে যদি element সংখ্যা N হয় তাহলে সেটটির Total Subset হবে টি 2N টি ।
লুপ চালিয়ে যদিও এটি করা যায় তবুও এক্ষেত্রে বিট 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?)
সাবসেট নাম্বার এর ২ - ০ ০ ১ - {C} হওয়ার কথা।
ধন্যবাদ Rezwan । ঠিক করে দিয়েছি । :)
Post a Comment