الفرق بين المراجعتين لصفحة: «Algorithms/Randomized Algorithms»
لا ملخص تعديل |
لا ملخص تعديل |
||
(11 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:الخوارزميات العشوائية}}</noinclude> | <noinclude>{{DISPLAYTITLE:الخوارزميات العشوائية}}</noinclude> | ||
الخوارزمية العشوائية هي الخوارزمية التي تستخدم عددًا عشوائيًا لتقرّر الخطوة التالية في سير عملها، فعلى سبيل المثال خوارزمية الترتيب السريع العشوائية Randomized Quick | الخوارزمية العشوائية هي الخوارزمية التي تستخدم عددًا عشوائيًا لتقرّر الخطوة التالية في سير عملها، فعلى سبيل المثال تستخدم خوارزمية [[Algorithms/random quick sort|الترتيب السريع العشوائية Randomized Quick Sort]] عددًا عشوائيًا لاختيار المحور التالي (أو لتغيير مواقع العناصر في المصفوفة عشوائيًا). يُستفاد من العشوائية عادةً في التقليل من التعقيد الزمني والتعقيد المكاني في الخوارزميات العادية. | ||
== مقدمة رياضية == | == مقدمة رياضية == | ||
سطر 14: | سطر 14: | ||
=== المتغيرات العشوائية === | === المتغيرات العشوائية === | ||
المتغير العشوائي هو دالة تربط نتائج | المتغير العشوائي هو في الأساس دالة تربط map بين مجموعة فضاء العينة set of sample space ومجموعة من الأعداد الحقيقية. يساعد المتغير العشوائي في الحصول على تصور حول نتائج حالة معينة تكون فيها عدة احتمالات لنتائج مختلفة. | ||
لو رمينا عملتين معدنيتين، وافترضنا أنّ <code>X</code> تساوي عدد المرات الذي يظهر فيها وجه العملة، فإنّ <code>X</code> تعدّ متغيرًا أو دالة عشوائية. | |||
مجموعة فضاء العينة هنا هي <code>S = {HH, HT, TH, TT}</code>. | |||
وستكون مخرجات الدالة:<syntaxhighlight lang="text"> | |||
X(HH) = 2 | |||
X(HT) = 1 | |||
X(TH) = 1 | |||
X(TT) = 0 | |||
</syntaxhighlight> | |||
يمكن | === أنواع المتغير العشوائي === | ||
للمتغير العشوائي نوعان هما: المنفصل Discrete والمتصل Continuous. | |||
==== المتغير العشوائي المنفصل ==== | |||
يقال عن المتغير العشوائي بأنّه منفصل إذا كانت القيم التي يأخذها محدّدة وثابتة. مثل رمي القطعة المعدنية والذي ينتج عنه فضاء العينة <code>{heads, tails}</code> والذي يمكن تمثيله برقم لكل حالة ليصبح فضاء العينة <code>{1, 0}</code>. | |||
==== المتغير العشوائي المتصل ==== | |||
يقال عن المتغير العشوائي بأنّه متصل إذا كانت القيم التي يأخذها غير محدّدة وتتغير باستمرار. كأن يمثّل المتغير العشوائي وزن حيوان عشوائي في حديقة الحيوانات، إذ يتدرج الوزن ابتداءً من الحشرات الصغيرة وانتهاءً بالفيلة الضخمة، بمعنى أنّ فضاء العينة سيتضمّن نطاقًا من القيم وليس مجموعة محددة منها. | |||
=== القيمة المتوقعة للمتغير العشوائي === | === القيمة المتوقعة للمتغير العشوائي === | ||
سطر 37: | سطر 47: | ||
'''أمثلة:''' | '''أمثلة:''' | ||
* القيمة المتوقعة للنقاط في المثال السابق = | * القيمة المتوقعة للنقاط في المثال السابق <code>= 50 * (1/2) + (-50) * (1/2) = 0</code> | ||
* والقيمة المتوقعة لرمي زهر سداسي الوجوه = | * والقيمة المتوقعة لرمي زهر سداسي الوجوه = <code>1''(1/6) + 2''(1/6) + .... + 6*(1/6) = 3.5</code> | ||
=== خطية التوقع Linearity of Expectations === | === خطية التوقع Linearity of Expectations === | ||
سطر 57: | سطر 67: | ||
== الخوارزمية العشوائية == | == الخوارزمية العشوائية == | ||
الخوارزمية العشوائية هي خوارزمية تستخدم عددًا عشوائيًا لتقرر الخطوة التالية في سير عملها، فعلى سبيل المثال تستخدم خوارزمية الترتيب السريع العشوائية عددًا عشوائيًا لاختيار العنصر الوسطي (pivot) التالي، وهناك خوارزميات لتغيير ترتيب العناصر في المصفوفة | الخوارزمية العشوائية هي خوارزمية تستخدم عددًا عشوائيًا لتقرر الخطوة التالية في سير عملها، فعلى سبيل المثال تستخدم خوارزمية [[Algorithms/random quick sort|الترتيب السريع العشوائية]] عددًا عشوائيًا لاختيار العنصر الوسطي (pivot) التالي، وهناك خوارزميات لتغيير [[Algorithms/Fisher Yates|ترتيب العناصر في المصفوفة عشوائيًا]]، وتنتخب خوارزمية Karger ضلعًا بطريقة عشوائية. | ||
=== تحليل الخوارزميات العشوائية === | === تحليل الخوارزميات العشوائية === | ||
تمتلك بعض الخوارزميات العشوائية تعقيدًا زمنيًا محدّدًا، فعلى سبيل المثال تمتلك إحدى طرق تنفيذ خوارزمية | تمتلك بعض الخوارزميات العشوائية تعقيدًا زمنيًا محدّدًا، فعلى سبيل المثال تمتلك إحدى طرق تنفيذ خوارزمية Karger تعقيدًا زمنيًا قدره <code>O(E)</code>، ويسمّى مثل هذه الخوارزميات بخوارزميات مونتي كارلو Monte Carlo Algorithms ويسهل تحليل هذه الخوارزميات في الحالات السوأى. | ||
وفي المقابل يعتمد التعقيد الزمني لبعض الخوارزميات العشوائية على قيمة المتغير العشوائي، وتسمى هذه الخوارزميات بخوارزميات لاس فيغاس Las Vegas، ويجري تحليل هذه الخوارزميات عادة في الحالات السوأى المتوقعة. | وفي المقابل يعتمد التعقيد الزمني لبعض الخوارزميات العشوائية على قيمة المتغير العشوائي، وتسمى هذه الخوارزميات بخوارزميات لاس فيغاس Las Vegas، ويجري تحليل هذه الخوارزميات عادة في الحالات السوأى المتوقعة. | ||
سطر 67: | سطر 77: | ||
وتتطلب عملية حساب الوقت الذي يتوقع أن تستغرقه الحالة السوأى الأخذ بنظر الاعتبار جميع القيم الممكنة للمتغير العشوائي المستخدم في الحالة السوأى وتقدير الوقت الذي تستغرقه كل قيمة محتملة، ويكون الوقت الذي يتوقع أن تستغرقه الحالة السوأى هو معدّل جميع الأوقات التي جرى تقييمها. ويجدر التنبيه إلى إمكانية الاستفادة من خاصية خطّية التوقعات Linearity of Expectations والعدد المتوقع للمحاولات قبل تحقيق النجاح في تحليل هذا النوع من الخوارزميات. | وتتطلب عملية حساب الوقت الذي يتوقع أن تستغرقه الحالة السوأى الأخذ بنظر الاعتبار جميع القيم الممكنة للمتغير العشوائي المستخدم في الحالة السوأى وتقدير الوقت الذي تستغرقه كل قيمة محتملة، ويكون الوقت الذي يتوقع أن تستغرقه الحالة السوأى هو معدّل جميع الأوقات التي جرى تقييمها. ويجدر التنبيه إلى إمكانية الاستفادة من خاصية خطّية التوقعات Linearity of Expectations والعدد المتوقع للمحاولات قبل تحقيق النجاح في تحليل هذا النوع من الخوارزميات. | ||
== خوارزمية الترتيب السريع | == تصنيف الخوارزميات العشوائية == | ||
تصنف الخوارزميات العشوائية إلى صنفين هما: | |||
# خوارزميات لاس فيغاس Las Vegas Algorithms | |||
# خوارزميات مونتي كارلو Monte Carlo Algorithms | |||
=== خوارزميات لاس فيغاس === | |||
تعطي هذه الخوارزميات نتائج صحيحة أو مثالية دائمًا، ويعتمد التعقيد الزمني فيها على قيمة عشوائي، ويحسب التعقيد الزمني كقيمة متوقعة expected value. ترتّب خوارزمية الترتيب السريع العشوائي - على سبيل المثال - عناصر المصفوفة المدخلة بتعقيد زمني يتوقّع أن تكون قيمته <code>O(nLogn)</code> في الحالة السوأى. | |||
تنتخب خوارزمية الترتيب السريع عنصرًا من عناصر المصفوفة المراد ترتيبها وتجعله محورًا pivot لتقسّم بعد ذلك المصفوفة حول هذا العنصر إلى قسمين. | === خوارزميات مونتي كارلو === | ||
تعطي هذه الخوارزميات نتائج صحيحة أو مثالية مع بعض الاحتمالية، ويكون التعقيد الزمني لهذا النوع من الخوارزميات العشوائية محدّدًا ويمكن تحليل الحالة السوأى لها بسهولة. فعلى سبيل المثال تنتج إحدى طرق تنفيذ خوارزمية كارك المقطع الأصغر minimum cut مع احتمالية تكون أكبر من <code>1/n^2</code> (تمثّل <code>n</code> عدد الرؤوس في الرسم البياني)، ويبلغ التعقيد الزمني في الحالة السوأى المقدار <code>O(E)</code>. وتعدّ طريقة فيرميت Fermet Method للتحقق من الأعداد الأولية إحدى الأمثلة المعروفة عن خوارزميات مونتي كارلو. | |||
يوضّح المثال التالي الفرق بين التصنيفين: | |||
لنفترض وجود مصفوفة ثنائية Binary array نصف عناصرها <code>0</code> والنصف الآخر <code>1</code>. المطلوب هو إيجاد موقع أي من الواحدات. | |||
تنفيذ هذه المهمة عن طريق خوارزمية لاس فيغاس يتطلب الاستمرار في اختيار عنصر عشوائي إلى حين الوصول إلى الرقم <code>1</code>. أما خوارزمية مونتي كارلو فستستمر في اختيار عنصر عشوائي إلى حين الوصول إلى الرقم <code>1</code> أو الوصول إلى أقصى عدد مسموح به من المحاولات (ليكن <code>k</code>). | |||
تعثر خوارزمية لاس فيغاس دائمًا على موقع للرقم <code>1</code>، ولكن التعقيد الزمني يكون قيمة غير محدّدة وإنّما متوقعة، إذ إنّ العدد المتوقع للمحاولات قبل تحقيق النجاح هو <code>2</code>، وهذا يعني أنّ التعقيد الزمني المتوقع هو <code>O(1)</code>. أما خوارزمية مونتي كارلو فتعثر على <code>1</code> مع احتمالية تقدّر بالقيمة <code>[1 - (1/2)k]</code>، ويبلغ التعقيد الزمني المقدار <code>O(k)</code> وهو قيمة محدّدة. | |||
== التطبيقات ونطاق الاستخدام == | |||
* لنفترض وجود أداة مهمّتها إجراء عملية الترتيب، ولنفترض أنّ هناك عددًا كبيرًا من الأشخاص الذين يستخدمون هذه الأداة مع مصفوفات مرتّبة أصلًا. إن استخدمت الأداة خوارزمية الترتيب السريع العادية (وليست العشوائية) فإنّ هؤلاء المستخدمين سيواجهون الحالة السوأى دائمًا. ولكن إن استخدمت الأداة خوارزمية الترتيب السريع العشوائية، فإنّ التعقيد الزمني الذي سيحصل عليه جميع المستخدمين بدون استثناء هو التعقيد الزمني المتوقّع لهذه الخوارزمية وهو <code>O(n Log n)</code>. | |||
* تستخدم الخوارزميات العشوائية استخدامًا واسعًا في عمليات التشفير. | |||
* موازنة الأحمال Load Balancing. | |||
* تطبيقات في علم الأعداد: اختبار الأعداد الأولية. | |||
* بنى المعطيات: التقطيع، الترتيب، البحث، إحصائيات الترتيب Order Statistics، والهندسة الحاسوبية. | |||
* المعادلات الجبرية: متعددات الحدود والمصفوفات. أنظمة البرهنة التفاعلية. | |||
* البرمجة الرياضية: خوارزميات أسرع للبرمجة الخطية، تقريب نتائج البرامج الخطية إلى نتائج البرامج الصحيحة. | |||
* خوارزميات الرسوم البيانية: الشجرة الممتدة الصغرى، المسار الأقصر، المقاطع الصغرى. | |||
* التعداد: بنى المصفوفات ذات العد الاندماجي الدائم Matrix permanent Counting combinatorial structures. | |||
* الحوسبة المتوازية والموزّعة. | |||
* إلغاء العشوائية: تُقترح في البداية خوارزمية عشوائية ثم يجري النقاش حول ما إذا كان بالإمكان إزالة العشوائية للحصول على نتائج محدّدة. | |||
== [[Algorithms/random quick sort|خوارزمية الترتيب السريع العشوائية]] == | |||
تنتخب خوارزمية [[Algorithms/quick sort|الترتيب السريع]] عنصرًا من عناصر المصفوفة المراد ترتيبها وتجعله محورًا pivot لتقسّم بعد ذلك المصفوفة حول هذا العنصر إلى قسمين. | |||
المحور الوسطي Central Pivot هو المحور الذي يقسم المصفوفة إلى قسمين يمتلك أحدهما على الأقل 1/4 من العناصر. | المحور الوسطي Central Pivot هو المحور الذي يقسم المصفوفة إلى قسمين يمتلك أحدهما على الأقل 1/4 من العناصر. | ||
سطر 104: | سطر 151: | ||
تقسم المصفوفة في الحالة السوأى إلى قسمين، يمتلك أحدهما <code>n/4</code> من العناصر والآخر <code>3n/4</code> من العناصر. ويبلغ التعقيد الزمني حينئذٍ المقدار <code>O(Log n)</code>. | تقسم المصفوفة في الحالة السوأى إلى قسمين، يمتلك أحدهما <code>n/4</code> من العناصر والآخر <code>3n/4</code> من العناصر. ويبلغ التعقيد الزمني حينئذٍ المقدار <code>O(Log n)</code>. | ||
يجدر التنبيه إلى أنّ طريقة التنفيذ السابقة ليست هي الطريقة المثلى، وإنّما هي لتوضيح سهولة عملية تحليل الخوارزمية. تنفّذ خوارزمية الترتيب السريع العشوائية عادة باختيار عنصر | يجدر التنبيه إلى أنّ طريقة التنفيذ السابقة ليست هي الطريقة المثلى، وإنّما هي لتوضيح سهولة عملية تحليل الخوارزمية. تنفّذ خوارزمية الترتيب السريع العشوائية عادة باختيار عنصر عشوائي كمحور (دون استخدام الحلقات التكرارية)، أو بتغيير مواقع العناصر في المصفوفة، ويبلغ التعقيد الزمني المتوقع في الحالة السوأى لهذه الخوارزمية المقدار <code>O(n Log n)</code>، ولكن تحليل الخوارزمية يكون أكثر تعقيدًا. | ||
== [[Algorithms/binomial random variables|المتغيرات العشوائية ثنائية الحدود]] == | |||
المتغيرات العشوائية ثنائية الحدود Binomial Random Variables هي نوع خاص من المتغيرات العشوائية المنفصلة والتي تحسب عدد المرات التي سيقع فيها حدثٌ معين في عدد محدّد من المحاولات. | |||
== [[Algorithms/strong password suggester|اقتراح كلمات مرور قوية]] == | |||
تتحقق هذه الخوارزمية من قوة كلمة المرور التي يدخلها المستخدم، وتقترح عليه عددًا منها إن لم تكن كلمة المرور التي أدخلها قوية. | |||
== [[Algorithms/CAPTCHA|توليد رموز كابتشا]] == | |||
رموز كابتشا CAPTCHA (اختصار للعبارة Completely Automated Public Turing test to tell Computers and Humans Apart) هي اختبار لتحديد ما إذا كان المستخدم بشرًا أو لا. | |||
== [[Algorithms/Fisher Yates|خوارزمية Fisher-Yates لإعادة الترتيب عشوائيًا]] == | |||
تنتج خوارزمية Fisher-Yates ترتيبًا عشوائيًا لتسلسل معين. | |||
== مصادر == | == مصادر == | ||
سطر 110: | سطر 169: | ||
* صفحة [https://www.geeksforgeeks.org/randomized-algorithms-set-0-mathematical-background/ Randomized Algorithms | Set 0 (Mathematical Background)] في توثيق الخوارزميات في موقع GeeksforGeeks. | * صفحة [https://www.geeksforgeeks.org/randomized-algorithms-set-0-mathematical-background/ Randomized Algorithms | Set 0 (Mathematical Background)] في توثيق الخوارزميات في موقع GeeksforGeeks. | ||
* صفحة [https://www.geeksforgeeks.org/randomized-algorithms-set-1-introduction-and-analysis/ Randomized Algorithms | Set 1 (Introduction and Analysis)] في توثيق الخوارزميات في موقع GeeksforGeeks. | * صفحة [https://www.geeksforgeeks.org/randomized-algorithms-set-1-introduction-and-analysis/ Randomized Algorithms | Set 1 (Introduction and Analysis)] في توثيق الخوارزميات في موقع GeeksforGeeks. | ||
* صفحة [https://www.geeksforgeeks.org/randomized-algorithms-set-2-classification-and-applications/ Randomized Algorithms | Set 2 (Classification and Applications)] في توثيق الخوارزميات في موقع GeeksforGeeks. | |||
* صفحة [https://www.khanacademy.org/math/statistics-probability/random-variables-stats-library/random-variables-discrete/v/discrete-and-continuous-random-variables Discrete and continuous random variables] في سلسلة الإحصاء والاحتمالات على موقع Khan Academy. | |||
[[تصنيف: الخوارزميات]] | [[تصنيف: الخوارزميات]] | ||
[[تصنيف: الخوارزميات العشوائية]] | [[تصنيف: الخوارزميات العشوائية]] |
المراجعة الحالية بتاريخ 18:50، 24 نوفمبر 2019
الخوارزمية العشوائية هي الخوارزمية التي تستخدم عددًا عشوائيًا لتقرّر الخطوة التالية في سير عملها، فعلى سبيل المثال تستخدم خوارزمية الترتيب السريع العشوائية Randomized Quick Sort عددًا عشوائيًا لاختيار المحور التالي (أو لتغيير مواقع العناصر في المصفوفة عشوائيًا). يُستفاد من العشوائية عادةً في التقليل من التعقيد الزمني والتعقيد المكاني في الخوارزميات العادية.
مقدمة رياضية
الاحتمالية المشروطة P(A | B)
هي احتمالية وقوع الحدث 'A'
على افتراض وقوع الحدث 'B'
قبله.
يمكن الاستعانة بالشكل التالي لفهم الصيغة السابقة، إذ لمّا كان الحدث 'B'
قد وقع بالفعل، فإنّ فضاء العينة سيتقلّص إلى 'B'
فقط؛ ولهذا فإنّ احتمالية وقوع الحدث 'A'
ستصبح P(A ∩ B)
مقسومًا على P(B)
.
تربط علاقة بايس Bayes’s forumla بين الاحتماليتين المشروطتين P(A|B)
و P(B|A)
.
المتغيرات العشوائية
المتغير العشوائي هو في الأساس دالة تربط map بين مجموعة فضاء العينة set of sample space ومجموعة من الأعداد الحقيقية. يساعد المتغير العشوائي في الحصول على تصور حول نتائج حالة معينة تكون فيها عدة احتمالات لنتائج مختلفة.
لو رمينا عملتين معدنيتين، وافترضنا أنّ X
تساوي عدد المرات الذي يظهر فيها وجه العملة، فإنّ X
تعدّ متغيرًا أو دالة عشوائية.
مجموعة فضاء العينة هنا هي S = {HH, HT, TH, TT}
.
وستكون مخرجات الدالة:
X(HH) = 2
X(HT) = 1
X(TH) = 1
X(TT) = 0
أنواع المتغير العشوائي
للمتغير العشوائي نوعان هما: المنفصل Discrete والمتصل Continuous.
المتغير العشوائي المنفصل
يقال عن المتغير العشوائي بأنّه منفصل إذا كانت القيم التي يأخذها محدّدة وثابتة. مثل رمي القطعة المعدنية والذي ينتج عنه فضاء العينة {heads, tails}
والذي يمكن تمثيله برقم لكل حالة ليصبح فضاء العينة {1, 0}
.
المتغير العشوائي المتصل
يقال عن المتغير العشوائي بأنّه متصل إذا كانت القيم التي يأخذها غير محدّدة وتتغير باستمرار. كأن يمثّل المتغير العشوائي وزن حيوان عشوائي في حديقة الحيوانات، إذ يتدرج الوزن ابتداءً من الحشرات الصغيرة وانتهاءً بالفيلة الضخمة، بمعنى أنّ فضاء العينة سيتضمّن نطاقًا من القيم وليس مجموعة محددة منها.
القيمة المتوقعة للمتغير العشوائي
يمكن تعريف القيمة المتوقعة للمتغير العشوائي R
بأنّها:
E[R] = r1*p1 + r2*p2 + ... rk*pk
تمثل ri
قيمة R
مع الاحتمالية pi
.
ويمكن القول بأنّ القيمة المتوقعة هي مجموع حاصل ضرب الطرفين التاليين (لجميع الأحداث الممكنة):
- احتمالية الحدث
- قيمة R في ذلك الحدث.
أمثلة:
- القيمة المتوقعة للنقاط في المثال السابق
= 50 * (1/2) + (-50) * (1/2) = 0
- والقيمة المتوقعة لرمي زهر سداسي الوجوه =
1(1/6) + 2(1/6) + .... + 6*(1/6) = 3.5
خطية التوقع Linearity of Expectations
لنفترض أن R1
و R2
متغيران عشوائيان مجرّدان في فضاء احتمالية معين، فإنّ:
E[R1 + R2] = E[R1] + E[R2]
القيمة المتوقعة لمجموع الأرقام الناتجة من رمي الزهر ثلاث مرات = 3 * 7/2 = 10.5
عدد المحاولات المتوقع قبل تحقيق النجاح
إذا كانت احتمالية النجاح في كل محاولة هي p
فإن العدد المتوقع للمحاولات قبل تحقيق النجاح هو 1/p
.
لنفترض أنّ سنرمي زهرًا سداسي الوجوه إلى حين الحصول على الرقم 5
، فإنّ عدد الرميات المتوقعة قبل الحصول على الرقم 5
هو 6
رميات. لاحظ بأنّ احتمالية الحصول على الرقم 5
هي 1/6
في كل رمية، وبهذا يكون عدد المحاولة 1/(1/6)
= 6
.
وفي خوارزمية الترتيب السريع والتي تبحث فيها الخوارزمية عن العناصر المحورية إلى أن تختار العنصر الوسطي n/2
فإنّ عدد المحاولات المتوقعة للعثور لاختيار العنصر الوسطي سيكون 2
وذلك لأنّ احتمالية اختيار أحد العناصر الوسطية هو 1/2
.
الخوارزمية العشوائية
الخوارزمية العشوائية هي خوارزمية تستخدم عددًا عشوائيًا لتقرر الخطوة التالية في سير عملها، فعلى سبيل المثال تستخدم خوارزمية الترتيب السريع العشوائية عددًا عشوائيًا لاختيار العنصر الوسطي (pivot) التالي، وهناك خوارزميات لتغيير ترتيب العناصر في المصفوفة عشوائيًا، وتنتخب خوارزمية Karger ضلعًا بطريقة عشوائية.
تحليل الخوارزميات العشوائية
تمتلك بعض الخوارزميات العشوائية تعقيدًا زمنيًا محدّدًا، فعلى سبيل المثال تمتلك إحدى طرق تنفيذ خوارزمية Karger تعقيدًا زمنيًا قدره O(E)
، ويسمّى مثل هذه الخوارزميات بخوارزميات مونتي كارلو Monte Carlo Algorithms ويسهل تحليل هذه الخوارزميات في الحالات السوأى.
وفي المقابل يعتمد التعقيد الزمني لبعض الخوارزميات العشوائية على قيمة المتغير العشوائي، وتسمى هذه الخوارزميات بخوارزميات لاس فيغاس Las Vegas، ويجري تحليل هذه الخوارزميات عادة في الحالات السوأى المتوقعة.
وتتطلب عملية حساب الوقت الذي يتوقع أن تستغرقه الحالة السوأى الأخذ بنظر الاعتبار جميع القيم الممكنة للمتغير العشوائي المستخدم في الحالة السوأى وتقدير الوقت الذي تستغرقه كل قيمة محتملة، ويكون الوقت الذي يتوقع أن تستغرقه الحالة السوأى هو معدّل جميع الأوقات التي جرى تقييمها. ويجدر التنبيه إلى إمكانية الاستفادة من خاصية خطّية التوقعات Linearity of Expectations والعدد المتوقع للمحاولات قبل تحقيق النجاح في تحليل هذا النوع من الخوارزميات.
تصنيف الخوارزميات العشوائية
تصنف الخوارزميات العشوائية إلى صنفين هما:
- خوارزميات لاس فيغاس Las Vegas Algorithms
- خوارزميات مونتي كارلو Monte Carlo Algorithms
خوارزميات لاس فيغاس
تعطي هذه الخوارزميات نتائج صحيحة أو مثالية دائمًا، ويعتمد التعقيد الزمني فيها على قيمة عشوائي، ويحسب التعقيد الزمني كقيمة متوقعة expected value. ترتّب خوارزمية الترتيب السريع العشوائي - على سبيل المثال - عناصر المصفوفة المدخلة بتعقيد زمني يتوقّع أن تكون قيمته O(nLogn)
في الحالة السوأى.
خوارزميات مونتي كارلو
تعطي هذه الخوارزميات نتائج صحيحة أو مثالية مع بعض الاحتمالية، ويكون التعقيد الزمني لهذا النوع من الخوارزميات العشوائية محدّدًا ويمكن تحليل الحالة السوأى لها بسهولة. فعلى سبيل المثال تنتج إحدى طرق تنفيذ خوارزمية كارك المقطع الأصغر minimum cut مع احتمالية تكون أكبر من 1/n^2
(تمثّل n
عدد الرؤوس في الرسم البياني)، ويبلغ التعقيد الزمني في الحالة السوأى المقدار O(E)
. وتعدّ طريقة فيرميت Fermet Method للتحقق من الأعداد الأولية إحدى الأمثلة المعروفة عن خوارزميات مونتي كارلو.
يوضّح المثال التالي الفرق بين التصنيفين:
لنفترض وجود مصفوفة ثنائية Binary array نصف عناصرها 0
والنصف الآخر 1
. المطلوب هو إيجاد موقع أي من الواحدات.
تنفيذ هذه المهمة عن طريق خوارزمية لاس فيغاس يتطلب الاستمرار في اختيار عنصر عشوائي إلى حين الوصول إلى الرقم 1
. أما خوارزمية مونتي كارلو فستستمر في اختيار عنصر عشوائي إلى حين الوصول إلى الرقم 1
أو الوصول إلى أقصى عدد مسموح به من المحاولات (ليكن k
).
تعثر خوارزمية لاس فيغاس دائمًا على موقع للرقم 1
، ولكن التعقيد الزمني يكون قيمة غير محدّدة وإنّما متوقعة، إذ إنّ العدد المتوقع للمحاولات قبل تحقيق النجاح هو 2
، وهذا يعني أنّ التعقيد الزمني المتوقع هو O(1)
. أما خوارزمية مونتي كارلو فتعثر على 1
مع احتمالية تقدّر بالقيمة [1 - (1/2)k]
، ويبلغ التعقيد الزمني المقدار O(k)
وهو قيمة محدّدة.
التطبيقات ونطاق الاستخدام
- لنفترض وجود أداة مهمّتها إجراء عملية الترتيب، ولنفترض أنّ هناك عددًا كبيرًا من الأشخاص الذين يستخدمون هذه الأداة مع مصفوفات مرتّبة أصلًا. إن استخدمت الأداة خوارزمية الترتيب السريع العادية (وليست العشوائية) فإنّ هؤلاء المستخدمين سيواجهون الحالة السوأى دائمًا. ولكن إن استخدمت الأداة خوارزمية الترتيب السريع العشوائية، فإنّ التعقيد الزمني الذي سيحصل عليه جميع المستخدمين بدون استثناء هو التعقيد الزمني المتوقّع لهذه الخوارزمية وهو
O(n Log n)
. - تستخدم الخوارزميات العشوائية استخدامًا واسعًا في عمليات التشفير.
- موازنة الأحمال Load Balancing.
- تطبيقات في علم الأعداد: اختبار الأعداد الأولية.
- بنى المعطيات: التقطيع، الترتيب، البحث، إحصائيات الترتيب Order Statistics، والهندسة الحاسوبية.
- المعادلات الجبرية: متعددات الحدود والمصفوفات. أنظمة البرهنة التفاعلية.
- البرمجة الرياضية: خوارزميات أسرع للبرمجة الخطية، تقريب نتائج البرامج الخطية إلى نتائج البرامج الصحيحة.
- خوارزميات الرسوم البيانية: الشجرة الممتدة الصغرى، المسار الأقصر، المقاطع الصغرى.
- التعداد: بنى المصفوفات ذات العد الاندماجي الدائم Matrix permanent Counting combinatorial structures.
- الحوسبة المتوازية والموزّعة.
- إلغاء العشوائية: تُقترح في البداية خوارزمية عشوائية ثم يجري النقاش حول ما إذا كان بالإمكان إزالة العشوائية للحصول على نتائج محدّدة.
خوارزمية الترتيب السريع العشوائية
تنتخب خوارزمية الترتيب السريع عنصرًا من عناصر المصفوفة المراد ترتيبها وتجعله محورًا pivot لتقسّم بعد ذلك المصفوفة حول هذا العنصر إلى قسمين.
المحور الوسطي Central Pivot هو المحور الذي يقسم المصفوفة إلى قسمين يمتلك أحدهما على الأقل 1/4 من العناصر.
تنتخب خوارزمية الترتيب السريع العشوائية المحور انتخابًا عشوائيًا وفقًا لما يلي:
randQuickSort(arr[], low, high)
تأخذ الدالة المسؤولة عن إجراء الخوارزمية ثلاثة معاملات هي:
arr[]
: المصفوفة المراد ترتيبهاlow
: موقع البدايةhigh
: موقع النهاية
- إن كان
low >= hight
تتوقف الدالة عن العمل. - تنفّذ الخطوات التالية ما لم يكن المحور
x
محورًا عنصريًا:- اختيار رقم عشوائي من مجموعة الأرقام
[low..high]
، وليكن الرقم المنتخبx
. - عدّ العناصر في المصفوفة
arr[low..high]
التي تكون أصغر من العنصرarr[x]
. وليكنsc
. - عدّ العناصر في المصفوفة
arr[low..high]
التي تكون أكبر من العنصرarr[x]
، وليكنgc
. - ليكن
n = (high - low + 1)
. إن كانsc >= n/4
وكانgc >= n/4
فإنّx
هو المحور الوسطي.
- اختيار رقم عشوائي من مجموعة الأرقام
- تقسيم المصفوفة
arr[low..high]
حول المحورx
. - تنفيذ الخطوات السابقة تعاوديًا على العناصر الأصغر.
randQuickSort(arr, low, sc-1)
- تنفيذ الخطوات السابقة تعاوديًا على العناصر الأكبر.
randQuickSort(arr, high-gc+1, high)
إنّ أهمّ خطوة في عملية تحليل خوارزمية الترتيب السريع العشوائي هو الوقت الذي تستغرقه الخطوة الثانية وهو O(n)
، إذ يجب معرفة عدد الدورات التي ستمرّ بها الحلقة التكرارية قبل العثور على المحور الوسطي.
إن احتمالية أن يكون العنصر المنتخب عشوائيًا هو المحور الوسطي هي 1/2
؛ ولهذا فإنّ عدد الدورات التي ستمرّ بها حلقة while
التكرارية هي 2
، وبهذا يمكن القول أنّ التعقيد الزمني المتوقع للخطوة الثانية هو O(n)
.
التعقيد الزمني للحالة السوأى
تقسم المصفوفة في الحالة السوأى إلى قسمين، يمتلك أحدهما n/4
من العناصر والآخر 3n/4
من العناصر. ويبلغ التعقيد الزمني حينئذٍ المقدار O(Log n)
.
يجدر التنبيه إلى أنّ طريقة التنفيذ السابقة ليست هي الطريقة المثلى، وإنّما هي لتوضيح سهولة عملية تحليل الخوارزمية. تنفّذ خوارزمية الترتيب السريع العشوائية عادة باختيار عنصر عشوائي كمحور (دون استخدام الحلقات التكرارية)، أو بتغيير مواقع العناصر في المصفوفة، ويبلغ التعقيد الزمني المتوقع في الحالة السوأى لهذه الخوارزمية المقدار O(n Log n)
، ولكن تحليل الخوارزمية يكون أكثر تعقيدًا.
المتغيرات العشوائية ثنائية الحدود
المتغيرات العشوائية ثنائية الحدود Binomial Random Variables هي نوع خاص من المتغيرات العشوائية المنفصلة والتي تحسب عدد المرات التي سيقع فيها حدثٌ معين في عدد محدّد من المحاولات.
اقتراح كلمات مرور قوية
تتحقق هذه الخوارزمية من قوة كلمة المرور التي يدخلها المستخدم، وتقترح عليه عددًا منها إن لم تكن كلمة المرور التي أدخلها قوية.
توليد رموز كابتشا
رموز كابتشا CAPTCHA (اختصار للعبارة Completely Automated Public Turing test to tell Computers and Humans Apart) هي اختبار لتحديد ما إذا كان المستخدم بشرًا أو لا.
خوارزمية Fisher-Yates لإعادة الترتيب عشوائيًا
تنتج خوارزمية Fisher-Yates ترتيبًا عشوائيًا لتسلسل معين.
مصادر
- صفحة Randomized Algorithms | Set 0 (Mathematical Background) في توثيق الخوارزميات في موقع GeeksforGeeks.
- صفحة Randomized Algorithms | Set 1 (Introduction and Analysis) في توثيق الخوارزميات في موقع GeeksforGeeks.
- صفحة Randomized Algorithms | Set 2 (Classification and Applications) في توثيق الخوارزميات في موقع GeeksforGeeks.
- صفحة Discrete and continuous random variables في سلسلة الإحصاء والاحتمالات على موقع Khan Academy.