الگوریتم کوین-مک‌کلاسکی

الگوریتم کوین-مک‌کلاسکی روشی است که برای کمینه کردن توابع بولی توسط ویلارد کوین، منطق‌دان آمریکایی و ادوارد مک‌کلاسکی ایجاد شد. این روش از لحاظ تابعی با جدول کارنو یکسان است، ولی حالت جدولی این روش را برای استفاده در الگوریتم‌های کامپیوتری کارآمدتر می‌کند. علاوه بر این، این روش به‌طور قطعی می‌تواند بیان کند که آیا به کمینه استفاده از توابع بولی رسیده‌ایم یا نه. این روش گاهی با روش جدولی نیز نام برده می‌شود.

این الگوریتم از دو قسمت تشکیل شده‌است:

1- یافتن تمامی دلالت‌کننده‌های نخستین (Prime Implicant)

۲- تمامی آن دلالت‌کننده‌ها را در جدول دلالت‌کننده‌های نخستین قرار دهیم تا دلالت‌کننده‌های ضروری را بیابیم.

پیچیدگی

اگرچه این الگوریتم در مقایسه با جدول کارنو برای داده‌های با بیشتر از ۴ متغیر عملی‌تر است، این الگوریتم به دلیل این که مسئله‌ای که حل می‌کند ان‌پی سخت است، محدودیت دارد و زمان اجرایی آن به صورت نمایی رشد می‌کند. می‌توان نشان داد که برای تابعی با n متغیر، مقدار کران بالا برای دلالت‌کننده‌های نخستین برابر exp(3،n)/n است. به‌طور مثال اگر n=32 حدوداً exp(10،15)*6.5 دلالت‌کننده‌ی نخستین خواهیم داشت.

مثال

مرحله اول: یافتن دلالت‌کننده‌های نخستین

کوچک کردن یک تابع دلخواه

ABCDf
m0۰۰۰۰۰
m1۰۰۰۱۰
m2۰۰۱۰۰
m3۰۰۱۱۰
m4۰۱۰۰۱
m5۰۱۰۱۰
m6۰۱۱۰۰
m7۰۱۱۱۰
m8۱۰۰۰۱
m9۱۰۰۱x
m10۱۰۱۰۱
m11۱۰۱۱۱
m12۱۱۰۰۱
m13۱۱۰۱۰
m14۱۱۱۰x
m15۱۱۱۱۱

به‌سادگی می‌توان ساده‌شده‌ی عبارت بالا را با توجه به جدول بالا، با جمع زدن مین‌ترم‌ها (minterm) یافت. به‌نوعی که آن تابع به صورت یک عبارت واحد نشان داده می‌شود:

به‌طور قطع این عبارت ساده‌ترین حالت نیست و برای ساده کردن آن می‌بایست مین‌ترم‌ها را در جدول مربوطه قرار داد و همچنین ترم‌های غیرمهم نیز در این جدول قرار داد و سپس این دو را با یکدیگر ترکیب کرد:

تعداد ۱هامین ترمنمایش در مبنای ۲
۱ m4۰۱۰۰
m8۱۰۰۰
۲ m9۱۰۰۱
m10۱۰۱۰
m12۱۱۰۰
۳ m11۱۰۱۱
m14۱۱۱۰
۴ m15۱۱۱۱

حال باید به ترکیب در جدول پرداخت. اگر دو مین‌ترم فقط در یک رقم با یکدیگر تفاوت داشتند، آن دو را در هم ادغام کرده و جای رقم متفاوت، «-» را قرار می‌دهیم. و آن‌ها که مورد استفاده قرار نمی‌گیرند را با «*» مشخص می‌کنیم.

تعداد ۱هامین ترمنمایش مبنای ۲دلالت کنندهٔ به اندازه ۲دلالت کنندهٔ به اندازه ۴
۱ m4۰۱۰۰m(4،12) -100*--m(8،9،10،11) 10*
m8۱۰۰۰-m(8،9) 100m(8،10،12،14) 1--0*
m(8،10) 10-0--m(8،9،10،11) 10*
m(8،12) 1-00
۲ m9 ۱۰۰۱ -m(8،9) 100 --m(8،9،10،11) 10*
m(9،11) 10-1m(10،11،14،15) 1-1-*
m10 ۱۰۱۰ m(8،10) 10-0 --m(8،9،10،11) 10*
-m(10،11) 101--m(8،9،10،11) 10*
m(10،14) 1-10
m12۱۱۰۰m(4،12) -100*--
m(8،12) 1-00
m(12،14) 11-0--
۳ m11۱۰۱۱m(9،11) 10-1--m(8،9،10،11) 10*
-m(10،11) 101 --m(8،9،10،11) 10*
m(11،15) 1-11
m14 ۱۱۱۰ m(10،14) 1-10
m(12،14) 11-0--
۴ m15۱۱۱۱m(11،15) 1-11--
m(14،15) 111--

مرحله دوم: جدول دلالت‌کننده‌های نخستین

تا به این‌جا در جدولی که داشته‌ایم، دیگر نمی‌تون مین‌ترم‌ها را بیشتر از این با هم ترکیب کرد. پس در اینجا جدولی را برای دلالت‌کننده‌های نخستین ضروری درست می‌کنیم. در این جدول، از مین‌ترم‌هایی که در قبل داشتیم و آز آن‌ها در ترکیب جدید استفاده نشده استفاده می‌کنیم. در این قسمت ترم‌های غیرمهم را حذف می‌کنیم، چون اهمیتی ندارند.

۴۸۱۰۱۱۱۲۱۵=>ABCD
m(4،12)*XX-۱۰۰=>-۱۰۰
m(8،9،10،11)XXX۱۰--=>۱۰--
m(8،10،12،14)XXX۱--۰=>۱--۰
m(10،11،14،15)*XXX۱-۱-=>۱-۱-

با توجه به جدول بالا، می‌توان دو عبارت ساده را برای تابع مد نظر در نظر گرفت. هر دوی این نمایش‌ها درست هستند:

این دو تابع ساده‌شده، در اصل همان تابع ابتدایی هستند:

منابع

۱. نلسون، کتاب تحلیل و طراحی مدارهای دیجیتال

    پیوندها

    This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.