الگوریتم غیرقطعی

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

در علوم رایانه الگوریتم غیرقطعی به الگوریتمی گفته می‌شود که رفتار غیرقطعی دارد. برای نمونه در یکی از مراحل چنین الگوریتمی مقدار ۰ یا ۱ به صورت غیرقطعی (تصادفی) به یک متغیر نسبت داده می‌شود، رفتار الگوریتم از این نقطه به بعد دو مسیر متفاوت خواهد داشت. اگر الگوریتمی k بار چنین حرکتی داشته باشد، تعداد مسیرهای قطعی آن 2k خواهد بود. الگوریتم‌های غیرقطعی لزوماً متقارن نیستند به این معنی که اگر مقدار ورودی‌های غیرقطعی آن معکوس شوند، جواب لزوماً معکوس نمی‌شود.[۱] این الگوریتم‌ها در مرحلهٔ تصمیم‌گیری خود یک حالت را از میان تعدادی متناهی‌ای از حالت‌های ممکن برمی‌گزینند. اگر دست کم یکی از حالت‌های ممکن بتواند خروجی مورد انتظار را برای یک ورودی مشخص به بار آورد، می‌گویند الگوریتم آن خروجی را می‌پذیرد و در غیر این صورت خروجی را رد می‌کند (یعنی خروجی مورد انتظار را در هیچ مسیری تولید نمی‌کند یا اینکه الگوریتم به صورت نامتناهی ادامه پیدا می‌کند).[۲]

تفاوت الگوریتم‌های غیرقطعی با الگوریتم‌های قطعی در وجود عناصری از نوع حدس‌زدن در برخی مراحل آن‌ها است. در حالی که الگوریتم‌های قطعی برای هر ورودی مشخص یک خروجی مشخص تولید می‌کنند، الگوریتم‌های غیرقطعی با توجه به مقادیری که در گام‌های غیرقطعی خود محاسبه می‌کنند ممکن است خروجی‌های متفاوتی داشته باشند. الگوریتم‌های غیرقطعی را می‌توان با ساختار درختی توصیف کرد که در آن حدس‌ها، محل چندشاخته‌شدن یک مسیر هستند؛ به ساختار درختی حاصل درخت محاسبه می‌گویند.[۳]

یک مسئلهٔ تصمیم از دستهٔ ان‌پی است، اگر و تنها اگر برای آن یک الگوریتم غیرقطعی زمان‌چندجمله وجود داشته باشد.[۴] به عبارت دیگر اگر بتوان یک مسئلهٔ تصمیم را در زمان چندجمله‌ای و با استفاده از یک الگوریتم غیرقطعی حل نمود، آن مسئله از دستهٔ ان‌پی خواهد بود.[۵]

جستارهای وابسته[ویرایش]

منابع[ویرایش]

Accessories-text-editor.svg این مقاله در باره رایانش خُرد است. با گسترش آن به ویکی‌پدیا کمک کنید.