۲۲۰ روز تا کنکور ارشد ۱۴۰۶۱۳۰ روز تا دکتری

کنکور کامپیوترکلاس، نتیجه و مسیر کنکور کامپیوتر
مقالهارشددکتری

NP-کامل و کاهش برای کنکور: زنجیرهٔ کاهش‌های مشهور و مسئله‌های دوقلو

P، NP، NP-سخت و NP-کامل را با یک جدول از هم جدا می‌کنیم، زنجیرهٔ کاهش‌های مشهور را از SAT تا فروشندهٔ دوره‌گرد دنبال می‌کنیم و «مسئله‌های دوقلو» را می‌بینیم: دو مسئلهٔ شبیه که یکی آسان است و دیگری NP-کامل.

آخرین بررسی ۶ مهر ۱۴۰۵انتشار ۶ مهر ۱۴۰۵۱ منبع

تست‌های NP-کامل معمولاً اثبات نمی‌خواهند؛ طبقه‌بندی می‌خواهند. «این مسئله در P است یا NP-کامل؟»، «کدام کاهش درست است؟»، «اگر فلان مسئله در P باشد، چه نتیجه‌ای می‌گیریم؟». اگر چهار تعریف را دقیق بدانی، جهت کاهش را درست بگیری و چند مسئلهٔ دوقلو را بشناسی، بیشتر این تست‌ها سریع حل می‌شوند.

چهار دسته در یک جدول

دستهتعریفنمونه
Pدر زمان چندجمله‌ای حل می‌شودکوتاه‌ترین مسیر، ۲-SAT، تطابق
NPهر جواب «بله» را در زمان چندجمله‌ای می‌شود بررسی کردهمهٔ مسئله‌های P، به‌علاوهٔ SAT و خوشه
NP-سختهر مسئلهٔ NP به آن کاهش چندجمله‌ای داردSAT، و حتی مسئلهٔ توقف
NP-کاملهم در NP است و هم NP-سختSAT، ۳-SAT، خوشه، پوشش رأسی

دو نکته از همین جدول: اول، P زیرمجموعهٔ NP است؛ مسئله‌ای که حلش آسان است، بررسی جوابش هم آسان است. دوم، NP-سخت لزوماً در NP نیست. مسئلهٔ توقف NP-سخت است ولی اصلاً تصمیم‌پذیر نیست، چه برسد به اینکه در NP باشد.

یک اشتباه رایج این است که NP را «غیرچندجمله‌ای» بخوانی. NP یعنی «چندجمله‌ای غیرقطعی»: ماشینی که بتواند جواب را حدس بزند، در زمان چندجمله‌ای بررسی‌اش می‌کند.

کاهش: جهتش همه‌چیز است

A ≤p B یعنی هر نمونه از A را می‌شود در زمان چندجمله‌ای به نمونه‌ای از B تبدیل کرد، طوری که جواب‌ها یکی بمانند. پس B دست‌کم به سختی A است. برای اثبات NP-سخت بودن مسئلهٔ تازهٔ B، یک مسئلهٔ NP-کامل شناخته‌شده مثل A را به B کاهش می‌دهی. اگر برعکس، B را به A کاهش بدهی، فقط ثابت کرده‌ای B از A سخت‌تر نیست.

دو نتیجه که تست‌ها زیاد می‌پرسند: اگر یک مسئلهٔ NP-کامل در P باشد، آن‌وقت P = NP. و اگر A ≤p B و B در P باشد، A هم در P است.

زنجیرهٔ کاهش‌های مشهور

قضیهٔ کوک–لوین ثابت می‌کند SAT، یعنی ارضاپذیری فرمول بولی، NP-کامل است. بقیهٔ مسئله‌های مشهور با یک زنجیره از آن به دست می‌آیند:

کاهشایدهٔ اصلی در یک جمله
SAT → ۳-SATهر بند بلند را با متغیرهای کمکی به چند بند سه‌لیترالی می‌شکنی
۳-SAT → خوشهبرای هر لیترال هر بند یک رأس؛ رأس‌های بندهای مختلف را که با هم تناقض ندارند وصل می‌کنی؛ k بند ارضاپذیرند اگر و فقط اگر خوشهٔ k تایی باشد
خوشه → مجموعهٔ مستقلخوشه در G همان مجموعهٔ مستقل در گراف مکمل است
مجموعهٔ مستقل → پوشش رأسیS مستقل است اگر و فقط اگر بقیهٔ رأس‌ها پوشش رأسی باشند
پوشش رأسی → دور همیلتونیبرای هر یال یک ابزارک می‌سازی که دور فقط وقتی از آن می‌گذرد که یکی از دو سر یال انتخاب شده باشد
دور همیلتونی → فروشندهٔ دوره‌گردیال‌های گراف وزن ۱ و بقیه وزن ۲ می‌گیرند؛ دور همیلتونی هست اگر و فقط اگر توری با هزینهٔ n باشد
۳-SAT → جمع زیرمجموعههر متغیر و هر بند یک رقم در یک عدد بزرگ می‌شود
۳-SAT → ۳-رنگ‌آمیزیابزارک‌هایی که رنگ‌آمیزی مجاز را به مقداردهی درست تبدیل می‌کنند

دو پیوند این زنجیره را روی ۳۰۰ گراف تصادفی با جست‌وجوی کامل امتحان کردیم: هر مجموعهٔ مستقل در G دقیقاً یک خوشه در مکمل G است و مکملش یک پوشش رأسی است. یک نتیجهٔ مفید هم دارد که همیشه برقرار بود: اندازهٔ بزرگ‌ترین مجموعهٔ مستقل به‌علاوهٔ اندازهٔ کوچک‌ترین پوشش رأسی برابر تعداد رأس‌هاست.

مسئله‌های دوقلو: یکی آسان، یکی سخت

رایج‌ترین اشتباه در تست‌ها قاطی کردن دو مسئلهٔ شبیه است. این جدول را حفظ نکن، دلیلش را بفهم:

در PNP-کامل یا NP-سختفرق کلیدی
۲-SAT۳-SATبندهای دوتایی را می‌شود به گراف استلزام تبدیل کرد و با مؤلفه‌های قویاً همبند حل کرد
۲-رنگ‌آمیزی۳-رنگ‌آمیزی۲-رنگ‌آمیزی یعنی دوبخشی بودن که با یک جست‌وجوی BFS بررسی می‌شود
کوتاه‌ترین مسیربلندترین مسیر سادهبلندترین مسیر ساده دور همیلتونی را در خودش دارد
دور اویلریدور همیلتونیاویلری فقط به درجهٔ رأس‌ها و همبندی بستگی دارد
برش کمینهبرش بیشینهبرش کمینه با شار بیشینه حل می‌شود
تطابق بیشینهتطابق سه‌بعدیتطابق در گراف‌ها الگوریتم چندجمله‌ای دارد، سه‌بعدی نه

الگوریتم ۲-SAT را با گراف استلزام پیاده کردیم و روی ۲٬۰۰۰ فرمول تصادفی با امتحان همهٔ مقداردهی‌ها مقایسه کردیم؛ همیشه یک جواب داد.

اشتباه‌های رایج

اشتباه ۱: کوله‌پشتی با برنامه‌ریزی پویا «چندجمله‌ای» است

الگوریتم برنامه‌ریزی پویای کوله‌پشتی O(nW) است که W ظرفیت کوله است. این چندجمله‌ای به نظر می‌رسد ولی نیست: اندازهٔ ورودی تعداد بیت‌های W است، یعنی حدود log W، و nW نسبت به log W نمایی است. به این زمان «شبه‌چندجمله‌ای» می‌گویند و کوله‌پشتی هنوز NP-کامل است.

اشتباه ۲: جهت کاهش را برعکس گرفتن

اگر تست بگوید «B را به SAT کاهش دادیم، پس B سخت است»، غلط است. کاهش B به SAT فقط می‌گوید B در NP یا ساده‌تر است. برای سختی B باید SAT یا یک مسئلهٔ NP-کامل دیگر را به B کاهش بدهی.

اشتباه ۳: نسخهٔ خاص را با نسخهٔ کلی یکی گرفتن

مسئله‌ای که در حالت کلی NP-کامل است، ممکن است در حالت خاص آسان باشد. پوشش رأسی در درخت‌ها و مجموعهٔ مستقل در گراف‌های دوبخشی چندجمله‌ای‌اند و خوشهٔ k تایی برای k ثابت هم در زمان O(nᵏ) حل می‌شود. قبل از جواب دادن، ببین مسئله کلی است یا روی ورودی خاص.

پرسش‌های پرتکرار

فرق NP-سخت و NP-کامل چیست؟

NP-کامل یعنی هم NP-سخت و هم عضو NP. NP-سخت فقط می‌گوید دست‌کم به سختی هر مسئلهٔ NP است و ممکن است خودش در NP نباشد؛ مثل مسئلهٔ توقف یا نسخهٔ بهینه‌سازی فروشندهٔ دوره‌گرد.

اگر یک مسئلهٔ NP-کامل در P باشد چه می‌شود؟

آن‌وقت P = NP، چون هر مسئلهٔ NP با یک کاهش چندجمله‌ای به آن تبدیل می‌شود و بعد در زمان چندجمله‌ای حل می‌شود.

چرا ۲-SAT آسان است ولی ۳-SAT سخت؟

هر بند دوتایی (a ∨ b) را می‌شود به دو استلزام ¬a → b و ¬b → a تبدیل کرد. فرمول ارضاناپذیر است اگر و فقط اگر متغیری با نقیضش در یک مؤلفهٔ قویاً همبند باشد، که در زمان خطی بررسی می‌شود. بندهای سه‌تایی چنین ساختاری ندارند.

برای اثبات NP-کامل بودن یک مسئله چه چیزهایی لازم است؟

دو چیز: اول نشان بده مسئله در NP است، یعنی یک جواب پیشنهادی را در زمان چندجمله‌ای بررسی کن. دوم یک مسئلهٔ NP-کامل شناخته‌شده را در زمان چندجمله‌ای به آن کاهش بده و نشان بده جواب‌ها در دو طرف یکی‌اند.

این مبحث در کلاس

من ارشدم را در دانشگاه صنعتی شریف، در نرم‌افزار با گرایش الگوریتم و محاسبات گرفتم. نظریهٔ NP-کامل و کاهش‌ها بخشی از دورهٔ طراحی الگوریتم من است؛ با ویدیو، جزوهٔ کامل و تست‌های حل‌شده. دوره‌ها به‌زودی روی همین سایت منتشر می‌شوند و ویدیوی رایگان چند جلسه از کلاس‌هایم هم به‌زودی در صفحهٔ ویدیوهای رایگان همین سایت قرار می‌گیرد.

قدم بعدی تو

این سه گزاره را درست یا نادرست کن: ۱) اگر ۳-SAT را به مسئلهٔ X کاهش دهیم، X در NP است. ۲) مسئلهٔ «آیا گراف ۲-رنگ‌پذیر است؟» NP-کامل است. ۳) اگر بزرگ‌ترین مجموعهٔ مستقل یک گراف ۱۰ رأسی ۴ باشد، کوچک‌ترین پوشش رأسی آن ۶ است.

جواب‌ها: ۱) نادرست؛ این کاهش فقط NP-سخت بودن X را نشان می‌دهد و عضویت در NP جداگانه باید ثابت شود. ۲) نادرست؛ ۲-رنگ‌پذیری یعنی دوبخشی بودن و در P است. ۳) درست؛ مجموع این دو همیشه برابر تعداد رأس‌هاست.

محمد رستمی
نویسنده: محمد رستمی · مدرس و مؤلف کنکور کامپیوتر

روش کار را در روش تولید محتوا ببین.

منابع و اعتبارسنجی

منابع این مطلب

  1. اطلاعیه و جدول مجموعه‌های امتحانی کارشناسی ارشد ناپیوسته سال ۱۴۰۶سازمان سنجش آموزش کشور · بررسی ۱۷ شهریور ۱۴۰۵ · اطلاعیه و جدول مجموعه‌های امتحانی کارشناسی ارشد ناپیوسته سال ۱۴۰۶

    عنوان داده‌ساختارها و الگوریتم‌ها در ۱۲۷۷ و ۱۲۷۶ و طراحی الگوریتم‌ها در ۱۲۰۹

    سازمان سنجش آموزش کشور — اطلاعیه و جدول مجموعه‌های امتحانی کارشناسی ارشد ناپیوسته سال ۱۴۰۶

قدم بعدی تو

خواندن کافی نیست؛ از همین‌جا مطالعه را شروع کن.