কারনো ম্যাপ (K-Map) সিমপ্লিফিকেশন
এই পাঠে যা শিখবেন
- কারনো ম্যাপ কী, এবং কেন এর সেলগুলো গ্রে-কোড ক্রমে সাজানো থাকে
- গ্রুপিং নিয়ম — গ্রুপের আকার, সর্বোচ্চ-বড়-গ্রুপ নীতি, ওভারল্যাপ অনুমতি
- একটি বাস্তব ৩-ভ্যারিয়েবল K-map হাতে-কলমে সমাধান করে সরলীকৃত এক্সপ্রেশন বের করা
- কোড দিয়ে ব্রুট-ফোর্স ট্রুথ টেবিলের সাথে K-map-এর ফলাফল তুলনা করে সরলীকরণ যাচাই করা
১ · কারনো ম্যাপ (K-Map) কী
কারনো ম্যাপKarnaugh Map (K-map)একটি ভিজ্যুয়াল, গ্রিড-ভিত্তিক পদ্ধতি যা বুলিয়ান এক্সপ্রেশন সরল করে — সেলগুলো এমনভাবে সাজানো থাকে যে পাশাপাশি সেল ঠিক একটি ভ্যারিয়েবলে ভিন্ন হয়, তাই 1-দের গ্রুপ দেখেই বোঝা যায় কোন ভ্যারিয়েবল বাদ দেওয়া যায়। হলো একটি ভিজ্যুয়াল, গ্রিড-ভিত্তিক পদ্ধতি যা দিয়ে ৪-৫ ভ্যারিয়েবল পর্যন্ত এক্সপ্রেশন সরল করা যায় — L05-এর মতো একের পর এক বীজগাণিতিক নিয়ম হাতে প্রয়োগ না করেই। এর সেলগুলো এমনভাবে সাজানো থাকে যে যেকোনো দুটি পাশাপাশি সেল (wrap-around প্রান্তসহ — অর্থাৎ গ্রিডের এক প্রান্ত অন্য প্রান্তের সাথেও "পাশাপাশি" ধরা হয়) ঠিক একটি মাত্র ভ্যারিয়েবলে ভিন্ন হয় — একে বলা হয় Gray codeGray Codeএমন একটি বাইনারি সংখ্যা-ক্রম যেখানে পরপর দুটি সংখ্যা ঠিক একটি বিটে ভিন্ন হয় (00, 01, 11, 10 — সাধারণ বাইনারি গণনা ক্রম 00,01,10,11 নয়)। অর্ডারিং। এই বিশেষ সাজানোর কারণেই পাশাপাশি 1-দের একটি গ্রুপ সরাসরি দেখিয়ে দেয় কোন ভ্যারিয়েবল(গুলো) বাদ দেওয়া যায়।
২ · গ্রুপিং নিয়ম
K-map-এ 1 বসানো সেলগুলোকে বৃত্তাকারে ঘিরে গ্রুপ বানাতে হয়, নিচের নিয়ম মেনে —
- প্রতিটি গ্রুপের আকার হতে হবে 2-এর ঘাত (1, 2, 4, 8...) — অন্য কোনো আকার বৈধ নয়।
- প্রতিটি গ্রুপ যতটা সম্ভব বড় বানাতে হবে — বড় গ্রুপ মানে বেশি ভ্যারিয়েবল বাদ, ছোট সরল টার্ম।
- প্রতিটি 1 অন্তত একবার কোনো না কোনো গ্রুপে কভার হতে হবে।
- গ্রুপগুলো একে অপরের সাথে ওভারল্যাপ করতে পারে — একই সেল একাধিক গ্রুপে থাকতে পারে।
প্রতিটি বৈধ গ্রুপ চূড়ান্ত Sum-of-Products (SOP)Sum-of-Productsএকাধিক AND-টার্মের OR — বুলিয়ান এক্সপ্রেশন লেখার একটি সাধারণ, প্রমিত রূপ, যেখানে প্রতিটি টার্ম কিছু ভ্যারিয়েবলের AND আর টার্মগুলো একে অপরের সাথে OR। এক্সপ্রেশনে একটি করে টার্মে পরিণত হয় — গ্রুপের ভেতর যে ভ্যারিয়েবলের মান সব সেলে স্থির থাকে, সেটাই সেই টার্মে থেকে যায়; যে ভ্যারিয়েবলের মান গ্রুপের মধ্যে বদলে যায় (0 ও 1 দুটোই দেখা যায়), সেটা বাদ পড়ে যায়।
৩ · Worked example — F(A,B,C) = Σ(1,3,5,7)
নিচের mintermMintermএকটি ৩-ভ্যারিয়েবল ফাংশনে, ইনপুট কম্বিনেশনের বাইনারি মানকেই তার minterm সংখ্যা বলা হয় — যেমন A=0,B=0,C=1 হলে বাইনারি "001" = minterm 1। তালিকা Σ(1,3,5,7) মানে F হলো 1 ঠিক সেই ইনপুট কম্বিনেশনগুলোর জন্য যাদের বাইনারি মান (ABC হিসেবে পড়লে) 1, 3, 5, অথবা 7 — বাইনারিতে যথাক্রমে 001, 011, 101, 111। লক্ষ্য করুন — এই চারটি মিনটার্মেই শেষ বিট (C) সবসময় 1, A ও B যেকোনো মান নিতে পারে। নিচের K-map-এ এই মিনটার্মগুলো বসিয়ে দেখা যাক:
| C \ AB | 00 | 01 | 11 | 10 |
|---|---|---|---|---|
| 0 | 0 (m0) | 0 (m2) | 0 (m6) | 0 (m4) |
| 1 | 1 (m1) | 1 (m3) | 1 (m7) | 1 (m5) |
সবুজ বর্ডারে চিহ্নিত সম্পূর্ণ নিচের সারিটাই একটি একক 4-সেল গ্রুপ — C=1 সারির সবগুলো সেল, AB-এর সব মান জুড়ে (00→01→11→10, wrap-around-সহ পাশাপাশি)।
নিচের সারির চারটি সেল (C=1) একটি একক ৪-সেল গ্রুপ বানায় — এই গ্রুপে AB-এর মান 00, 01, 11, 10 সবগুলোই আছে (অর্থাৎ A ও B দুজনেই গ্রুপের মধ্যে 0 এবং 1 দুটো মানই নিয়েছে), কিন্তু C সবসময় 1 স্থির। গ্রুপিং নিয়ম অনুযায়ী যে ভ্যারিয়েবল গ্রুপের মধ্যে বদলে যায় তা বাদ পড়ে (A ও B বাদ), আর যেটা স্থির থাকে তা টার্মে থেকে যায় (C)। তাই:
$$F(A,B,C) = C$$
উপরের সারি (C=0)-এ কোনো 1 নেই, তাই তার জন্য কোনো গ্রুপ দরকার নেই। এই ফলাফলটি নিচের কোডে ব্রুট-ফোর্স ট্রুথ টেবিলের বিরুদ্ধে যাচাই করে নেওয়া হলো — L05-এর মতো একই "সম্পূর্ণ ট্রুথ টেবিল তুলনা" পদ্ধতি, এবার K-map-এর ফলাফলের উপর প্রয়োগ করা হয়েছে।
# মিনটার্ম তালিকা থেকে ব্রুট-ফোর্স ট্রুথ টেবিল বনাম K-map-সরলীকৃত এক্সপ্রেশন -- সারি-বাই-সারি তুলনা
def generate_truth_table_from_minterms(minterms, num_vars):
"""মিনটার্ম-তালিকা থেকে ব্রুট-ফোর্স সম্পূর্ণ ট্রুথ টেবিল তৈরি করে -- প্রতিটি কম্বিনেশনের বাইনারি মান সেটে আছে কিনা যাচাই করে"""
table = {}
for combo_index in range(2 ** num_vars):
bits = tuple((combo_index >> (num_vars - 1 - i)) & 1 for i in range(num_vars))
table[bits] = 1 if combo_index in minterms else 0
return table
def simplified_F_is_C(a, b, c):
"""K-map দিয়ে হাতে-কলমে বের করা সরলীকৃত দাবি: F(A,B,C) = C"""
return c
minterms = [1, 3, 5, 7]
num_vars = 3
brute_force_table = generate_truth_table_from_minterms(minterms, num_vars)
print("A B C | ব্রুট-ফোর্স F (Σ মিনটার্ম) | K-map-সরলীকৃত F=C | মিলেছে?")
print("-" * 62)
identical = True
for a in (0, 1):
for b in (0, 1):
for c in (0, 1):
brute_val = brute_force_table[(a, b, c)]
simplified_val = simplified_F_is_C(a, b, c)
match = brute_val == simplified_val
if not match:
identical = False
print(f"{a} {b} {c} | {brute_val} | {simplified_val} | {'হ্যাঁ' if match else 'না!'}")
print()
print(f"F=C আসলেই Σ(1,3,5,7)-এর সঠিক সরলীকরণ? {'হ্যাঁ' if identical else 'না'}")
K-map মূলত L05-এর বীজগাণিতিক সিমপ্লিফিকেশনেরই একটি ভিজ্যুয়াল শর্টকাট — একই সত্য, ভিন্ন উপস্থাপনা। গ্রে-কোড অর্ডারিং নিশ্চিত করে যে পাশাপাশি সেল দেখেই বোঝা যায় কোন ভ্যারিয়েবল বাদ পড়বে, আর "যতটা সম্ভব বড় গ্রুপ" নিয়ম নিশ্চিত করে সবচেয়ে সরল সম্ভাব্য ফলাফল। তবে এই ভিজ্যুয়াল সুবিধা বাস্তবে ৪-৫ ভ্যারিয়েবল পর্যন্তই ব্যবহারিক থাকে — তার বেশি ভ্যারিয়েবলে গ্রিড আঁকা ও পড়া কঠিন হয়ে পড়ে (তখন Quine-McCluskey-এর মতো অ্যালগরিদমিক পদ্ধতি প্রয়োজন হয়, যা এই কোর্সের পরিধির বাইরে)।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ K-map-এর কলাম সাধারণ বাইনারি গণনা ক্রমে (00,01,10,11) না রেখে গ্রে-কোড ক্রমে (00,01,11,10) সাজানো হয় কেন?
কারণ K-map-এর পুরো গ্রুপিং নিয়মটাই দাঁড়িয়ে আছে এই শর্তের উপর যে পাশাপাশি সেল ঠিক একটি বিটে ভিন্ন হবে। সাধারণ বাইনারি ক্রমে 01 থেকে 10-এ গেলে দুটি বিটই বদলে যায় (0→1 এবং 1→0 একসাথে) — এতে "পাশাপাশি সেল মানে মাত্র এক ভ্যারিয়েবলে ভিন্ন" নিয়মটা ভেঙে যেত, আর গ্রুপ দেখে সরাসরি ভ্যারিয়েবল বাদ দেওয়ার পুরো কৌশলটাই অকার্যকর হয়ে যেত। গ্রে-কোড ক্রম (00,01,11,10) নিশ্চিত করে প্রতিটি ধাপে ঠিক একটি বিট বদলায়।
প্র ০২ এই পাঠের উদাহরণে A ও B দুজনেই সম্পূর্ণ "উধাও" হয়ে গেল আর শুধু C থেকে গেল — এটা কীভাবে সম্ভব হলো?
একটি বৈধ গ্রুপের ভেতর, যে ভ্যারিয়েবলের মান গ্রুপ জুড়ে বদলে যায় (গ্রুপের কিছু সেলে 0, কিছুতে 1) সেটা চূড়ান্ত টার্ম থেকে বাদ পড়ে যায়, আর যে ভ্যারিয়েবলের মান গ্রুপ জুড়ে স্থির থাকে সেটাই টার্মে থেকে যায়। নিচের সারির চার-সেল গ্রুপে AB পুরো চারটি সম্ভাব্য মান (00,01,11,10) নিয়েছিল — অর্থাৎ A ও B দুজনেই গ্রুপের ভেতর 0 এবং 1 উভয় মান নিয়েছে — তাই দুজনেই বাদ পড়ে গেছে, শুধু স্থির-মান C (সবসময় 1) থেকে গেছে।
প্র ০৩ K-map কি সবসময় L05-এর বীজগাণিতিক সিমপ্লিফিকেশনের চেয়ে ভালো পদ্ধতি, নাকি এর কোনো সীমাবদ্ধতা আছে?
ছোট এক্সপ্রেশনে (৩-৪ ভ্যারিয়েবল) K-map সাধারণত দ্রুততর ও কম ভুল-প্রবণ, কারণ এটি ভিজ্যুয়াল প্যাটার্ন- চেনার উপর নির্ভর করে, ধাপে ধাপে বীজগাণিতিক নিয়ম মনে রাখার উপর নয়। কিন্তু এর একটি বাস্তব সীমাবদ্ধতা আছে — ৪-৫ ভ্যারিয়েবলের বেশি হলে গ্রিড আঁকা ও তার মধ্যে গ্রুপ খুঁজে বের করা মানুষের জন্য কঠিন হয়ে পড়ে। সেই পরিস্থিতিতে বাস্তব হার্ডওয়্যার-ডিজাইন টুল অ্যালগরিদমিক পদ্ধতি (যেমন Quine-McCluskey) ব্যবহার করে, যা কম্পিউটার দিয়ে স্বয়ংক্রিয়ভাবে চালানো যায়।
অনুশীলন
-
চিন্তা করুন: minterm 1, 3, 5, 7-কে বাইনারিতে (ABC হিসেবে) লিখে যাচাই করুন যে চারটিতেই সত্যিই C=1, A ও B যেকোনো মান নিতে পারে।
minterm 1 = 001, minterm 3 = 011, minterm 5 = 101, minterm 7 = 111 (প্রতিটি ৩-বিট সংখ্যাকে ABC হিসেবে পড়ুন)। প্রতিটির শেষ বিট (C) সত্যিই 1 — আর A,B জোড়া হিসেবে (0,0), (0,1), (1,0), (1,1) — চারটি সম্ভাব্য মানই দেখা গেছে। এটাই নিশ্চিত করে যে C একাই F নির্ধারণ করে, A ও B-এর কোনো ভূমিকা নেই।
-
পরীক্ষা করুন: ধরুন কেউ ভুল করে শুধু minterm 1 ও 3 নিয়ে একটি ছোট ২-সেল গ্রুপ বানালো (৪-সেল পূর্ণ গ্রুপের বদলে) — এই ছোট গ্রুপ কোন এক্সপ্রেশনে সরল হতো, এবং কেন পূর্ণ ৪-সেল গ্রুপ এর চেয়ে ভালো?
minterm 1 (001) ও 3 (011)-এর গ্রুপে A সবসময় 0 (স্থির), C সবসময় 1 (স্থির), কিন্তু B বদলে যায় (0 ও 1 দুটোই) — তাই এই ছোট গ্রুপ সরল হতো A'C (NOT-A AND C)-তে, দুটো ভ্যারিয়েবল রেখে। কিন্তু গ্রুপিং নিয়ম বলে গ্রুপ যতটা সম্ভব বড় বানাতে হবে — পূর্ণ ৪-সেল গ্রুপ (সবগুলো মিনটার্ম একসাথে) আরও বড়, তাই আরও বেশি ভ্যারিয়েবল (A ও B দুজনেই) বাদ দিতে পারে, ফলে চূড়ান্ত ফলাফল আরও সরল (শুধু C) — কম গেট, কম বিলম্ব।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ K-map থেকে ইউনিভার্সাল গেট, কম্বিনেশনাল সার্কিট ও সম্পূর্ণ CPU ডিজাইন পর্যন্ত — সম্পূর্ণ সিলেবাস দেখুন।
- পূর্ববর্তী পাঠ L05 বুলিয়ান এক্সপ্রেশন সিমপ্লিফিকেশন ও De Morgan's Law — এই পাঠের ভিত্তি, বীজগাণিতিক সিমপ্লিফিকেশনের নিয়মগুলো।
- পরবর্তী পাঠ L07 ইউনিভার্সাল গেট — NAND ও NOR — M1-এর শেষ পাঠ, একটি একক গেট থেকে যেকোনো বুলিয়ান ফাংশন বানানোর কৌশল।
- সব Courses দেখুন ABCL TECH C, C++, Python, Java, JavaScript, DSA, DBMS, Discrete Mathematics, System Design, Cybersecurity, Cloud Computing & DevOps, Computer Networks, Operating Systems ও Computer Architecture — সব এক জায়গায়।