نظریه NP (نظریه پیچیدگی محاسباتی) شاخه‌ای از نظریه محاسبات و ریاضی و علوم کامپیوتری است که به بررسی  و تحلیل میزان دشواری حل مسائل به‌صورت الگوریتمی می‌پردازد.

عمومی‌ترین منابع، زمان (مقدار زمان مورد نیاز برای حل مسئله) و فضا (مقدار حافظه مورد نیاز) می‌باشند. از سایر منابع می‌تواند به تعداد پردازنده‌های موازی (در حالت پردازش موازی) و… اشاره کرد. اما در اینجا عوامل بالا مورد بحث نیستند. باید به این نکته توجه داشت که نظریه پیچیدگی با نظریه قابل حل بودن متفاوت است. این نظریه در مورد قابل حل بودن یک مسئله بدون توجه به منابع مورد نیاز آن، بحث می‌کند. مواردی هست که می‌دانیم یک مسئله جواب دارد ولی راه حل و روش حل آن هنوز ارائه نگردیده و گاهی علاوه بر مشکل مذکور حتی با در دست داشتن راه حل، منابع و ابزار لازم جهت پیاده‌سازی آن مسئله را نداریم.

بعد از این نظریه که بیان می‌کند کدام مسائل قابل حل و کدام مسائل غیرقابل حل هستند، این سؤال به نظر طبیعی می‌رسد که درجه سختی مسئله چقدر است. نظریه پیچیدگی محاسبات در این زمینه‌است.

برای سادگی کار مسئله‌ها به کلاس‌هایی تقسیم می‌شوند، طوری که مسئله‌های یک کلاس از حیث زمان یا فضای مورد نیاز با هم مشابهت دارند. این کلاس‌ها در اصطلاح کلاس‌های پیچیدگی خوانده می‌شوند.

بعضی منابع دیگری که در این نظریه مورد بررسی قرار می‌گیرند، مثل عدم تعین صرفاً جنبهٔ آموزشی دارند ولی بررسی آن‌ها موجب درک عمیق‌تر منابع واقعی مثل زمان و فضا می‌شود.

معروف‌ترین کلاس‌های پیچیدگی، P و NP  کهمخفف “nondeterministic polynomial time” است که مسئله‌ها را از نظر زمان مورد نیاز تقسیم‌بندی می‌کنند. به‌طور شهودی می‌توان گفت P کلاس مسئله‌هایی است که الگوریتم‌های سریع برای پیدا کردن جواب آن‌ها وجود دارد. اما NP شامل آن دسته از مسئله‌هاست که اگرچه ممکن است پیدا کردن جواب برای آن‌ها نیاز به زمان زیادی داشته باشد اما چک کردن درستی جواب به وسیلهٔ یک الگوریتم سریع ممکن است. البته کلاس‌های پیچیدگی به مراتب سخت‌تری از NP نیز وجود دارند.

  • NP,P: معروف‌ترین کلاس‌های پیچیدگی، P و NP هستند که مسئله‌ها را از نظر زمان مورد نیاز تقسیم‌بندی می‌کنند. به‌طور شهودی می‌توان گفت P کلاس مسئله‌هایی است که الگوریتم‌های سریع برای پیدا کردن جواب آن‌ها وجود دارد. اما NP شامل آن دسته از مسئله‌هاست که اگرچه ممکن است پیدا کردن جواب برای آن‌ها نیاز به زمان زیادی داشته باشد اما چک کردن درستی جواب به وسیلهٔ یک الگوریتم سریع ممکن است. البته کلاس‌های پیچیدگی به مراتب سخت‌تری از NP نیز وجود دارند.
  • P-SPACE: مسائلی که با اختصاص دادن مقدار کافی حافظه (که این مقدار حافظه معمولاً تابعی از اندازه مسئله می‌باشد) بدون در نظر گرفتن زمان مورد نیاز به حل آن، می‌توانند حل شوند.
  • EXP-TIME: مسائلی که زمان مورد نیاز برای حل آنها به صورت توانی می‌باشد. مسائل این کلاس شامل همه مسائل سه کلاس بالایی نیز می‌باشد. نکته جالب و قابل توجه این است که حتی این کلاس نیز جامع نمی‌باشد. یعنی مسائلی وجود دارند که بهترین و کارامدترین الگوریتم‌ها نیز زمان بیش‌تری نسبت به زمان توانی می‌گیرند.
  • Un-decidable یا غیرقابل تصمیم‌گیری: برای برخی از مسائل می‌توانیم اثبات کنیم که الگوریتمی را نمی‌شود پیدا کرد که همیشه آن مسئله را حل می‌کند، بدون در نظر گرفتن فضا و زمان. به عقیده ریچارد لیپتون (از صاحب‌نظران این زمینه): یک روش اثبات غیررسمی برای این مسئله می‌تواند این باشد: تعداد زیادی مسئله، مثلاً به زیادی اعداد حقیقی وجود دارند، ولی تعداد برنامه‌هایی که مسائل را حل می‌کنند در حد اعداد صحیح هستند. اما ما همیشه می‌توانیم مسائل کاربردی و مهمی را پیدا کنیم که قابل حل نیستند.

مسایل تصمیم‌پذیر به نوبه خود و با توجه به مرتبه زمانی حل خود به دسته‌های متفاوتی تقسیم می‌شوند. دسته‌ای از آنها مسایلی هستند که برای آنها الگوریتمی با مرتبه زمانی چند جمله‌ای موجود می‌باشد. این مسایل به کلاس مرتبه زمانی P تعلق دارند. از طرف دیگر مسایلی وجود دارند که اثبات شده است الگوریتمی با مرتبه زمانی چند جمله‌ای برای آنها وجود ندارد. همچنین مسایلی وجود دارند که تعلق یا عدم تعلق آنها به کلاس P اثبات نشده است. تمام مسایل NP-Complete و برخی از مسایل NP-Hard از این دسته مسایل می‌باشند.

تمام مسایل NP-Complete به طور موثری قابل کاهش به یکدیگر می‌باشند. بنابراین اگر یکی از آنها با یک مرتبه زمانی چند جمله‌ای بر حسب اندازه مسئله حل شود، تمامی آنها با این مرتبه زمانی قابل حل خواهند بود.

معرفی NP کامل:

تا این بخش از مقاله مسائلی معرفی شدند که اگر بتوان روشی برای حل آنها حدس زد، در زمان نزدیک به زمان خطی یا حداقل در زمان چند جمله‌ای برحسب ورودی می‌توانستیم صحت راه‌حل را بررسی کنیم؛ ولی NP-Completeها مسائلی هستند که اثبات شده به سرعت قابل حل نیستند. در تئوری پیچیدگی NP-Completeها دشوارترین مسائل کلاس NP هستند و جزء مسائلی می‌باشند که احتمال حضورشان در کلاس P خیلی کم است. علت این امر این می‌باشد که اگر یک راه‌حل پیدا شود که بتواندیک مسئله NP-Complete را حل کند، می‌توان از آن الگوریتم برای حل کردن سریع همه مسائل NP-Complete استفاده کرد. به خاطر این مسئله و نیز بخاطر اینکه تحقیقات زیادی برای پیدا کردن الگوریتم کارآمدی برای حل کردن اینگونه مسائل با شکست مواجه شده‌اند، وقتی که مسئله‌ای به عنوان NP-Complete معرفی شد، معمولاً اینطور قلمداد می‌شود که این مسئله در زمان Polynomial قابل حل شدن نمی‌باشد، یا به بیانی دیگر هیچ الگوریتمی وجود ندارد که این مسئله را در زمان Polynomial حل نماید. کلاس متشکل از مسائل NP-Complete با نام NP-C نیز خوانده می‌شود.

Tags: , , , , , , , , , , , , , , , , ,


Leave a Reply

Your email address will not be published. Required fields are marked *