نظریهی پیچیدگی محاسباتی چیست؟
نظریهی پیچیدگی محاسباتی شاخهای از علوم کامپیوتر و ریاضی است که به بررسی دشواری حل مسائل به وسیلهی رایانه (به عبارت دقیقتر به صورت الگوریتمی) میپردازد. این نظری بخشی از نظریهی محاسباتی است که با منابع مورد نیاز برای حل یک مساله سروکار دارد. عمومیترین منابع زمان (چقدر زمان برای حل کردن مساله لازم است) و فضا (چقدر حافظه مورد نیاز است) میباشند. سایر منابع میتواند تعداد پروسسورهای موازی (در حالت پردازش موازی) و … باشند. اما در این مقاله ما در مورد عواملی مثل عوامل بالا بحثی نکردهایم.
باید به این نکته توجه داشت که نظریه پیچیدگی با نظریه قابل حل بودن متفاوت میباشد. این نظریه در مورد قابل حل بودن یک مساله بدون توجه به منابع مورد نیاز آن، بحث میکند. بعد از این نظریه که بیان میکند کدام مسائل قابل حل میباشند و کدام مسائل غیرقابل حل، این سوال به نظر طبیعی میرسد که درجه سختی مساله چقدر است. نظریه پیچیدگی محاسبات در این زمینه میباشد.
برای سادگی کار مسالهها به کلاسهایی تقسیم میشوند به طوری که مسالههای یک کلاس از حیث زمان یا فضای مورد نیاز با هم مشابهت دارند. این کلاسها در اصطلاح کلاسهای پیچیدگی خوانده میشوند.
بعضی منابع دیگری که در این نظریه مورد بررسی قرار میگیرند، مثل عدم تعیین صرفا جنبهی صوری دارند ولی بررسی آنها موجب درک عمیقتر منابع واقعی مثل زمان و فضا میشود.
معروفترین کلاسهای پیچیدگی، P و NP هستند که مسالهها را از نظر زمان مورد نیاز تقسیمبندی میکنند. به طور شهودی میتوان گفت P کلاس مسالههایی است که الگوریتمهای سریع برای پیدا کردن جواب آنها وجود دارد. اما NP شامل آن دسته از مسالههاست که اگرچه ممکن است پیدا کردن جواب برای آنها نیاز به زمان زیادی داشته باشد اما چک کردن درستی جواب به وسیلهٔ یک الگوریتم سریع ممکن است. البته کلاسهای پیچیدگی به مرتبه سختتری از NP نیز وجود دارند.
▪ PSPACE: مسائلی که با اختصاص دادن مقدار کافی حافظه (که این مقدار حافظه معمولا تابعی از اندازه مساله میباشد) بدون در نظر گرفتن زمان مورد نیاز به حل آن، میتوانند حل شوند.
▪ EXPTIME: مسائلی که زمان مورد نیاز برای حل آنها به صورت توانی میباشد. مسائل این کلاس بسیار جذاب و سرگرم کننده میباشند (حداقل برای ما!). و شامل همه مسائل سه کلاس بالایی نیز میباشد. نکته جالب و قابل توجه این میباشد که حتی این کلاس نیز جامع نمیباشد. یعنی مسائلی وجود دارند که بهترین و کارامدترین الگوریتمها نیز زمان بیشتری نسبت به زمان توانی میگیرند.
▪ Un-decidable یا غیرقابل تصمیمگیری: برای برخی از مسائل میتوانیم اثبات کنیم که الگوریتمی را نمیشود پیدا کردن که همیشه آن مساله را حل میکند، بدون در نظر گرفتن فضا و زمان. در این زمینه آقای ریچارد لیپتون (از صاحبنظران این زمینه) در مقالهای نوشتهاند: یک روش اثبات غیررسمی برای این مساله میتواند این باشد: تعداد زیادی مساله، مثلا به زیادی اعداد حقیقی وجود دارند، ولی تعداد برنامههایی که مسائل را حل میکنند در حد اعداد صحیح میباشند. اما ما همیشه میتوانیم مسائل به دردبخوری را پیدا کنیم که قابل حل نمیباشند.