تفاوت مسائل کلاس P , NP, NP hard و Np Complete - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تفاوت مسائل کلاس P , NP, NP hard و Np Complete

+4 امتیاز
این 4 دسته بندی پیچیدگی زمانی الگوریتم ها چی هستند و چه تفاوتی با هم دارند ؟
سوال شده شهریور 30, 1393  بوسیله ی َAI (امتیاز 200)   13 19 30
دوباره تگ گذاری شد دی 15, 1393 بوسیله ی BlueBlade

2 پاسخ

+4 امتیاز
 
بهترین پاسخ

قبلا این جا و این  جا  توضیح داده بودم .

 

  کلاس p  : به مسائل انتخاب (decission problem ) که الگوریتمی با  پیچیدگی زمانی چند جمله ای ( polynomial ) براشون موجود باشه  مسائل کلاس p میگیم . 

مثال ۱ :‌ مسائلی مثل آیا گراف دور همیلتونی دارد ؟  

مثال ۲:  آیا با داشتن یک جمله و یک گرامر آیا جمله قابل ساختن بوسیله گرامر مورد نظر هست ؟ (  میتونید این مسائل رو داخل این لینک ببینید )

نکته ۱ :‌ منظور از decission problem یعنی مسئله  ۲ حالت داره یا درست یا غلط .مثلا این سوال که آیا عدد ورودی زوج است یا نه ؟

نکته ۲ : منظور از چند جمله ای عبارتی به شکل روبرو   هستش . 

 

 

که میشه با استفاده از سری به این شکل هم نمایش داد‌ :

 

د 

 

پس طبیعتا عباراتی مثل n^n یا n! جزو چند جمله ای ها حساب نمیشن .

 

کلاس Np (مخفف nondetermenestic polynomial )  ‌:‌ به مسائل انتخابی (decission problem )  که با داشتن یک جواب میشه درستی یا نادرستی جواب رو با استفاده از یک الگوریتم با پیچیدگی زمانی چند جمله ای تعیین کرد مسائل کلاس NP گفته میشه .

مثال:

 فرض کنید یک مجموعه شامل ۴۰۰ عضو دارید , یک رابطه بین هر ۲ نفر وجود داره  این که آیا این ۲ نفر با هم سازگار هستند یا نه ؟

خب حالا فرض کنید می خواهید بدونید که آیا یک مجموعه ۱۰۰ عضوی که هر ۲ نفر داخلش با هم سازگار باشن وجود داره با نه .

 این مسئله NP حساب میشه چون با دادن یک جواب میشه درستی یا نادرستیشو در محدوده زمانی چند جمله ای مشخص کرد .یعنی مثلا اگر اسم ۱۰۰  نفر داده بشه میشه مشخص کرد که آیا این ۱۰۰ نفر با هم سازگار هستند یا نه .

ولی چزو کلاس P نیست چون پیچیدگی زمانی این مسئله مشخص نیست که چند جمله ای هست یا نه . به این دلیل که یک الگوریتم میتونه این باشه که  تمام حالت های انتخاب 100 از ۴۰۰ رو بررسی کنیم  و ببینیم آیا مجموعه مورد نظر ما موجوده یا نه ولی خب همین جور که میدونید انتخاب ۱۰۰ از ۴۰۰ خیلی خیلی بزرگه(در حد تمام اتم های دتیا ) و قابل انجام نیست و در حالت کلی تر که مجموعه n تا عضو داشته باشه پیچیدگی زمانی این الگوریتم n^n میشه که چند جمله ای حساب نمیشه . البته هنوز نمیدونیم که آیا با الگوریتم های بهتر میشه به پیچیدگی زمانی چند جمله ای رسید یا نه ؟

آیا کلاس p زیر مجموعه کلاس NP هست ؟ 

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

آیا کلاس Np زیر مجموعه کلاس P هست ؟ 

این سوال رو به این شکل میشه مطرج کرد که آیا میشه برای هر سوال NP الگوریتمی از پیچیدگی زمانی چند جمله ای پیدا کرد ؟

در صورت مشخص شدن جواب این سوال میشه تعیین کرد که ایا P=NP هست یا نه  . ولی هنوز کسی جواب این سوال رو نمی دونه. جالبه که بدونین این یکی از مسائل ریاضی حل نشده توی دنیا هست که ۱ میلیون دلار جایزه هم داره .

Np-Hard : مسئله ای هستنش که در صورت پیدا شدن الگوریتم از درجه چند جمله ای میشه تمام مسائل NP رو به این مسئله تبدیل کرد و با پیچیدگی  چند جمله ای حل کرد.

.

به روشی که مسائل Np به NP_Hard تبدیل میشن Reduction میگیم .

منظور از Reduction اینه که فرض کنید که یک مسئله داریم که یکسری ورودی خاص داره مثلا X و یک مسئله دیگه داریم با ورودی Y حالا اگر بشه X رو بشکلی با درجه چند جمله ای به Y تبدیل کرد اصطلاجا Reduction بهش گفته میشه .

یعنی بطور خلاصه Reduction یعنی تبدیل ورودی یک مسئله  به یک مسئله  دیگه .

 

به الگوریتم از درجه چند جمله ای   (C یک ثابت هستش) . که برای Reduction ( یا تبدیل ورودی ۲ مسئله به هم) استفاده میشه polynomial-time reduction algorithm. میگن .

 

NP_Complete : مسائلی که هم Np هستند و هم NP_Hard . یعنی هم باید در صورت دادن یک جواب بشه درستی جواب رو در مدت زمان چند جمله ای بررسی کرد و هم بشه بقیه مسائل NP رو به این مسئله کاهش داد . 

مثل  Knapscak یا پیدا کردن دور همیلتونی در گراف یا traveling-salesman  و...

ضمنا تمام مسائل Np-complete با استفاده از Reduction قابل تبدیل به هم هستند .

 

 

پاسخ داده شده شهریور 30, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد مهر 4, 1393 بوسیله ی َAI
0 امتیاز
دسته‌بندی‌های P، NP، NP-hard و NP-complete مربوط به پیچیدگی زمانی الگوریتم‌ها هستند. این دسته‌بندی‌ها بر اساس قابلیت حل مسئله توسط الگوریتم‌ها و نوع مسئله مورد نظر صورت می‌گیرند. الگوریتم‌هایی که در دسته‌های مختلف قرار می‌گیرند، میزان زمانی که برای حل مسئله نیاز دارند را نشان می‌دهند.
 
1. کلاس P (Polynomial Time): مسائلی که الگوریتمی با زمان اجرای چندجمله‌ای برای حل آنها وجود دارد، در کلاس P قرار می‌گیرند. به عبارت دیگر، مسئله در زمان چندجمله‌ای قابل حل است. مثال‌هایی از مسائل P شامل مرتب‌سازی، جستجو در آرایه مرتب و محاسبه عملیات ریاضی ساده می‌باشند.
 
2. کلاس NP (Nondeterministic Polynomial Time): مسائلی که الگوریتمی با زمان اجرای چندجمله‌ای برای تأیید صحت یک پاسخ مورد نظر وجود دارد، در کلاس NP قرار می‌گیرند. به عبارت دیگر، اگر یک پاسخ به مسئله داده شود، می‌توان با الگوریتمی با زمان اجرای چندجمله‌ای صحت آن را تأیید کرد. مثال‌هایی از مسائل NP شامل مسئله کوله‌پشتی (Knapsack problem) و مسئله مسیر کوتاه در گراف (Shortest Path problem) می‌باشند.
 
3. کلاس NP-hard (Nondeterministic Polynomial-hard): مسائلی که حداقل به اندازه مسائل NP سخت هستند، در کلاس NP-hard قرار می‌گیرند. به عبارت دیگر، هر مسئله NP را می‌توان به صورتی تبدیل کرد که بتوان با الگوریتمی با زمان اجرای چندجمله‌ای آن را حل کرد. مثال‌هایی از مسائل NP-hard شامل مسئله جهت‌یابی کامل (Traveling Salesman problem) و مسئله بسته‌بندی (Bin Packing problem) می‌باشند.
 
4. کلاس NP-complete (Nondeterministic Polynomial-complete): مسائلی که هم در کلاس NP قرار دارند و هم NP-hard هستند، در کلاس NP-complete قرار می‌گیرند. به عبارت دیگر، اگر یک مسئله NP-complete با الگوریتمی با زمان اجرای چندجمله‌ای حل شود، همه مسائل NP را می‌توان با الگوریتمی با زمان اجرای چندجمله‌ای حل کرد. مثال‌هایی از مسائل NP-complete شامل مسئله رنگ‌آمیزی گراف (Graph Coloring problem) و مسئله کیفیت اشتراک (Set Cover problem) می‌باشند.
 
به طور خلاصه، کلاس P شامل مسائلی است که با الگوریتم‌های چندجمله‌ای قابل حل هستند، کلاس NP شامل مسائلی است که با الگوریتم‌های چندجمله‌ای قابل تأیید صحت هستند، کلاس NP-hard شامل مسائلی است که حداقل به اندازه مسائل NP سخت هستند و کلاس NP-complete شامل مسائلی است که هم در کلاس NP قرار دارند و هم NP-hard هستند.
پاسخ داده شده خرداد 30, 1402 بوسیله ی farshid_siyah (امتیاز 1,463)   3 11 16
...