مقدمة في علوم الحاسوب النظرية › الاحتساب الاحتمالي 21 / 26 السابق التالي

الحساب الاحتمالي { #randomizedalgchap }

الحساب الاحتمالي

  • أمثلة على خوارزميات عشوائية \
  • طمأنينة أكبر في تحليل العمليات الاحتمالية وفي حدود الذيل (tail bounds) \
  • تكبير النجاح باستعمال حدود الذيل \

"في عام 1946 ... (سألتُ نفسي) ما احتمال أن تأتي لعبة كانفيلد (Canfield solitaire) المرصوصة بـ 52 ورقة في نتيجتها ناجحة؟ وبعد أن أمضيت وقتًا طويلًا في محاولة تقدير ذلك بحسابات توافيقية خالصة، تساءلتُ أليس هناك على الأرجح طريقةٌ أكثر عملية ... قد تكون ببساطة أن نرصفها مئة مرة ونكتفي بالنظر والعدّ"، ستانيسلاف أولام، 1983

"السمات البارزة في طريقتنا أنها احتمالية ... وأنّ احتمال الخطأ فيها ضئيل وقابلٌ للتحكم."، مايكل رابين، 1977

في أنظمة الحوسبة المبكّرة، بُذل جهدٌ كبير لطرد العشوائية (randomness) والضجيج (noise) إلى الخارج. كانت مكوّنات العتاد عرضةً لسلوكٍ غير حتمي (non-deterministic) لأسبابٍ عديدة، سواء كان ذلك فرطَ سخونة أنابيب التفريغ (vacuum tubes) أو حشراتٍ مادية فعلية (physical bugs) تسبّب قصرًا في الدارات (انظر الشكل التوضيحي). وهذا ما دفع جون فون نيومان (John von Neumann)، أحد رواد الحوسبة الأوائل، إلى كتابة ورقةٍ عن كيفية تصحيح أخطاء (error correct) الحساب، مقدّمًا فيها مفهومَ التكرار الاحتياطي (redundancy).

إدخالٌ سنة 1947 في دفتر السجلّات لحاسوب Harvard MARK II يحوي علّةً (bug) حقيقية تسبّبت في عطلٍ في العتاد. بإذن من مركز سطح الحرب البحري (Naval Surface Warfare Center).

ولذلك فإنّ من المدهش حقًّا أنّ العشوائية لم تبدُ عقبةً فحسب بل صحّت موردًا (_resource`) للحساب، إذ مكّنتنا من إنجاز مهامٍ بكفاءةٍ أعلى بكثير ممّا كان معروفًا من قبل. ومن أولى تطبيقاتها كان جون فون نيومان نفسه. وحين كان طريح الفراش يلعب ورقَ اللعب، لاحظ ستان أولام (Stan Ulam) أنّ حساب إحصاءات نظامٍ ما يمكن إنجازه بكثير أكبرَ سرعةً عبر تشغيل عدة محاكاةً عشوائية. وقد ذكر هذه الفكرة لفون نيومان الذي انبسط لها كثيرًا؛ فقد تبيّن أنّها كانت حاسمةً في حسابات نقل النيوترونات (neutron transport) التي كانت لازمةً لتطوير القنبلة الذرية ثمّ لاحقًا القنبلة الهيدروجينية. ولأنّ هذا المشروع كان مصنّفًا بدرجةٍ عالية، اخترع أولام وفون نيومان ومتعاونوهما الاسمَ الرمزيّ «مونت كارلو» (Monte Carlo) لهذا الأسلوب (مستوهِمينَ بالكازينوهات الشهيرة التي كان خالُ أولام يراهن فيها). ورسخ هذا الاسم، وما زالت الخوارزميات العشوائية تُعرف إلى اليوم باسم خوارزميات مونت كارلو.[1]

في هذا الفصل سنرى بعض أمثلة الخوارزميات العشوائية التي تستعمل العشوائيةَ لحساب كميةٍ ما بطريقةٍ أسرع أو أبسط ممّا كان معروفًا بغير ذلك. وسنصف الخوارزميات بأسلوبٍ غير رسميّ / بأسلوب «الشيفرة الزائفة» (pseudo-code)، لا بوصفها برامجَ آلات تورينج أو برامجَ NAND-TM/NAND-RAM. وفي نمذجة الحساب الاحتمالي سنناقش كيف نُوسِّع نماذجَ الحوسبة التي رأيناها من قبل كي تتضمّن القدرةَ على «قذف العملات» (toss coins).

يعطي هذا الفصل بعض الأمثلة عن الخوارزميات العشوائية، لنكوّن فكرةً عن سببِ كَون الاحتمال مفيدًا في الحساب. وسنرى أيضًا تقنيةَ تكبير النجاح (success amplification) التي تُعدّ مفتاحًا لكثيرٍ من الخوارزميات العشوائية.

إيجاد قطعٍ قصوى جيّدة تقريبًا

لنبدأ بالمثال التالي. تذكّر مسألةَ القطع الأقصى (maximum cut problem)، أي إيجاد القطع الذي يُعظّم عدد الحواف، انطلاقًا من رسمٍ بيانيٍّ G=(V,E)G=(V,E). هذه المسألة NP\mathbf{NP}-صعبة، ما يعني أننا لا نعرف أيّ خوارزمية فعّالة تحلّها، لكنّ التعميمَ العشوائيّ (randomization) يتيح خوارزميةً بسيطة تقطع نصف الحواف على الأقلّ:

مبرهنة — تقريب القطع الأقصى

توجد خوارزميةٌ احتماليةٌ فعّالةٌ تُعطى لها رسومٌ بيانيّ GG من nn رأسًا وmm حافة، فتُخرج قطعًا (S,S‾)(S,\overline{S}) يقطع m/2m/2 حافةً على الأقلّ من حواف GG في المتوسط.

نكتفي باختيار قطعٍ عشوائي: نختار المجموعةَ الجزئية SS من الرؤوس بأن نختار كلَّ رأس vv ليكون عضوًا في SS باحتمال 1/21/2 وبشكلٍ مستقلّ. وليس صعبًا أن نرى أنّ كلَّ حافةٍ تُقطع باحتمال 1/21/2، ومن ثمّ يكون العددُ المتوقَّع للحواف المقطوعة m/2m/2.

برهان

الخوارزمية بسيطةٌ للغاية:

اقتباس

الخوارزمية Random Cut:

المدخل: رسمٌ بيانيّ G=(V,E)G=(V,E) من nn رأسًا وmm حافة. لنرمز بـ V={v0,v1,…,vn−1}V = \{ v_0,v_1,\ldots, v_{n-1}\}.

العملية:

  1. اختر xx عشوائيًّا بالتوزيع المنتظم في {0,1}n\{0,1\}^n.

  2. اجعل S⊆VS \subseteq V هي المجموعة {vi  :  xi=1  ,  i∈[n]}\{ v_i \;:\; x_i = 1 \;,\; i\in [n] \}، وهي تضمّ كلَّ الرؤوس المقابلة لإحداثيات xx التي تتحقّق فيها xi=1x_i=1.

  3. أخرج القطع (S,S‾)(S,\overline{S}).

نُدّعي أنّ العددَ المتوقَّع للحواف التي يقطعها الخوارزمية هو m/2m/2. بالفعل، لكل حافةٍ e∈Ee \in E، نضع XeX_e المتغيّرَ العشوائيّ بحيث Xe(x)=1X_e(x)=1 إذا كانت الحافةُ ee مقطوعةً بـ xx، و Xe(x)=0X_e(x)=0 وإلّا. ولكل حافةٍ e={i,j}e =\{ i,j \} من هذه الحواف، فإنّ Xe(x)=1X_e(x)=1 إذا وفقط إذا كان xi≠xjx_i \neq x_j. ولأنّ الزوج (xi,xj)(x_i,x_j) يأخذ كلًّا من القيم 00,01,10,1100,01,10,11 باحتمال 1/41/4، فإنّ احتمال أن يكون xi≠xjx_i \neq x_j هو 1/21/2، وبالتالي E[Xe]=1/2\E[X_e]=1/2. ولو جعلنا XX المتغيّرَ العشوائيَّ الموافقَ لعدد الحواف الكلّية المقطوعة بـ SS، فإنّ X=∑e∈EXeX = \sum_{e\in E} X_e، وبالتالي، بخطّية التوقّع،

E[X]=∑e∈EE[Xe]=m(1/2)=m/2  .\E[X] = \sum_{e\in E} \E[X_e] = m(1/2) = m/2 \;.

الخوارزميات العشوائية تعمل في الحالة الأسوأ. من المغري التفكير في خوارزميةٍ عشوائيةٍ مثل خوارزمية مبرهنة — تقريب القطع الأقصى على أنّها خوارزميةٌ تعمل من أجل «رسمٍ بيانيٍّ مدخلٍ عشوائي»، لكنّها في الحقيقة أفضلُ من ذلك بكثير. فالـتوقّع في هذه المبرهنة لا يُؤخذ على اختيار الرسم البيانيّ، بل على الاختيارات العشوائية للخوارزمية وحدها. وبخاصة، لكلِّ رسمٍ بيانيٍّ GG فإنّ الخوارزمية مضمونةٌ أن تقطع نصف حواف الرسم البيانيّ المدخل في المتوسط. أي أنّ

تُخرِج الخوارزميةُ العشوائيةُ القيمةَ الصحيحة باحتمالٍ جيّد على كلِّ مدخلٍ محتمل.

سنعرّف رسميًّا أكثر في نمذجة الحساب الاحتمالي ما الذي يعنيه «احتمالٌ جيّد»، لكنّ النقطةَ الجوهرية هي أنّ هذا الاحتمال لا يُؤخذ أبدًا إلّا على اختيارات الخوارزمية العشوائية، في حين لا يُختار المدخلُ عشوائيًّا.

تكبيرُ نجاح الخوارزميات العشوائية

يمنحنا مبرهنة — تقريب القطع الأقصى خوارزميةً تقطع m/2m/2 حافةً في المتوسط. لكنّنا، كما رأينا من قبل، لا يستتبع التوقّعُ فورًا التركيزَ (concentration)، ولذلك قد يكون من المُسبق أن يحدث، حين نُشغّل الخوارزميةَ، أنّنا في معظم المرّات لا نحصل على قطعٍ يطابق التوقّع. ولحسن الحظّ، يمكننا تكبيرَ احتمال النجاح بتكرار العملية عدّةَ مرّاتٍ وإخراج أفضلِ قطعٍ نجده. ولنبدأ بالحجّة بأنّ احتمالَ نجاح الخوارزمية أعلاه في قطع m/2m/2 حافةً على الأقلّ ليس صغيرًا جدًّا.

لمّة

احتمالُ أن يقطع قطعٌ عشوائيٌّ في رسمٍ بيانيٍّ من mm حافةٍ ما لا يقلّ عن m/2m/2 حافة، هو على الأقلّ 1/(2m)1/(2m).

لننظر في الفكرة الكامنة وراء البرهان، فكّر في الحالة m=1000m=1000. في هذه الحالة يمكن أن نبيّن أنّنا سنقطع ما لا يقلّ عن 500500 حافةٍ باحتمالٍ لا يقلّ عن 0.0010.001 (وعليه خاصّةً هو أكبرُ من 1/(2m)=1/20001/(2m)=1/2000). وبالتحديد، إذا افترضنا العكس، فإنّ ذلك يعني أنّ الخوارزميةَ باحتمالٍ أكبرَ من 0.9990.999 تقطع 499499 حافةً أو أقلّ. ولأنّنا لا يمكننا أبدًا قطعَ أكثرَ من مجموع 10001000 حافة، فإنّ أعلى قيمةٍ للعدد المتوقَّع للحواف المقطوعة هي — بافتراضنا هذا — أن نقطع 499499 حافةً بالضبط باحتمال 0.9990.999، وأن نقطع 10001000 حافةٍ باحتمال 0.0010.001. ومع ذلك، حتى في هذه الحالة سيكون العددُ المتوقَّع للحواف هو 0.999⋅499+0.001⋅1000<5000.999 \cdot 499 + 0.001 \cdot 1000 < 500، وهذا يناقضُ حقيقةَ أنّنا حسبنا في مبرهنة — تقريب القطع الأقصى التوقّعَ على الأقلّ 500500.

برهان

لنجعل pp احتمالَ أن نقطع m/2m/2 حافةً على الأقلّ، ولنفرض، طلبًا للتناقض، أنّ p<1/(2m)p<1/(2m). ولأنّ عدد الحواف المقطوعة عددٌ صحيح، و m/2m/2 من مضاعفات 0.50.5، فإنّ بتعريف pp، وباحتمال 1−p1-p نقطع ما لا يزيد على m/2−0.5m/2 - 0.5 حافة. وفضلا على ذلك، ولأنّنا لا يمكننا أبدًا قطعَ أكثرَ من mm حافة، فإنّ بافتراضنا p<1/(2m)p<1/(2m) يمكننا تقييدُ العدد المتوقَّع للحواف المقطوعة من الأعلى بأنّ

pm+(1−p)(m/2−0.5)≤pm+m/2−0.5 pm + (1-p)(m/2-0.5) \leq pm + m/2-0.5

لكن إذا كان p<1/(2m)p<1/(2m) فإنّ pm<0.5pm<0.5، ومن ثمّ يكون الطرفُ الأيمن أصغرَ من m/2m/2، وهذا يناقضُ الحقيقة أنّه (كما أُثبت في مبرهنة — تقريب القطع الأقصى) العددُ المتوقَّع للحواف المقطوعة على الأقلّ m/2m/2.

تكبيرُ النجاح

لمّة يبيّن أنّ خوارزميتنا تنجح على الأقلّ بعضَ الوقت، لكنّنا نودّ أن ننجح في كلِّ الأوقات تقريبًا. والطريقةُ المحقِّقةُ لذلك هي ببساطةٍ أن نُكرِّر خوارزميتنا مرّاتٍ كثيرة، مع عشوائيةٍ جديدةٍ في كلِّ مرّة، ثمّ نُخرج أفضلَ قطعٍ نحصل عليه في إحدى هذه التكرارات. ويبيّن أنّنا سنحصل، باحتمالٍ شديدِ الارتفاع، على قطعٍ من حجمٍ لا يقلّ عن m/2m/2. على سبيل المثال، إن كرّرنا هذه التجربة 2000m2000m مرّة، فإنّنا (باستعمال المتباينة (1−1/k)k≤1/e≤1/2(1-1/k)^k \leq 1/e \leq 1/2) نستطيع أن نبيّن أنّ احتمالَ ألّا نقطع مرّةً واحدةً m/2m/2 حافةً على الأقلّ، حيث k=2mk=2m، هو على الأكثر

(1−1/(2m))2000m=(1−1/k)1000k=((1−1/k)k)1000≤2−1000  . (1-1/(2m))^{2000 m} = (1-1/k)^{1000 k} = ((1-1/k)^{k})^{1000} \leq 2^{-1000} \;.

وبشكلٍ أعمّ، يمكن للحسابات نفسها أن تُستخدم لإثبات المبرهنة التالية:

لمّة

توجد خوارزميةٌ تُعطى لها رسمٌ بيانيّ G=(V,E)G=(V,E) وعددٌ kk، فتعمل في زمنٍ متعدّدِ الحدود في ∣V∣|V| و kk وتُخرج قطعًا (S,S‾)(S,\overline{S}) بحيث Pr⁡[number of edges cut by (S,S‾) ≥∣E∣/2]≥1−2−k  . \Pr[ \text{number of edges cut by $(S,\overline{S})$ } \geq |E|/2 ] \geq 1- 2^{-k} \;.

برهان

ستعمل الخوارزميةُ على النحو التالي:

اقتباس

الخوارزمية AMPLIFY RANDOM CUT:

المدخل: رسمٌ بيانيّ G=(V,E)G=(V,E) من nn رأسًا وmm حافة. لنرمز بـ V={v0,v1,…,vn−1}V = \{ v_0,v_1,\ldots, v_{n-1}\}. العدد k>0k>0.

العملية:

  1. كرّر الخطوات التالية 200km200km مرّة:

    a. اختر xx عشوائيًّا بالتوزيع المنتظم في {0,1}n\{0,1\}^n.

    b. اجعل S⊆VS \subseteq V هي المجموعة {vi  :  xi=1  ,  i∈[n]}\{ v_i \;:\; x_i = 1 \;,\; i\in [n] \}، وهي تضمّ كلَّ الرؤوس المقابلة لإحداثيات xx التي تتحقّق فيها xi=1x_i=1.

    c. إذا قطع (S,S‾)(S,\overline{S}) ما لا يقلّ عن m/2m/2 فأوقف التنفيذ وأخرج (S,S‾)(S,\overline{S}).

  2. أخرج failed

نترك إتمامَ التحليل تمرينًا للقارئ (انظر تمرين — تكبيرُ القطع الأقصى).

التكبيرُ من الجهتين

اعتمد التحليلُ أعلاه على حقيقة أنّ القطعَ الأقصى له خطأٌ من جهةٍ واحدة (one-sided error). وبهذا نعني أنّنا إن حصلنا على قطعٍ من حجمٍ لا يقلّ عن m/2m/2 فإنّنا نعرف أنّنا قد نجحنا. وهذا شائعٌ في الخوارزميات العشوائية، لكنه ليس الحالةَ الوحيدة. وبخاصة، لنفكّر في مهمّة حساب دالةٍ منطقيةٍ ما F:{0,1}∗→{0,1}F:\{0,1\}^* \rightarrow \{0,1\}. خوارزميةٌ عشوائية AA لحساب FF، عند إعطائها مدخلًا xx، قد تقذف العملات وتفلح في إخراج F(x)F(x) باحتمالٍ، مثلًا، 0.90.9. نقول إنّ لـ AA خطأً من الجهتين (two-sided errors) إذا كان هناك احتمالٌ موجب أن يُخرج A(x)A(x) القيمةَ 11 عندما يكون F(x)=0F(x)=0، واحتمالٌ موجب أن يُخرج A(x)A(x) القيمةَ 00 عندما يكون F(x)=1F(x)=1. وفي هذه الحالة، لا يمكننا — لتكبير نجاح AA — أن نكتفي بتكرارها kk مرّةٍ وإخراج 11 إذا أعطت إحدى تلك التكراراتِ 11، ولا أن نُخرج 00 إذا أعطت إحدى التكراراتِ 00. لكنّنا نستطيع إخراجَ القيمة الأكثر تكرارًا (majority value) في هذه التكرارات. وبموجب حدّ شيرنوف (Chernoff bound) (مبرهنة — حدّ تشرنوف/هويفدينغ)، فإنّ احتمالَ أن يكون أسّيَّ القرب من 11 (أي 1−2Ω(k)1-2^{\Omega(k)}) هو احتمالَ أن نسبةَ التكرارات التي يُخرج فيها AA القيمةَ F(x)F(x) ستكون على الأقلّ، مثلًا، 0.890.89، وفي هذه الحالات سنُخرج بالطبع الإجابةَ الصحيحة.

ينتقل ما سبق إلى المبرهنة التالية

مبرهنة — التكبيرُ من الجهتين

إذا كانت F:{0,1}∗→{0,1}F:\{0,1\}^* \rightarrow \{0,1\} دالةً بحيث توجد خوارزميةٌ AA تعمل في زمنٍ متعدّدِ الحدود وتُحقّق Pr⁡[A(x)=F(x)]≥0.51 \Pr[A(x) = F(x)] \geq 0.51 لكلّ x∈{0,1}∗x\in \{0,1\}^*, فإنّ هناك خوارزميةً BB تعمل في زمنٍ متعدّدِ الحدود وتُحقّق Pr⁡[B(x)=F(x)]≥1−2−∣x∣ \Pr[ B(x) = F(x) ] \geq 1 - 2^{-|x|} لكلّ x∈{0,1}∗x\in \{0,1\}^*.

نُغفل برهانَ مبرهنة — التكبيرُ من الجهتين، لأنّنا سنُثبت نتيجةً أعمّ لاحقًا في مبرهنة — التكبير.

ماذا يعني هذا؟

لقد بيّنا خوارزميةً احتماليةً تُخرج، على أيّ رسمٍ بيانيٍّ GG من mm حافة، قطعًا من حجمٍ لا يقلّ عن m/2m/2 حافةٍ باحتمالٍ لا يقلّ عن 1−2−10001-2^{-1000}. وهل يعني ذلك أنّ بإمكاننا اعتبارُ هذه المسألة «سهلة»؟ وهل ينبغي لنا أن نُحذّر قليلًا من استعمال خوارزميةٍ احتمالية، ما دام قد تفشل أحيانًا؟

أوّلًا، من المهمّ أن نشدّد على أنّ هذا ما يزال ضمانًا في الحالةِ الأسوأ (worst case). أي إنّنا لا نفترض شيئًا عن الرسم البيانيّ المدخل: فالاحتمال يعود فقط إلى العشوائية الداخلية للخوارزمية. ولو بدت الخوارزميةُ الاحتماليةُ أقلَّ إرضاءً مقارنةً بخوارزميةٍ حتميةٍ مضمونةٍ أن تعطي مخرجًا، فلتُدرك معنى احتمالِ فشلٍ قدره 2−10002^{-1000}، ولاحظ ما يلي:

  • احتمالُ الفوز في سحبِ يانصيب ماساتشوستس Mega Millions هو واحدٌ على (75)5⋅15(75)^5\cdot 15، أي ما يقارب 2−352^{-35}. ومن ثمّ فإنّ 2−10002^{-1000} يقابل الفوزَ باليانصيب نحوَ 300300 مرّةٍ متتالية، وعندئذٍ ربّما لا يهتمّك كثيرًا فشلُ خوارزميتك.

  • احتمالُ أن يصيبَ ساكنٌ في الولايات المتحدة صاعقةَ برقٍ هو نحو 1/7000001/700000، ويقابل ذلك احتمالًا قدره نحو 2−452^{-45} أن تصيبك صاعقةٌ في الثانيةِ ذاتها التي تقرأ فيها هذه الجملة (وبعدها أيضًا ربّما لا يهتمّك كثيرًا أداءُ الخوارزمية).

  • ولأنّ عمر الأرض نحوَ 5 مليارات سنة، يمكننا تقديرُ احتمال أن يصيبنا في هذه اللحظةِ بعينها كوكبٌ صغيرٌ بحجم الكوكب الذي أدّى إلى انقراض الديناصورات بنحو 2−602^{-60}. ومن المرجّح جدًّا أن تفشل خوارزميةٌ حتميةٌ أيضًا إن حدث هذا.

إذن، من الناحية العملية، الخوارزميةُ الاحتماليةُ لا تقلّ قيمةً عن الخوارزمية الحتمية. لكنّ السؤالَ نظريًّا يبقى مثيرًا للاهتمام: هل تمنح الخوارزمياتُ العشوائيةُ فعليًّا قوةً أكبر، أم أنّه لكلِّ مسألةٍ حسابيةٍ يمكن حلّها بخوارزميةٍ احتماليةٍ توجد خوارزميةٌ حتميةٌ تكادُ يكون أداؤها متساويًا؟[2] على سبيل المثال، سنرى في تمرين — خوارزميةُ قطعٍ حتمية أنّ هناك بالفعل خوارزميةً حتميةً تستطيع قطعَ m/2m/2 حافةً على الأقلّ في رسمٍ بيانيٍّ من mm حافة. وسنناقش هذا السؤال بصفةٍ عامّةٍ في نمذجة الحساب الاحتمالي. ول الآن، لنرَ مثالين أو ثلاثة تؤدّي فيها العشوائيةُ إلى خوارزمياتٍ أفضلَ بإحدى المعاني من الخوارزميات الحتمية المعروفة.

حلُّ SAT بالتعميم العشوائي

مسألةُ 3SAT NP\mathbf{NP} صعبة، ومن ثمّ من المرجّح ألّا يكون لها خوارزميةُ زمنٍ متعدّدِ الحدود (ولا حتى أسّيّ-فرعي (subexponential)). لكنّ هذا لا يعني أنّنا لا نستطيع أن نفعل أفضلَ قليلًا على الأقلّ من الخوارزمية البديهية 2n2^n لمسألة 3SAT ذاتِ nn متغيّرًا. أفضلُ الخوارزميات المعروفة للحالةِ الأسوأ لمسألة 3SAT هي خوارزمياتٌ عشوائية، وهي مرتبطةٌ بالخوارزمية البسيطة التالية، وتُستعمل في الممارسة العمليّة صورٌ منها أيضًا:

اقتباس

خوارزمية WalkSAT:

المدخل: صيغةُ 3CNF φ\varphi من nn متغيّرًا.

المعاملات: T,S∈NT,S \in \N

العملية:

  1. كرّر الخطوات التالية TT مرّة:

    a. اختر تعيينًا عشوائيًّا x∈{0,1}nx\in \{0,1\}^n وكرّر الخطوات التالية SS مرّة:

    1. إذا كان $x$ يُحقِّق $\varphi$ فأخرج $x$.
    
    2. وإلّا، اختر بندًا عشوائيًّا $(\ell_i \vee \ell_j \vee \ell_k)$ لا يُحقِّقه $x$، واختر حدًّا (literal) عشوائيًّا في $\ell_i,\ell_j,\ell_k$، وعدّل $x$ بحيث يُحقِّق هذا الحدّ.
    
  2. إذا لم تؤدِّ التكراراتُ T⋅ST\cdot S السابقةُ كلُّها إلى تعيينٍ مُحقِّق، فأخرج Unsatisfiable

زمنُ تنفيذ هذه الخوارزمية هو S⋅T⋅poly(n)S\cdot T \cdot poly(n)، ولذلك فإنّ السؤالَ الجوهريّ هو: كم يمكن أن نجعل SS و TT صغيرين بحيث يصبح احتمالُ أن تُخرج WalkSAT القيمةَ Unsatisfiable على صيغةٍ مُحقِّقة φ\varphi صغيرًا. من المعروف أنّنا نستطيع فعلَ ذلك مع ST=O~((4/3)n)=O~(1.333…n)ST = \tilde{O}((4/3)^n) = \tilde{O}(1.333\ldots^n) (انظر تمرين — تحليلٌ أفضلُ لخوارزمية walksat لنتيجةٍ أضعف)، لكنّنا سنبيّن أدناه تحليلًا أبسطَ يعطي ST=O~(3n)=O~(1.74n)ST= \tilde{O}(\sqrt{3}^n) = \tilde{O}(1.74^n)، وهو ما يبقى أفضلَ بكثير من الحدّ البديهي 2n2^n.[3]

مبرهنة — تحليلٌ بسيطٌ لخوارزمية WalkSAT

إذا وضعنا T=100⋅3nT=100\cdot \sqrt{3}^{n} و S=n/2S= n/2، فإنّ احتمالَ أن نُخرج Unsatisfiable من أجل صيغةٍ مُحقِّقة φ\varphi هو على الأكثر 1/21/2.

برهان

لنفرض أنّ φ\varphi صيغةٌ مُحقِّقة، ولتجعل x∗x^* تعيينًا مُحقِّقًا لها. لكلّ x∈{0,1}nx\in \{0,1\}^n، نرمز بـ Δ(x,x∗)\Delta(x,x^*) إلى عدد الإحداثيات التي تختلف فيها xx عن x∗x^*. جوهرُ البرهان هو المُدّعى التالي:

المُدّعى I: لكلِّ x,x∗x,x^* كما سبق، في كلِّ خطوةِ تحسينٍ محلّيّ، تنخفض قيمةُ Δ(x,x∗)\Delta(x,x^*) بمقدارِ واحدٍ باحتمالٍ لا يقلّ عن 1/31/3.

برهانُ المُدّعى I: بما أنّ x∗x^* تعيينٌ مُحقِّق، فإنّ إذا كان CC بندًا لا يُحقِّقه xx، فلا بدّ أن يأخذ أحدُ المتغيّرات الموجودة في CC قيمةً مختلفةً في xx و x∗x^*. وعليه، حين نغيّر xx باستخدام أحد الحدود الثلاثة الموجودة في البند، يكون لدينا احتمالٌ لا يقلّ عن 1/31/3 لأن تنقص المسافة.

المُدّعى الثاني هو أنّ نقطةَ انطلاقنا ليست سيّئةً إلى هذا الحدّ:

المُدّعى 2: باحتمالٍ لا يقلّ عن 1/21/2 على x∈{0,1}nx\in \{0,1\}^n عشوائي، لدينا Δ(x,x∗)≤n/2\Delta(x,x^*) \leq n/2.

برهانُ المُدّعى II: لنفكّر في الدالة FLIP:{0,1}n→{0,1}nFLIP:\{0,1\}^n \rightarrow \{0,1\}^n التي تقلب ببساطةٍ «كلَّ» بتات مُدخلها من 00 إلى 11 ومن 11 إلى 00. أي أنّ FLIP(x0,…,xn−1)=(1−x0,…,1−xn−1)FLIP(x_0,\ldots,x_{n-1}) = (1-x_0,\ldots,1-x_{n-1}). من الواضح أنّ FLIPFLIP أحاديةٌ (one-to-one). وفضلا على ذلك، إذا كانت المسافةُ بين xx و x∗x^* هي kk، فإنّ المسافةَ بين FLIP(x)FLIP(x) و x∗x^* هي n−kn-k. الآن لنجعل BB «الحدثَ السيّئ» الذي تكون فيه xx على مسافةِ >n/2>n/2 من x∗x^*. عندئذٍ المجموعةُ A=FLIP(B)={FLIP(x)  :  x∈B}A = FLIP(B) = \{ FLIP(x) \;:\; x\in B \} تُحقِّق ∣A∣=∣B∣|A|=|B|، وأنّ إذا كان x∈Ax\in A فإنّ xx على مسافةِ <n/2<n/2 من x∗x^*. ولأنّ AA و BB حدثان منفصلان، فإنّ Pr⁡[A]+Pr⁡[B]≤1\Pr[A] + \Pr[B] \leq 1. ولأنّ لهما الحجمَ نفسه فإنّ لهما الاحتمالَ نفسه، ومن ثمّ نحصل على 2Pr⁡[B]≤12\Pr[B] \leq 1 أي Pr⁡[B]≤1/2\Pr[B] \leq 1/2. (انظر أيضًا الشكل التوضيحي).

يترتّب على المُدّعين I و II أنّ كلًّا من تكرارات الحلقة الخارجية البالغة TT ينجح باحتمالٍ لا يقلّ عن 1/2⋅3−n1/2\cdot\sqrt{3}^{-n}. فبالحقّ، بواسطة المُدّعى II، سيُحقِّق التخمينُ الأصليّ xx الشرطَ Δ(x,x∗)≤n/2\Delta(x,x^*)\leq n/2 باحتمال Pr⁡[Δ(x,x∗)≤n/2]≥1/2\Pr[\Delta(x,x^*)\leq n/2]\geq 1/2. وبالمُدّعى I، حتى مع الاشتراط على كامل التاريخ السابق، فإنّ لكلِّ واحدةٍ من خطوات الحلقة الداخلية البالغة S=n/2S = n/2 لدينا احتمالٌ لا يقلّ عن 1/31/3 في أن نكون «محظوظين» فنخفض المسافة (أي خرجَ Δ\Delta) بمقدارِ واحد. ومن ثمّ فإنّ احتمالَ أن نكون محظوظين في الخطوات n/2n/2 كلِّها هو على الأقلّ (1/3)n/2=3−n(1/3)^{n/2} = \sqrt{3}^{-n}.

ولأنّ كلَّ تكرارٍ من تكرارات الحلقة الخارجية منفردًا ينجح باحتمالٍ لا يقلّ عن 12⋅3−n\tfrac{1}{2} \cdot \sqrt{3}^{-n}، فإنّ احتمالَ ألّا ننجح في التكرارات T=1003nT=100 \sqrt{3}^{n} مرّةً هو على الأكثر (1−123n)100⋅3n≤(1/e)50(1-\tfrac{1}{2\sqrt{3}^{n}})^{100\cdot \sqrt{3}^n} \leq (1/e)^{50}.

لكلّ ، يمكننا فرز كلّ النصوص في  بحسب بعدها عن  (من الأعلى إلى الأسفل في الشكل أعلاه)، حيث نجعل  هي «النصف العلوي» من النصوص. وإذا عرَّفنا  بوصفها التطبيق الذي «يقلب» بتات النصّ المُعطى  فإنّها تُطابق كلّ  بمخرج  تطبيقًا واحدًا-لواحد، وممّا يُظهر أنّ  وهو ما يستلزم أنّ  وبالتالي .

المطابقةُ الثنائية

مسألةُ المطابقة (matching) من المسائل النموذجية في التحسين، وتظهر في كلِّ أنواع التطبيقات: مطابقةُ السكان بالمستشفيات، ومطابقةُ متبرّعي الكلى بالمرضى، ومطابقةُ الرحلات بالطواقم، وغيرها كثير. ومن صورها النموذجية المطابقةُ التامّةُ الثنائية (bipartite perfect matching). في هذه المسألة، يُعطى لنا رسمٌ ثنائيّ G=(L∪R,E)G = (L\cup R,E) له 2n2n رأسًا موزّعةً على مجموعتين LL و RR من حجم nn لكلٍّ منهما، بحيث لكلِّ حافةٍ طرفٌ في LL والطرفُ الآخر في RR. الهدفُ هو تحديدُ ما إذا كانت هناك مطابقةٌ تامّة (perfect matching)، أي مجموعةٌ جزئية M⊆EM \subseteq E من nn حافةٍ متمايزة (متباعدة). أي أنّ MM تطابق كلَّ رأسٍ في LL برأسٍ فريدٍ في RR.

/images/introtcs/lec_16_randomized_alg-2.webp

تبيّن أنّ مسألةَ المطابقة الثنائية لها خوارزميةُ زمنٍ متعدّدِ الحدود، إذ يمكننا اختصارُ إيجاد مطابقةٍ في GG إلى إيجاد أقصى تدفّقٍ (أو بما يكافئه، أصغر قطعٍ) في رسمٍ بيانيٍّ ذي صلة G′G' (انظر الشكل التوضيحي). غير أنّنا سنرى خوارزميةً احتماليةً مختلفةً لتحديد ما إذا كان رسمٌ بيانيٌّ ما يحتوي على هذه المطابقة.

لنسمِّ رؤوسَ GG بـ L={ℓ0,…,ℓn−1}L = \{ \ell_0,\ldots,\ell_{n-1} \} و R={r0,…,rn−1}R = \{ r_0, \ldots, r_{n-1} \}. تتوافق المطابقةُ MM مع تبديلٍ (permutation) π∈Sn\pi \in S_n (أي دالةٍ أحاديةٍ تامّة π:[n]→[n]\pi: [n] \rightarrow [n])، حيث لكلِّ i∈[n]i\in [n] نُعرِّف π(i)\pi(i) بأنّه jj الفريدُ بحيث تحتوي MM على الحافة {ℓi,rj}\{ \ell_i ,r_j \}. نُعرِّف مصفوفةً A=A(G)A=A(G) بحجم n×nn\times n بحيث Ai,j=1A_{i,j}=1 إذا وفقط إذا كانت الحافةُ {ℓi,rj}\{\ell_i,r_j\} موجودة، و Ai,j=0A_{i,j}=0 وإلّا. يوحي التطابقُ بين المطابقات والتبديلات بالمُدّعى التالي:

لمّة — متعدّدُ حدود المطابقة

نُعرِّف P=P(G)P=P(G) على أنّه المتعدّدُ الحدود الذي يحوّل Rn2\R^{n^2} إلى R\R بحيث P(x0,0,…,xn−1,n−1)=∑π∈Sn(∏i=0n−1sign(π)Ai,π(i))∏i=0n−1xi,π(i) P(x_{0,0},\ldots,x_{n-1,n-1}) = \sum_{\pi \in S_n} \left( \prod_{i=0}^{n-1} sign(\pi)A_{i,\pi(i)} \right) \prod_{i=0}^{n-1} x_{i,\pi(i)}

عندئذٍ يملك GG مطابقةً تامّةً إذا وفقط إذا لم يكن PP متطابقًا مع الصفر. أي أنّ GG يملك مطابقةً تامّةً إذا وفقط إذا وُجد تعيينُ x=(xi,j)i,j∈[n]∈Rn2x=(x_{i,j})_{i,j\in [n]} \in \R^{n^2} بحيث P(x)≠0P(x) \neq 0.[4]

برهان

إذا كان لـ GG مطابقةٌ تامّة M∗M^*، فليكن π∗\pi^* التبديلَ الموافقَ لـ MM، وليكن x∗∈Rn2x^* \in \mathbb{R}^{n^2} معرَّفًا على النحو التالي: xi,j=1x_{i,j}=1 إذا كان j=π∗(i)j=\pi^*(i) و xi,j∗=0x^*_{i,j}=0 وإلّا. (أي أنّ xi,j∗=1x^*_{i,j}=1 إذا وفقط إذا كان π∗(i)=j\pi^*(i)=j.) نُدّعي أنّ P(x∗)=sign(π∗)P(x^*) = sign(\pi^*) وهو ما يعني خصوصًا أنّ PP ليست متطابقةً مع الصفر. ولرؤية سببِ صحّة ذلك، نكتب P(x∗)=∑π∈Snsign(π)Pπ(x∗)P(x^*) = \sum_{\pi \in S_n} sign(\pi) P_\pi(x^*) حيث Pπ(x∗)=∏i=0n−1Ai,π(i)xi,π(i)∗P_\pi(x^*)=\prod_{i=0}^{n-1} A_{i,\pi(i)} x^*_{i,\pi(i)}. لكن لكلّ π≠π∗\pi \neq \pi^* يوجد ii بحيث π(i)≠π∗(j)\pi(i) \neq \pi^*(j)، ومن ثمّ xi,π(i)∗=0x^*_{i,\pi(i)}=0، أي أنّ Ππ(x∗)=0\Pi_{\pi}(x^*)=0. ومن جهةٍ أخرى، بما أنّ π∗\pi^* مطابقةٌ في GG، فإنّ Ai,π∗(i)=1A_{i,\pi^*(i)}=1 لكلّ ii، ومن ثمّ Pπ∗(x∗)=∏i=0n−1Ai,π∗(i)xi,π∗(i)∗=1P_{\pi^*}(x^*) = \prod_{i=0}^{n-1} A_{i,\pi^*(i)} x^*_{i,\pi^*(i)}=1، وبالتالي P(x∗)=sign(π∗)P(x^*) = sign(\pi^*).

ومن جهةٍ أخرى، نفرض أنّ PP ليست متطابقةً مع الصفر. وبموجب المعادلة، فإنّ هذا يعني أنّه يوجد x∈{0,1}n2x \in \{0,1\}^{n^2} وتبديلُ π\pi بحيث ∏i=0n−1Ai,π(i)xi,π(i)≠0\prod_{i=0}^{n-1}A_{i,\pi(i)}x_{i,\pi(i)} \neq 0. لكن كي يحدث هذا، فلا بدّ من أن يكون Ai,π(i)≠0A_{i,\pi(i)} \neq 0 لكلّ ii، أي أنّ الحافة (i,π(i))(i,\pi(i)) موجودةٌ في الرسم البياني لكلِّ ii، وبالتالي فإنّ π\pi مطابقةٌ تامّةٌ في GG.

وكما رأينا من قبل، لكلّ x∈Rn2x \in \R^{n^2} نستطيع حسابُ P(x)P(x) بحساب مُحدِّد (determinant) المصفوفة A(x)A(x)، التي تُحصل باستبدال Ai,jA_{i,j} بـ Ai,jxi,jA_{i,j}x_{i,j}. وهذا يختزلُ اختبارَ وجود مطابقةٍ تامّةٍ إلى مسألةِ اختبارِ انعدام القيمة (zero testing) للمتعدّدات الحدود: معطى متعدّدُ حدودٍ ما P(⋅)P(\cdot)، نختبر ما إذا كان PP متطابقًا مع الصفر أم لا. والحدسُ وراء خوارزميتنا العشوائية لاختبار انعدام القيمة هو التالي:

إذا لم يكن متعدّدُ الحدود متطابقًا مع الصفر، فلا يمكن أن يكون له «عددٌ كبيرٌ جدًّا» من الجذور.

/images/introtcs/lec_16_randomized_alg-3.webp

وهذا الحدسُ يبدو إلى حدٍّ ما معقولًا. فلمتعدّدات الحدود في متغيّرٍ واحد، نعرف أنّ دالةً خطّيةً غيرَ صفريةٍ لها جذرٌ واحدٌ على الأكثر، وأنّ دالةً تربيعيةً (مثلًا قطعٌ مكافئ) لها جذران على الأكثر، وبشكلٍ عام فإنّ معادلةً من الدرجة dd لها dd جذورٍ على الأكثر. ولو كان في أكثرَ من متغيّرٍ واحد يمكن أن يكون هناك عددٌ لا نهائيّ من الجذور (مثلًا المتعدّدُ الحدود x0+y0x_0+y_0 يصيرُ صفرًا على المستقيم y=−xy=-x) فإنّ مجموعةَ الجذور تبقى «صغيرةً جدًّا» مقارنةً بمجموعة كلِّ المداخل. على سبيل المثال، تكون جذورُ متعدّدِ حدودٍ في متغيّرَين على صورةِ منحنى، وتكون جذورُ متعدّدِ حدودٍ في ثلاثةِ متغيّراتٍ على صورةِ سطح، وبشكلٍ عامٍّ تكون جذورُ متعدّدِ حدودٍ في nn متغيّرًا فضاءً من البعد n−1n-1.

يقودنا هذا الحدسُ إلى الخوارزمية العشوائية البسيطة التالية:

لتقرير ما إذا كان PP متطابقًا مع الصفر، اختر مدخلًا «عشوائيًّا» xx وتحقّق ممّا إذا كان P(x)≠0P(x)\neq 0.

وهذا معقولٌ تمامًا: إذا كانت الجذورُ «قليلةً» فقط، فإنّنا نتوقّع أن يكون المدخلُ العشوائيُّ xx باحتمالٍ عالٍ ليس أحدَ تلك الجذور. غير أنّه، حتى نحوّل هذا إلى خوارزميةٍ فعلية، نحتاج أن نجعل كلًّا من الحدس ومفهوم المدخلِ «العشوائي» دقيقًا. واختيارُ عددٍ حقيقيٍّ عشوائيٍّ مسألةٌ عويصة، خاصّةً حين لا يكون لديك سوى عددٍ منتهٍ من العملات، ولذلك نبدأ باختصار المهمّة إلى سياقٍ منتهٍ. وسنستعمل النتيجةَ التالية:

مبرهنة — مبرهنةُ شوارتز–زيبل

لكلِّ عددٍ صحيح qq، ولكلِّ متعدّدِ حدود P:Rn→RP:\R^n \rightarrow \R ذاتِ معاملاتٍ صحيحة. إذا كانت درجةُ PP على الأكثر dd ولم يكن متطابقًا مع الصفر، فإنّ له على الأكثر dqn−1dq^{n-1} جذرًا في المجموعة [q]n={(x0,…,xn−1):xi∈{0,…,q−1}}[q]^n = \{ (x_0,\ldots,x_{n-1}) : x_i \in \{0,\ldots,q-1\} \}.

نُغفل برهانَ مبرهنة — مبرهنةُ شوارتز–زيبل (وهو ليس معقّدًا جدًّا). ونلاحظ أنّها لا تصحّ على الأعداد الحقيقية فحسب، بل على أيِّ حقلٍ (field) أيضًا. وبما أنّ متعدّدَ حدود المطابقة PP في لمّة — متعدّدُ حدود المطابقة درجتُه على الأكثر nn، فإنّ مبرهنة — مبرهنةُ شوارتز–زيبل يقودُ مباشرةً إلى خوارزميةٍ بسيطةٍ لاختبار ما إذا كان غيرَ صفريّ:

اقتباس

الخوارزمية Perfect-Matching:

المدخل: رسمٌ ثنائيّ GG على 2n2n رأسًا {ℓ0,…,ℓn−1,r0,…,rn−1}\{ \ell_0,\ldots,\ell_{n-1} , r_0,\ldots,r_{n-1} \}.

العملية:

  1. لكلِّ i,j∈[n]i,j \in [n]، اختر xi,jx_{i,j} عشوائيًّا وبشكلٍ مستقلٍّ من [2n]={0,…2n−1}[2n]=\{0,\ldots 2n-1\}.

  2. احسب مُحدِّدَ المصفوفة A(x)A(x) التي يكون فيها العنصرُ (i,j)th(i,j)^{th} مساويًا لـ xi,jx_{i,j} إذا كانت الحافةُ {ℓi,rj}\{\ell_i,r_j\} موجودة، و 00 وإلّا.

  3. أخرج no perfect matching إذا كان هذا المُحدِّدُ صفرًا، وأخرج perfect matching وإلّا.

يمكن تحسينُ هذه الخوارزمية أكثرَ (انظر مثلًا تمرين — مطابقةٌ ثنائيةٌ أسرع (تحدٍّ) (challenge)). ولو لم تكن أسرعَ بالضرورة من الخوارزميات المعتمدةِ على القطع في حلّ المطابقة التامّة، فإنّ لها بعضَ المزايا. وبخاصة، فإنّها أكثرُ ملاءمةً للتوازي. (غير أنّ لها أيضًا عيبًا كبيرًا: أنّها لا تُنتج مطابقةً، بل تكتفي بالإفادة بوجود واحدة.) ومبرهنةُ شوارتز–زيبل، وخوارزميةُ اختبارِ انعدام القيمة المرافقةُ لها للمتعدّدات الحدود، مستعملةٌ على نطاقٍ واسعٍ في علم الحاسوب، بما في ذلك عدّةُ سياقاتٍ لا نعرف فيها أيَّ خوارزميةٍ حتميةٍ تضاهي أداؤها.

خلاصة

  • باستعمال نتائجِ التركيز (concentration results)، يمكننا تكبيرَ احتمالِ نجاح خوارزميةٍ احتماليةٍ في زمنٍ متعدّدِ الحدود من 1/p(n)1/p(n) فحسب إلى 1−2−q(n)1-2^{-q(n)} لكلِّ متعدّدَي حدود pp و qq.

  • وهناك عدّةُ خوارزمياتٍ عشوائيةٍ أفضلَ بالمعاني المختلفة (مثلًا: أبسطُ، أو أسرعُ، أو لها مزايا أخرى) من أفضلِ خوارزميةٍ حتميةٍ معروفةٍ للمسألة نفسها.

التمارين

تمرين — تكبيرُ القطع الأقصى

برهن لمّة

تمرين — خوارزميةُ قطعٍ حتمية

[5]

تمرين — محاكاةُ التوزيعات باستعمال العملات

نموذجُنا للاحتمال ينطوي على قذف nn عملة، لكنّ الخوارزميات تحتاج أحيانًا إلى أخذ عيّناتٍ من توزيعاتٍ أخرى، مثل اختيارِ عددٍ بانتظامٍ في {0,…,M−1}\{0,\ldots,M-1\} لأيّ MM ما. ولحسن الحظّ، يمكننا محاكاةَ ذلك باحتمالِ خطأٍ أسّيٍّ صغيرٍ جدًّا: برهن أنّ لكلّ MM، إذا كان n>k⌈log⁡M⌉n>k\lceil \log M \rceil، فإنّ هناك دالةً F:{0,1}n→{0,…,M−1}∪{⊥}F:\{0,1\}^n \rightarrow \{0,\ldots,M-1\} \cup \{ \bot \} بحيث (1) احتمالُ أن يكون F(x)=⊥F(x)=\bot هو على الأكثر 2−k2^{-k}، و (2) توزيعُ F(x)F(x) شرطَ F(x)≠⊥F(x) \neq \bot يساوي التوزيعَ المنتظمَ على {0,…,M−1}\{0,\ldots,M-1\}.[6]

تمرين — تحليلٌ أفضلُ لخوارزمية walksat

  1. برهن أنّ لكلّ ϵ>0\epsilon>0، إذا كان nn كبيرًا بما يكفي، فإنّ لكلّ x∗∈{0,1}nx^*\in \{0,1\}^n لدينا Pr⁡x∼{0,1}n[Δ(x,x∗)≤n/3]≤2−(1−H(1/3)−ϵ)n\Pr_{x \sim \{0,1\}^n}[ \Delta(x,x^*) \leq n/3 ] \leq 2^{-(1-H(1/3)-\epsilon)n} حيث H(p)=plog⁡(1/p)+(1−p)log⁡(1/(1−p))H(p)=p\log(1/p) + (1-p)\log(1/(1-p)) هي الدالةُ نفسُها في تمرين — تقريب الأنتروبيا لمعامل ثنائي الحدّ. \
  2. برهن أنّ 21−H(1/4)+(1/4)log⁡3=(3/2)2^{1-H(1/4)+(1/4) \log 3}=(3/2).
  3. استعمل ما سبق لتبرهن أنّ لكلّ δ>0\delta>0 و nn كبيرٍ بما يكفي، إذا وضعنا T=1000⋅(3/2+δ)nT=1000\cdot (3/2+\delta)^n و S=n/4S=n/4 في خوارزمية WalkSAT، فإنّ لكلّ صيغةِ 3CNF مُحقِّقة φ\varphi، يكون احتمالُ أن نُخرج unsatisfiable على الأكثر 1/21/2. \

تمرين — مطابقةٌ ثنائيةٌ أسرع (تحدٍّ) (challenge)

(قيدُ الإكمال: حسِّن خوارزميةَ المطابقة بالعمل بوحدةٍ نمطيةٍ (modulo) عددٍ أوّلي)

ملاحظاتٌ مرجعية

كتابا موتواني وراغفان [@motwani1995randomized]، وميتزنماخر وأوبفال [@mitzenmacher2017probability]، مصدران ممتازان للخوارزميات العشوائية. وبعضُ تاريخِ اكتشاف خوارزمية مونت كارلو مغطًّى هنا.

شكرٌ وتقدير


  1. تذكر بعض النصوص أيضًا «خوارزميات لاس فيغاس» (Las Vegas algorithms) التي تُعيد دائمًا الإجابة الصحيحة، لكنّ زمن تنفيذها متعدّدُ الحدود في المتوسط فقط. ولأنّ اصطلاح «مونت كارلو» في مقابل «لاس فيغاس» مُربك، فلن نستخدم هذين المصطلحين بعد الآن، وسنتحدّث ببساطةٍ عن الخوارزميات العشوائية. ↩︎

  2. ولهذا السؤال بعضُ الأهمية العملية أيضًا، إذ إنّ بناءَ عتادٍ يولّد عشوائيةً عاليةَ الجودة بسرعةٍ ليس أمرًا بديهيًّا. ↩︎

  3. في وقت كتابة هذا الكتاب، كانت أفضلُ الخوارزميات العشوائية المعروفة لمسألة 3SAT تعمل في زمنٍ نحو O(1.308n)O(1.308^n)، وكانت أفضلُ الخوارزميات الحتمية المعروفة تعمل في زمن O(1.3303n)O(1.3303^n) في الحالة الأسوأ. ↩︎

  4. يمكن تعريف إشارة التبديلِ π:[n]→[n]\pi:[n] \rightarrow [n]، والمشار إليها بـ sign(π)sign(\pi)، بعدةِ طرقٍ متكافئة، أحدها أنّها تساوي −1-1 إذا كان عددُ الأزواج x<yx<y التي تتحقّق فيها π(x)>π(y)\pi(x)>\pi(y) فرديًّا، وتساوي +1+1 وإلّا. وأهميةُ الحدّ sign(π)sign(\pi) هي أنّه يجعل PP مساويةً لـ مُحدِّد (determinant) المصفوفة (xi,j)(x_{i,j})، وبالتالي قابلةً للحساب بكفاءة. ↩︎

  5. TODO: أضف تمرينًا يُعطي خوارزميةَ قطعٍ حتميةً تُنتج m/2m/2 حافة. تحدّث عن النهج الجشِع. ↩︎

  6. تلميح: فكّر في x∈{0,1}nx\in \{0,1\}^n على أنّه اختيارُ kk عددًا y1,…,yk∈{0,…,2⌈log⁡M⌉−1}y_1,\ldots,y_k \in \{0,\ldots, 2^{\lceil \log M \rceil}-1 \}. أخرج أولَ عددٍ من هذه الأعداد يقع في {0,…,M−1}\{0,\ldots,M-1\}. ↩︎