تحلیل احتمالاتی و الگوریتم‌های تصادفی: توضیح مسئله استخدام

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

الگوریتم‌های تصادفیتحلیل احتمالاتیمتغیرهای تصادفی نشانگر

~6 min read · Updated Sep 7, 2026

چرا تصادف وارد تحلیل الگوریتم می‌شود

زمان‌های اجرای بدترین‌حالت، بهترین‌حالت، و حالت‌میانگین که پیش‌تر در این مجموعه بحث شد، همگی فرض می‌کنند خود الگوریتم به‌طور قطعی رفتار می‌کند، و هر تغییری صرفاً از ورودی می‌آید. وضعیت متفاوتی وقتی پیش می‌آید که یا توزیع ورودی ناشناخته باشد یا یک الگوریتم عمداً انتخاب‌های تصادفی در حین اجرای خودش انجام دهد. هر دو وضعیت به ابزارهای Probabilistic Analysis (تحلیل احتمالاتی) نیاز دارند.

مسئله استخدام: یک مثال انگیزاننده

یک شرکت را در نظر بگیرید که کاندیدها را یکی‌یکی برای یک موقعیت مصاحبه می‌کند، همیشه بهترین کاندید فعلی که تاکنون دیده استخدام می‌کند و استخدام‌شده قبلی را اخراج می‌کند. هر مصاحبه هزینه کمی دارد، اما هر استخدام هزینه به‌طور قابل‌توجهی بیشتری دارد، چون شامل کاغذبازی، آموزش، و مزایای پایان‌کار برای فردی است که جایگزین می‌شود. پرسش این است: هزینه کل استخدام مورد انتظار در سراسر کل فرآیند چقدر است؟

HIRE-ASSISTANT(n):
  best = کاندید 0 (یک جانگه‌دار، رتبه‌بندی‌شده بدترین)
  برای i = 1 تا n:
      کاندید i را مصاحبه کن
      اگر کاندید i از best بهتر باشد:
          best = کاندید i
          کاندید i را استخدام کن

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

دو رویکرد برای مدیریت ترتیب ورودی‌ها

دو راه متمایز برای استدلال درباره این تصادف وجود دارد، و مهم است آن‌ها را با هم اشتباه نگیریم.

  • Probabilistic Analysis of a Deterministic Algorithm (تحلیل احتمالاتی یک الگوریتم قطعی): فرض کن خود ورودی از یک توزیع احتمالی می‌آید (مانند یک ترتیب یکنواخت تصادفی از کاندیدها)، و زمان اجرای مورد انتظار یک الگوریتم ثابت و غیرتصادفی را روی آن توزیع ورودی تحلیل کن.
  • Randomized Algorithms (الگوریتم‌های تصادفی): خود الگوریتم در حین اجرا انتخاب‌های تصادفی می‌کند (مانند به‌طور تصادفی به‌هم‌ریختن ترتیب کاندیدها پیش از پردازش آن‌ها، صرف‌نظر از ترتیبی که واقعاً رسیده‌اند)، که کارایی مورد انتظار خوب را برای هر ورودی تضمین می‌کند، چون تصادف از الگوریتم می‌آید نه یک فرض درباره ورودی.

رویکرد دوم معمولاً در عمل قدرتمندتر و قابل‌اعتمادتر است، چون هر وابستگی به فرضیات درباره اینکه ورودی‌ها در دنیای واقعی چگونه توزیع شده‌اند را حذف می‌کند، که ممکن است برقرار نباشد. یک Randomized Algorithm برای مسئله استخدام صرفاً کاندیدها را به‌طور تصادفی جایگشت می‌کند پیش از اجرای همان رویه، و همان هزینه مورد انتظار خوب را صرف‌نظر از ترتیب اصلی ورودی تضمین می‌کند.

متغیرهای تصادفی نشانگر: یک ابزار تحلیلی قدرتمند

محاسبه مستقیم یک مقدار مورد انتظار می‌تواند وقتی بسیاری رویداد متعامل درگیر باشند پیچیده باشد. Indicator Random Variables (متغیرهای تصادفی نشانگر) تکنیکی زیبا فراهم می‌کنند که چنین محاسباتی را به‌طور چشمگیری ساده می‌کند، به‌ویژه وقتی با خطی‌بودن امید ریاضی ترکیب شود.

برای یک رویداد A، متغیر تصادفی نشانگر را تعریف کن:

I{A} = 1  اگر A رخ دهد
I{A} = 0  اگر A رخ ندهد

ویژگی کلیدی: E[I{A}] = Pr{A}

مقدار مورد انتظار یک متغیر نشانگر صرفاً برابر با احتمال رویدادی است که نشان می‌دهد. این وقتی با Linearity of Expectation (خطی‌بودن امید ریاضی) ترکیب شود قدرتمند می‌شود، که بیان می‌کند مقدار مورد انتظار مجموع متغیرهای تصادفی برابر با مجموع مقادیر مورد انتظارشان است، صرف‌نظر از اینکه متغیرها مستقل باشند یا نه.

E[X1 + X2 + ... + Xn] = E[X1] + E[X2] + ... + E[Xn]

این حتی وقتی Xi ها مستقل نباشند برقرار است —
یک واقعیت حیاتی و اغلب شگفت‌آور

به‌کارگیری متغیرهای نشانگر روی مسئله استخدام

فرض کن Xi متغیر تصادفی نشانگر برای رویداد استخدام کاندید i باشد. تعداد کل استخدام‌ها X = X1 + X2 + ... + Xn است. با خطی‌بودن امید ریاضی:

E[X] = E[X1] + E[X2] + ... + E[Xn]
     = Σ Pr{کاندید i استخدام می‌شود}

کاندید i دقیقاً وقتی استخدام می‌شود که کاندید i بهترین در میان i کاندید اول دیده‌شده باشد. اگر کاندیدها به ترتیب یکنواخت تصادفی برسند، کاندید i به‌طور برابر احتمال دارد بهترین، دومین‌بهترین، یا هر رتبه‌ای در میان i کاندید اول باشد، پس:

Pr{کاندید i استخدام می‌شود} = 1/i

بنابراین:
E[X] = Σ (i=1 تا n) 1/i = H(n)

این سری هارمونیک است، و H(n) = Θ(ln n)

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

چرا این تکنیک این‌قدر گسترده تعمیم می‌یابد

تکنیک متغیر تصادفی نشانگر مخصوص مسئله استخدام نیست؛ یک ابزار عمومی قابل‌اعمال هروقت که یک کمیت مورد علاقه بتواند به‌صورت مجموعی از پیامدهای ساده‌تر صفر-یا-یک بیان شود، حتی وقتی آن پیامدها با هم مرتبط باشند. این آن را به یکی از گسترده‌ترین تکنیک‌های مفید در تحلیل احتمالاتی الگوریتم‌ها تبدیل می‌کند، و در سراسر موضوعات بعدی این مجموعه هرجا که زمان اجرای مورد انتظار باید محاسبه شود دوباره ظاهر می‌شود.

چرا تصادفی‌سازی برای طراحی الگوریتم دنیای واقعی اهمیت دارد

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

Written & researched by Dr. Shahin Siami

Related Articles

الگوریتم‌های نظریه اعداد: GCD، توان‌رسانی پیمانه‌ای، و RSA

رمزنگاری مدرن و بی‌شمار کاربرد الگوریتمی به تعداد کمی الگوریتم ظریف نظریه اعداد متکی است. این راهنمای جامع الگوریتم اقلیدس برای محاسبه بزرگ‌ترین مقسوم‌علیه مشترک، توان‌رسانی پیمانه‌ای سریع برای محاسبه کارآمد توان‌های بزرگ، و پایه ریاضی رمزنگاری RSA، یکی از پراستفاده‌ترین سیستم‌های رمزنگاری در جهان، را پوشش می‌دهد.

Continue

اصول هندسه محاسباتی: جهت، تقاطع پاره‌خط، و پوسته محدب

الگوریتم‌های هندسی مسائل شامل نقاط، خطوط، و اشکال را حل می‌کنند، که در گرافیک کامپیوتری، برنامه‌ریزی مسیر رباتیک، و سیستم‌های اطلاعات جغرافیایی ظاهر می‌شوند. این راهنمای جامع آزمون جهت مبتنی بر ضرب خارجی که زیربنای تقریباً هر الگوریتم هندسی است، تشخیص تقاطع پاره‌خط ساخته‌شده روی آن آزمون، و الگوریتم اسکن گراهام برای محاسبه پوسته محدب یک مجموعه از نقاط را پوشش می‌دهد.

Continue

الگوریتم‌های تطبیق رشته: جستجوی ساده، Rabin-Karp، و فراتر از آن

جستجو برای یک الگو درون یک متن بزرگ‌تر یکی از رایج‌ترین عملیات‌ها در محاسبات است، از ویرایشگرهای متن تا تحلیل توالی DNA. این راهنمای جامع الگوریتم تطبیق رشته ساده و بدترین‌حالت درجه‌دومش را پوشش می‌دهد، سپس استفاده ماهرانه الگوریتم Rabin-Karp از هشینگ برای دستیابی به کارایی سریع حالت‌میانگین را توضیح می‌دهد، شامل نحوه مدیریت درست برخوردهای هش.

Continue

الگوریتم‌های تقریبی: نزدیک‌شدن اثبات‌پذیر به بهینه برای مسائل سخت

وقتی یک مسئله NP-complete اثبات شود، یک راه‌حل کارآمد دقیق بعید است وجود داشته باشد، اما این به معنای رهاکردن کامل مسئله نیست. این راهنمای جامع الگوریتم‌های تقریبی را توضیح می‌دهد، که تضمین بهینه‌بودن را در ازای تضمین کارایی معامله می‌کنند، و مسائل پوشش رأس و فروشنده دوره‌گرد را به‌عنوان مثال‌های کلاسیک با نسبت‌های تقریبی اثبات‌پذیر پوشش می‌دهد.

Continue

NP-Completeness توضیح داده شده: P، NP، و چرا برخی مسائل در برابر راه‌حل‌های کارآمد مقاومت می‌کنند

برخی مسائل برای دهه‌ها در برابر هر تلاشی برای یک الگوریتم کارآمد مقاومت کرده‌اند، با این حال هیچ‌کس اثبات نکرده یک راه‌حل کارآمد غیرممکن است. این راهنمای جامع کلاس‌های P و NP، مفهوم تقلیل‌های زمان-چندجمله‌ای مورد استفاده برای مقایسه سختی مسئله، و چگونگی اینکه اثبات NP-complete بودن یک مسئله شواهد قوی، هرچند نه اثبات، فراهم می‌کند که هیچ الگوریتم کارآمدی وجود ندارد را توضیح می‌دهد.

Continue

جریان بیشینه: فورد-فالکرسون و قضیه برش-کمینه/جریان-بیشینه

مسائل جریان بیشینه بیشترین توان عملیاتی ممکن از میان یک شبکه با اتصالات محدود-به-ظرفیت را مدل‌سازی می‌کنند، از لوله‌های آب تا شبکه‌های داده. این راهنمای جامع شبکه‌های جریان را معرفی می‌کند، روش فورد-فالکرسون برای یافتن جریان بیشینه با استفاده از مسیرهای تقویتی را مرور می‌کند، و قضیه ظریف برش-کمینه/جریان-بیشینه که دو مسئله به‌ظاهر متفاوت را به یکی متصل می‌کند را توضیح می‌دهد.

Continue