الحساب الكفؤ: مقدمة غير رسمية { #chapefficient }
الحساب الكفؤ: مقدمة غير رسمية
- وصف بعض المسائل الحاسوبية المثيرة للاهتمام، بشكل عام. \
- الفرق بين الزمن متعدد الحدود والزمن الأسّي. \
- أمثلة على تقنيات للحصول على خوارزميات كفؤة \
- أمثلة على كيف يمكن لفروق تبدو صغيرة في المسائل أن تصنع فروقًا هائلة في تعقيدها الحاسوبي.
"مسألة التمييز بين الأعداد الأولية والأعداد المركبة، وتحليل الأخيرة إلى عواملها الأولية هي ... واحدة من أهم المسائل وأنفعها في الحساب ... غير أننا علينا أن نعترف بأن كل الطرق ... إمّا محصورة في حالات خاصة جدًّا أو مجهدة لدرجة ... أنها ترهق صبر حتى الحاسب المتمرّس ... ولا تنطبق إطلاقًا على الأعداد الأكبر."، كارل فريدريش غاوس، 1798
"للأغراض العملية، غالبًا ما يكون الفرق بين الرتبة الجبرية والأسّية أكثر أهمية من الفرق بين المتناهية وغير المتناهية."، جاك إدموندز، «المسارات والأشجار والزهور»، 1963
اقتباس
"ما هي أنجع طريقة لترتيب مليون عدد صحيح بطول 32 بتّ؟"، إريك شميت إلى باراك أوباما، 2008
"أعتقد أن الفرز الفقاعي (bubble sort) سيكون الخيار الخاطئ."، باراك أوباما.
حتى الآن كنا نبحث في أي الدوال قابلة للحساب وأيها ليس كذلك. في هذا الفصل ننظر في المسألة الأدقّ وهي الزمن الذي يستغرقه حساب الدوال، بوصفه دالة في طول مدخلها. زمن التشغيل مهم للغاية في نظريّة الحساب وفي ممارسته معًا، لكن في المقرّرات التمهيدية ومقابلات التوظيف البرمجي وفي تطوير البرمجيات، تُستعمل مصطلحات مثل «زمن تشغيل » (running time) غالبًا بصورة غير رسمية. لا يملك الناس تعريفًا دقيقًا لما هي الخوارزمية الخطية الزمن، بل يفترضون بصورة عامّة أنهم «سيعرفونها حين يرونها». في هذا الكتاب سنعرّف زمن التشغيل تعريفًا دقيقًا، مستعملين النماذج الرياضية للحساب التي طوّرناها في الفصول السابقة. وهذا سيتيح لنا طرح أسئلة مثل الآتية (والإجابة عنها أحيانًا):
-
"هل هناك دالة يمكن حسابها في زمن لكن لا يمكن حسابها في زمن ؟"
-
"هل هناك مسائل طبيعية تتطلّب فيها أفضل خوارزمية (وليس فقط أفضل خوارزمية معروفة) زمن ؟"
زمن تشغيل الخوارزمية ليس عددًا، بل هو دالة في طول المدخل.
في هذا الفصل نستعرض، بصورة غير رسمية، أمثلة على مسائل حاسوبية. لبعض هذه المسائل نعرف خوارزميات كفؤة (أي خوارزميات بزمن حيث ثابت صغير)، وبعضها الآخر أفضل خوارزمياته المعروفة أسّية.
نقدّم هذه الأمثلة لتكوين صورة عن أنواع المسائل التي تقع في كل جانب من هذا الانقسام، ولنرى أيضًا كيف يمكن أحيانًا لتغيّرات تبدو طفيفة في صياغة المسألة أن تجعل تعقيد مسألة ما (المعروف) «يقفز» من متعدد الحدود إلى أسّي. لن نعرّف رسميًا في هذا الفصل مفهوم زمن التشغيل، بل نستعمل المفهوم غير الرسمي نفسه «أعرفه حين أراه» (I know it when I see it) عن خوارزمية بزمن أو ، كما رأيت في مقرّرات مقدّمة علوم الحاسوب. سنرى في نمذجة زمن التنفيذ التعريف الدقيق لزمن التشغيل (باستعمال آلات تورينج وآلات RAM / NAND-RAM).
بينما قد يكون الفرق بين زمن وزمن مهمًّا في الممارسة، فإنّنا في هذا الكتاب نركّز على الفرق الأكبر بين زمن التشغيل متعدد الحدود و_الأسّي_. وكما سنرى، فإن الفرق بين الزمن متعدد الحدود والزمن الأسّي يكون عادةً غير حسّاس لاختيار نموذج الحساب بعينه: فخوارزمية بزمن متعدد الحدود تبقى متعدّدة الحدود سواء استعملت آلات تورينج أو آلات RAM أو عنقودًا متوازيًا بوصفه نموذج الحساب لديك، وعلى نحو مماثل تبقى خوارزمية بزمن أسّي أسّيةً على كل هذه المنصّات. ومن ظواهر الحساب اللافتة أنّه يوجد غالبًا نوعٌ من «ظاهرة العتبة» (threshold phenomenon) أو «قانون الصفر والواحد» (zero-one law) بالنسبة إلى زمن التشغيل. كثير من المسائل الطبيعية إمّا أن تُحلّ بزمن تشغيل متعدد الحدود أُسّ لا يتجاوز الحدّ اللائق (مثل أو )، أو تتطلّب زمنًا أسّيًا (مثل على الأقل أو ) لحلّها. أسباب هذه الظاهرة ليست مفهومة فهمًا كاملًا بعد، لكن مفهوم اكتمال NP (NP completeness) يلقي بعض الضوء عليها، وسنراه في صنف NP والاكتمال في NP ومبرهنة كوك-ليفن.
هذا الفصل ليس سوى عيّنة ضئيلة من مشهد المسائل الحاسوبية والخوارزميات الكفؤة. وإذا أردت أن تستكشف مجال الخوارزميات وبنى المعطيات (data structures) بعمق أكبر (وهذا ما آمله جدًّا!)، فإن الملاحظات الببليوغرافية تضم إشارات إلى نصوص ممتازة، بعضها متاح مجانًا على الويب.
ملاحظة — العلاقات بين أجزاء هذا الكتاب
الجزء الأول من هذا الكتاب تضمّن دراسة كمّية لحساب دوال متناهية. سألنا ما الموارد (بوحدة بوابات الدوائر البوليانية أو أسطر البرامج الخطّية (straight-line programs)) المطلوبة لحساب دوال متناهية مختلفة.
الجزء الثاني من الكتاب تضمّن دراسة نوعية لحساب دوال لا نهائية (أي دوال ذات طول مدخل غير محدود). في ذلك الجزء طرحنا السؤال النوعي: هل دالة ما قابلة للحساب أصلًا أم لا، بغضّ النظر عن عدد العمليات.
الجزء الثالث من الكتاب، الذي يبدأ بهذا الفصل، يجمع النهجين معًا ويضمّ دراسة كمّية لحساب دوال لا نهائية. في هذا الجزء نسأل كيف تتناسب (تتصاعد مع) الموارد اللازمة لحساب دالة مع طول المدخل. في نمذجة زمن التنفيذ نعرّف مفهوم زمن التشغيل، وصنف من الدوال التي يمكن حسابها بعدد خطوات يتناسب متعدد الحدود مع طول المدخل. وفي الحساب غير المنتظم سنربط هذا الصنف بنماذج الدوائر البوليانية والبرامج الخطّية التي درسناها في الجزء الأول.
مسائل على الرسوم البيانية
في هذا الفصل نناقش عدّة أمثلة لمسائل حاسوبية مهمّة. ستتضمّن كثير من المسائل رسومًا بيانية (graphs). لقد صادفنا الرسوم البيانية من قبل (انظر الرسوم البيانية) لكن لنستعرض الآن بسرعة الترميز الأساسي. يتكوّن الرسم البياني من مجموعة رؤوس ومجموعة حواف ، حيث كل حافة هي زوج من الرؤوس. نرمز عادةً بـ إلى عدد الرؤوس (وفي الواقع نُغني كثيرًا ما عن رسوم بيانية تكون فيها مجموعة الرؤوس مساوية للمجموعة من الأعداد الصحيحة بين و ). في الرسم البياني الموجَّه (directed)، تكون الحافة زوجًا مرتَّبًا ، ونرمز إليها أحيانًا بـ . في الرسم البياني غير الموجَّه (undirected)، تكون الحافة زوجًا غير مرتَّب (أو ببساطة مجموعة) نرمز إليها أحيانًا بـ أو . ووجهة نظر مكافئة هي أنّ الرسم البياني غير الموجَّه يقابل رسمًا بيانيًا موجَّهًا يحقّق الخاصية بأنّه متى كانت الحافة موجودة كانت الحافة موجودة أيضًا. في هذا الفصل نقيّد انتباهنا إلى رسوم بيانية غير موجّهة وبسيطة (أي التي لا تحتوي حواف متوازية ولا حلقات ذاتية). يمكن تمثيل الرسوم البيانية إمّا بترميز قائمة المجاورات (adjacency list) أو بترميز مصفوفة المجاورات (adjacency matrix). ويمكننا التحويل بين هذين التمثيلين باستعمال عمليات، ولذلك سنعتبرهما في الغالب متكافئين لأغراضنا.
الرسوم البيانية حاضرة في كل مكان في علوم الحاسوب وفي العلوم الأخرى، لأنّها يمكن أن تُستعمل لنمذجة كمٍّ كبير جدًّا من البيانات التي نصادفها. فليست هذه البيانات «الواضحة» فقط، مثل شبكة الطرق (التي يمكن أن تُنظر على أنّها رسم بياني رؤوسه مواقع والحواف فيه مقاطع طرق)، أو الويب (الذي يمكن أن يُنظر على أنّه رسم بياني رؤوسه صفحات الويب والحواف فيه الروابط)، أو الشبكات الاجتماعية (التي يمكن أن تُنظر على أنّها رسم بياني رؤوسه أشخاص والحواف فيها علاقات الصداقة). ويمكن للرسوم البيانية أيضًا أن تدلّ على الارتباطات في المعطيات (مثلًا رسم بياني لملاحظات سمات مع حواف تقابل السمات التي تميل إلى الظهور معًا)، أو العلاقات السببية (مثلًا شبكات التحكّم بالجينات، حيث يُربط الجين الواحد بمنتجات الجين الذي يشتقّ منه)، أو فضاء حالات نظام ما (مثلًا رسم بياني لتكوينات نظام فيزيائي، مع حواف تقابل الحالات التي يمكن بلوغ بعضها من بعض في خطوة واحدة).

إيجاد أقصر مسار في رسم بياني
مهمة إيجاد أقصر مسار (shortest path problem) هي، بإعطائك رسمًا بيانيًا ورأسين ، إيجاد طول أقصر مسار بين و (إذا وُجد مثل هذا المسار).
معنى ذلك أنّنا نريد إيجاد أصغر عدد بحيث توجد رؤوس بحيث و ولكل حافة بين و .
وبدقّة، نعرّف لتكون الدالة التي، عند إدخال ثلاثيّة (مُمثَّلة كسلسلة)، تُخرج العدد الذي هو طول أقصر مسار في بين و ، أو سلسلة تمثّل no path إن لم يوجد مثل هذا المسار.
(في الممارسة كثيرًا ما يريد الناس أيضًا إيجاد المسار نفسه لا طوله فقط؛ ويتبيّن أنّ الخوارزميات التي تحسب طول المسار غالبًا ما تُنتج المسار نفسه كناتج جانبي، ولذلك فإنّ كل ما نقوله عن مهمة حساب الطول ينطبق أيضًا على مهمة إيجاد المسار.)
إذا كان لكل رأس جاران على الأقل، فيمكن أن يكون عدد المسارات من إلى أسّيًا، لكن لحسن الحظ لسنا مضطرين إلى حصرها كلّها لإيجاد أقصر مسار. يمكننا إيجاد أقصر مسار باستعمال بحث بالعرض أولًا (BFS) (breadth first search)، بعدّ جيران ، ثمّ جيران الجيران، وهكذا.. بالترتيب. وإذا حافظنا على الجيران في قائمة، يمكننا إجراء BFS في زمن ، بينما نستطيع فعل ذلك في زمن عند استعمال طابور (queue)، حيث هو عدد الحواف.[1] وخوارزمية ديكتسترا (Dijkstra's algorithm) هي تعميم معروف للبحث بالعرض أولًا على الرسوم البيانية المُوزونة (weighted). وبدقّة أكثر، وُصِفت خوارزمية حساب الدالة في خوارزمية — Shortest path via BFS.
خوارزمية — Shortest path via BFS
INPUT: Graph $G=(V,E)$ and vertices $s,t\in V$. Assume $V=[n]$.
OUTPUT: Length $k$ of shortest path from $s$ to $t$ or $\infty$ -if no such path exists.
Let $D$ be length-$n$ array.
Set $D[s]=0$ and $D[i]=\infty$ -for all $i\in [n] \setminus \{s \}$.
Initialize queue $Q$ to contain $s$.
While{$Q$ non empty}
Pop $v$ from $Q$
If{$v=t$}
Return $D[v]$
Endif
For{$u$ neighbor of $v$ with $D[u]=\infty$}
Set $D[u] \leftarrow D[v]+1$
Add $u$ to $Q$.
Endfor
Endwhile
Return $\infty$
بما أنّنا لا نضيف إلى الطابور إلّا الرؤوس ذات (ونضع فورًا على عدد فعلي بعد ذلك)، فإنّنا لا ندفع برأس إلى الطابور أكثر من مرّة واحدة، وبالتالي تُجري الخوارزمية ما لا يزيد على عمليتَي «دفع» و«إخراج». ولكل رأس ، يساوي عدد مرّات تشغيل الحلقة الداخلية الدرجة (degree) لـ ، وبالتالي فإنّ زمن التشغيل الكلّي متناسب مع مجموع كل الدرجات، وهو يساوي ضعف العدد للحواف. ويعيد خوارزمية — Shortest path via BFS الإجابة الصحيحة لأنّ الرؤوس تُضاف إلى الطابور بترتيب بُعدها عن ، وبالتالي سنصل إلى بعد أن نكون قد استكشفنا كل الرؤوس التي هي أقرب إلى من .
ملاحظة — ملاحظة عن بنى المعطيات
إذا كنت قد أخذت يومًا ما مقرّرًا في الخوارزميات (algorithms)، فلا بدّ أنّك صادفت كثيرًا من بنى المعطيات (data structures) مثل القوائم (lists)، و__المصفوفات__ (arrays)، و__الطوابير__ (queues)، و__المكدّسات__ (stacks)، و__الأكوام__ (heaps)، و__أشجار البحث__ (search trees)، و__جداول التجزئة__ (hash tables) وغيرها الكثير. بنى المعطيات مهمّة للغاية في علوم الحاسوب، وكل واحدة منها توفّر مقايضات مختلفة بين حجم التخزين، والعمليات المدعومة، وكلفة كل عملية زمنيًا، وغيرها. مثلًا، إذا خزّنّا عنصرًا في قائمة، فسنحتاج إلى مسح خطّي (أي بزمن ) لاسترجاع عنصر، بينما نحصل على العملية نفسها بزمن إن استعملنا جدول تجزئة. لكن، حين لا نهتم إلّا بالخوارزميات متعدّدة الحدود، فإنّ عوامل مثل في زمن التشغيل لن تُحدث فرقًا كبيرًا. وبالمثل، إن لم نكترث للفرق بين و ، فلا يهمّ إن مثّلنا الرسوم البيانية بقوائم مجاورات أم بمصفوفات مجاورات. ولذلك سنصف خوارزمياتنا غالبًا بمستوى عالٍ جدًّا، دون تحديد بنى المعطيات بعينها المستعملة لتطبيقها. لكن سيكون واضحًا دائمًا أنّ هناك بنيةَ معطيات ما تكفي لأغراضنا.
إيجاد أطول مسار في رسم بياني
مهمة إيجاد أطول مسار (longest path problem) هي إيجاد طول أطول مسار بسيط (أي غير متقاطع) بين زوج من الرؤوس المعطى و في رسم بياني معطى . إذا كان الرسم البياني شبكة طرق، فقد يبدو أطول مسار أقلّ تبريرًا من أقصر مسار (إلّا إن كنت من النوع الذي يفضّل دائمًا «الطريق الأجمل» (scenic route)). لكنّ الرسوم البيانية تُستعمل فعلًا لنمذجة ظواهر متنوّعة، وفي كثير من هذه الحالات قد يكون إيجاد أطول مسار (وبعض صوره) مفيدًا جدًّا. وبخاصة، فإنّ إيجاد أطول مسار تعميم مسار هاملتوني المشهور (Hamiltonian path problem) الذي يطلب أطول ما يمكن من مسار بسيط (أي مسار يزور كل رؤوس الـ مرّة واحدة) بين و ، وكذلك مسألة بائع المتجوّل المشهورة (TSP) (traveling salesman problem) التي تبحث عن (في رسم بياني مُوزون) مسارًا يزور كل الرؤوس بكلفة لا تتجاوز . وهي مسألة تحسين كلاسيكية، وتطبيقاتها تمتد من التخطيط والخدمات اللوجستية إلى تسلسل DNA والفلك.
على نحو مفاجئ، بينما يمكننا إيجاد أقصر مسار في زمن ، لا توجد خوارزمية معروفة لمهمة إيجاد أطول مسار تُحسّن بشكل ملموس على خوارزمية «البحث الشامل» (exhaustive search) أو «القوة الغاشمة» (brute force) البديهية التي تحصر كل الاحتمالات الأسّية لهذه المسارات. وبالتحديد، فإنّ أفضل الخوارزميات المعروفة لمهمة إيجاد أطول مسار تستغرق زمن حيث ثابت ما. (حاليًا الرقم القياسي الأفضل هو تقريبًا؛ حتى إنّ حدّّ زمني ليس بالأمر الهيّن، انظر تمرين — خوارزمية زمن أسّي لأطول مسار.)

إيجاد أصغر قطع في رسم بياني
بإعطائك رسمًا بيانيًا ، فإنّ قطعًا (cut) لـ هو مجموعة جزئية بحيث لا تكون فارغة ولا تكون كلها. والحواف التي يقطعها هي تلك الحواف التي يكون أحد طرفَيها في والطرف الآخر في . ونرمز إلى مجموعة الحواف هذه بـ . وإذا كان زوجًا من الرؤوس، فإنّ قطع ( cut) هو قطع بحيث و (انظر الشكل التوضيحي). مهمة إيجاد أصغر قطع (minimum cut problem) هي، بإعطائك و ، إيجاد أصغر عدد بحيث يوجد قطع يقطع حافة (وتُصاغ المسألة أحيانًا أيضًا على شكل إيجاد المجموعة التي تحقّق هذا الحدّ الأدنى؛ ويتبيّن أنّ الخوارزميات التي تحسب العدد تُنتج المجموعة أيضًا). وبدقّة، نعرّف لتكون الدالة التي، عند إدخال سلسلة تمثّل ثلاثيّة لرسم بياني ورأسين، تُخرج أصغر عدد بحيث توجد مجموعة بحيث و و .

حساب أصغر قطع مفيد في تطبيقات كثيرة لأنّ أصغر قطع يقابل في غالب الأحيان اختناقات (bottlenecks). مثلًا، في شبكة اتصالات أو سكك حديد، يقابل أصغر قطع بين و أصغر عدد من الحواف التي يكفي إزالتها لفصل عن . (وهذا في الواقع كان الدافع الأصلي لهذه المسألة؛ انظر ملاحظات ببليوغرافية).) وتنشأ تطبيقات مماثلة في الجدولة والتخطيط. في سياق تجزئة الصور (image segmentation)، يمكن تعريف رسم بياني رؤوسه بكسلات وحوافه تقابل البكسلات المتجاورة ذات الألوان المختلفة. وإذا أردنا فصل المقدمة عن الخلفية، فيمكننا اختيار (أو تخمين) بكسل مقدمة وبكسل خلفية ثمّ طلب أصغر قطع بينهما.
الخوارزمية الساذجة لحساب ستفحص كل المجموعات الجزئية الممكنة لرسم بياني من رأسًا، لكنّنا نستطيع أن نفعل أفضل بكثير من ذلك. وكما رأينا مرارًا في هذا الكتاب، هناك أكثر من خوارزمية لحساب الدالة نفسها، وبعض تلك الخوارزميات قد تكون كفؤة أكثر من غيرها. ولحسن الحظ، فإنّ مسألة أصغر قطع إحدى تلك الحالات. وبخاصة، كما سنرى في القسم التالي، هناك خوارزميات تحسب في زمن متعدّد الحدود في عدد الرؤوس.
أصغر قطع وأقصى تدفّق والبرمجة الخطّية
يمكننا الحصول على خوارزمية متعدّدة الحدود لحساب باستعمال مبرهنة الحدّ الأقصى للتدفّق وأصغر قطع (Max-Flow Min-Cut Theorem). وتقول هذه المبرهنة إنّ أصغر قطع بين و يساوي أقصى كمية تدفّق (flow) يمكننا إرسالها من إلى ، إذا كانت لكل حافة سعة الوحدة. وبالتحديد، تخيّل أنّ كل حافة في الرسم البياني تقابل أنبوبًا يمكنه حمل وحدة واحدة من السائل لكل وحدة زمن (قل لترًا واحدًا من الماء في الثانية). أقصى تدفّق (maximum flow) هو أقصى عدد من وحدات الماء يمكننا نقلها من إلى عبر هذه الأنابيب. وإذا كان هناك قطع بـ حافة، فإنّ أقصى تدفّق هو على الأكثر . والسبب أنّ مثل هذا القطع يعمل كـ«اختناق» (bottleneck) لأنّ وحدة على الأكثر يمكنها التدفّق من إلى متمّمها في أي وحدة زمن معطاة. وهذا يعني أنّ أقصى تدفّق يكون دائمًا على الأكثر قيمة أصغر قطع . والمحتوى المفاجئ وغير البديهي في مبرهنة الحدّ الأقصى للتدفّق وأصغر قطع هو أنّ أقصى تدفّق هو أيضًا على الأقل قيمة أصغر قطع، وبالتالي فإنّ حساب القطع هو نفسه حساب التدفّق.
تختصر مبرهنة الحدّ الأقصى للتدفّق وأصغر قطع مهمة حساب أصغر قطع في مهمة حساب أقصى تدفّق (maximum flow). لكنّ هذا لا يوضّح بعد كيف نحسب مثل هذا التدفّق. وخوارزمية فورد–فولكرسون (Ford-Fulkerson Algorithm) هي طريقة مباشرة لحساب تدفّق عبر تحسينات تدريجية. لكنّ حساب التدفّقات في زمن متعدّد الحدود هو بدوره حالة خاصة من أداة أعمّ بكثير تُعرف بـالبرمجة الخطّية (linear programming).
يمكن نمذجة تدفّق (flow) على رسم بياني من حافة على صورة متّجه بحيث، لكل حافة ، يقابل كمية الماء المتدفّقة على لكل وحدة زمن. وننظر إلى الحافة على أنّها زوج مرتَّب (ويمكننا اختيار الترتيب بشكل اعتباطي) ونجعل كمية التدفّق التي تذهب من إلى . (وإذا كان التدفّق في الاتجاه الآخر فإنّنا نجعل سالبًا.) وبما أنّ لكل حافة سعة واحد، فإنّنا نعرف أنّ لكل حافة . ويتمتع التدفّق (valid flow) بأنّ كمية الماء الخارجة من المصدر تساوي الكمية الداخلة إلى المصبّ ، وأنّ كمية الماء الداخلة إلى والخارجة منها متساوية لكل رأس آخر .
ويمكن كتابة هذه الشروط رياضيًا كما يلي:
حيث، لكل رأس ، فإنّ الجمع على يعني الجمع على كل الحواف التي تمسّ .
ويمكن التفكير في مسألة أقصى تدفّق على أنّها مهمة تعظيم على كل المتجهات التي تحقّق الشروط السابقة المعادلة. ويُعرَّف تعظيم دالة خطّية على المجموعة التي تحقّق معادلات ومتراجحات خطّية معيّنة بأنّه البرمجة الخطّية (linear programming). ولحسن الحظ، هناك خوارزميات متعدّدة الحدود لحلّ البرمجة الخطّية، وبالتالي يمكننا حلّ مسألة أقصى تدفّق (وعليها بالتساوي، أصغر قطع) في زمن متعدّد الحدود. وفي الحقيقة، هناك خوارزميات أفضل بكثير لأقصى تدفّق/أصغر قطع، حتى مع الرسوم البيانية الموجّهة الموزونة، والرقم القياسي الحالي فيها هو .
تمرين محلول — أصغر قطع عام
بإعطائك رسمًا بيانيًا ، عرِّف أصغر قطع عام (global minimum cut) لـ على أنه أصغر عدد حواف يقطعه ، على امتداد كل بحيث و . برهن أنّ هناك خوارزمية متعدّدة الحدود لحساب أصغر قطع عام لرسم بياني.
الحل
من أعلاه نعرف أنّ هناك خوارزمية متعدّدة الحدود تجد، عند إدخال ، أصغر قطع في الرسم البياني . وباستعمال يمكننا الحصول على خوارزمية تحسب، عند إدخال رسم بياني ، أصغر قطع عام كما يلي:
-
لكل زوج مختلف ، تُسند الخوارزمية القيمة .
-
تُعيد أصغر قيمة من على كل الأزواج المختلفة
سيكون زمن تشغيل هو ضعف زمن تشغيل ، وبالتالي فإنّه زمن متعدّد الحدود. وفضلا عن ذلك، إذا كان أصغر قطع عام هو ، فإنّ حين يصل إلى تكرار يكون فيها و ستحصل على قيمة هذا القطع، وبالتالي فإنّ القيمة التي تُخرجها ستكون قيمة أصغر قطع العام.
ما سبق هو أول مثال لنا على تخفيض (reduction) في سياق الخوارزميات متعدّدة الحدود. بمعنى أنّنا خفّضنا مهمة حساب أصغر قطع العام إلى مهمة حساب أصغر قطع .
إيجاد أكبر قطع في رسم بياني
مهمة أكبر قطع (maximum cut) هي، بإعطائك رسمًا بيانيًا ، إيجاد المجموعة التي تُعظِّم (maximizes) عدد الحواف التي يقطعها . (ويمكننا أيضًا تعريف نسخة من أكبر قطع بصيغة قطع كما فعلنا مع أصغر قطع؛ والتعقيدان متشابهان لكنّ أكبر قطع العام هو الأكثر شيوعًا في الأدبيات.) وكابن أخيه الأصغر، أصغر قطع، فإنّ مهمة أكبر قطع هي أيضًا مدفوعة بدوافع واضحة. مثلًا، يظهر أكبر قطع في تصميم VLSI، ولديه أيضًا علاقة مفاجئة بتحليل نموذج إيزنغ في الفيزياء الإحصائية.
على نحو مفاجئ، بينما (كما رأينا) هناك خوارزمية متعدّدة الحدود لمسألة أصغر قطع، فلا توجد خوارزمية معروفة تحلّ أكبر قطع بسرعة أكبر بكثير من خوارزمية «القوة الغاشمة» البديهية التي تجرّب كل الاحتمالات للمجموعة .
ملاحظة على التقعّر


هناك سببٌ كامن خلف الفروق الجذرية التي تظهر أحيانًا بين صعوبة تعظيم دالة على مجال ما وصعوبة تصغيرها. إذا كان ، فإنّ الدالة تكون مُقَعَّرة (convex) إذا كان، لكل و ، . معنى ذلك أنّ المطبَّقة على المنتصف المرجَّح بـ بين و أصغر من القيمة المتوسّطة لـ المرجَّحة بـ . وإذا كانت نفسها مُقَعَّرة (أي أنّه متى كان في فإنّ القطعة المستقيمة بينهما مشمولة أيضًا)، فإنّ هذا يعني أنّه إذا كان هو حدًّا أدنى موضعيًّا (local minimum) لـ فإنّه أيضًا حدّ أدنى عام (global minimum). والسبب أنّه إذا كان فإنّ كل نقطة على القطعة المستقيمة بين و تحقّق ، ووبالتالي فإنّ لا يمكن أن يكون حدًّا أدنى موضعيًّا. وبشكل حدسيّ، إيجاد الحدود الدنيا الموضعية للدوال أسهل بكثير من إيجاد الحدود الدنيا العامة: فبعد كلّ شيء، أي خوارزمية «بحث موضعي» (local search) تحافظ على إيجاد نقطة قريبة تكون القيمة عندها أقلّ، ستصل في نهاية المطاف إلى حدّ أدنى موضعي. ومن أمثلة خوارزميات البحث الموضعي هذه النزول التدرّجي (gradient descent)، ويتّخذ سلسلة من الخطوات الصغيرة، كل واحدة منها في الاتجاه الذي يقلّل القيمة بأكبر مقدار بحسب المشتقة الحالية.
وفي الواقع، تحت شروط تقنية معيّنة، يمكننا غالبًا إيجاد أصغر قيمة لدوال مُقَعَّرة على مجال مُقَعَّر بكفاءة، وهذا هو السبب في أنّ مسائل مثل أصغر قطع وأقصر مسار سهلة الحلّ. من الجهة الأخرى، فإنّ تعظيم دالة مُقَعَّرة على مجال مُقَعَّر (أو بما يكافئه، تصغير دالة مُقَعَّرة تفرّغية) قد يكون مهمة حاسوبية صعبة. والدالة الخطّية (linear) مُقَعَّرة ومُقَعَّرة تفرّغية معًا، ولهذا السبب يمكن إنجاز مشكلتي تعظيم وتصغير الدوال الخطّية بكفاءة.
ليست مسألة أصغر قطع بالضرورة مهمّة تصغير مُقَعَّر، لأنّ مجموعة القطع الممكنة هي متناهية (discrete) وليست متّصلة. لكنّنا نستطيع، على ما يبدو، أن نضمّها في مجموعة متّصلة ومُقَعَّرة عبر مسألة أقصى تدفّق (الخطّية). وتضمن مبرهنة «أقصى تدفّق وأصغر قطع» أنّ هذا التضمين «مضبوط» بالمعنى أنّ أصغر «قطع كسري» (fractional cut) الذي نصل إليه عبر البرنامج الخطّي لأقصى تدفّق سيكون هو نفسه أصغر قطع الحقيقي. ولأسف لا نعرف تضمينًا مضبوطًا كهذا في سياق مسألة أكبر قطع.
ويتكرّر ظهور التقعّر مرارًا في سياق الحساب الكفؤ. مثلًا، إحدى المهام الأساسية في تعلّم الآلة هي تصغير المخاطرة التجريبية (empirical risk minimization). وهي مهمة إيجاد مُصنِّف (classifier) لمجموعة معطيات تدريبية (training examples) معطاة. بمعنى أنّ المدخل قائمة أمثلة موسومة ، حيث كل و ، والهدف هو إيجاد مُصنِّف (أو أحيانًا ) يُصغّر عدد الأخطاء (errors). الأعمّ من ذلك، نريد إيجاد تُصغّر حيث هي دالة خسارة (loss function) تقيس مدى ابتعاد الوسم المتوقَّع عن الوسم الحقيقي . وعندما تكون هي دالة الخسارة التربيعية (square loss) وكان دالة خطّية، فإنّ تصغير المخاطرة التجريبية يقابل مهمّة التصغير المُقَعَّر المعروفة بـ الانحدار الخطّي (linear regression). وفي حالات أخرى، حين تكون المهمة غير مُقَعَّرة (non-convex)، قد يكون هناك حدود دنيا عامة أو موضعية كثيرة. ومع ذلك، حتى إن لم نجد الحدّ الأدنى العام (ولا حتى حدًّا أدنى موضعيًّا)، فإنّ هذا التضمين المتّصل قد يفيدنا. وبخاصة، عند تشغيل خوارزمية تحسين موضعي مثل النزول التدرّجي، قد نجد مع ذلك دالة «مفيدة» بمعنى أنّ لها خطأ صغيرًا في أمثلة قادمة من التوزيع نفسه.
ما وراء الرسوم البيانية
ليست كل المسائل الحاسوبية ناشئة عن رسوم بيانية. ولنسرد الآن بعض الأمثلة الأخرى لمسائل حاسوبية ذات اهتمام كبير.
SAT
تتضمّن صيغة منطقية (propositional formula) عددًا من المتغيّرات ومشغّلات المنطق AND () و OR () و NOT (، ويُشار إليها أيضًا بـ ). ونقول إنّ مثل هذه الصيغة بـ الشكل الشرطي المعياري (conjunctive normal form، ويُختصر CNF) إن كانت AND من ORات للمتغيّرات أو نفياتها (ونسمّي حدًّا من الشكل أو مُثابِتًا (literal)). على سبيل المثال، هذه صيغة CNF:
مسألة الإشباع (satisfiability problem) هي مهمة تحديد، عند إعطاء صيغة CNF ، ما إذا كان هناك إسناد مُشبِع (satisfying assignment) لـ أم لا. وإسناد مُشبِع لـ هو سلسلة بحيث تُقيَّم إلى صحيح (True) إذا أسندنا إلى متغيّراتها قيمَ . قد تبدو مسألة SAT سؤالًا مجرّدًا ذا اهتمام في المنطق وحده، لكنّ SAT في الواقع ذو اهتمام هائل في التحسين الصناعي، وله تطبيقات تشمل تخطيط التصنيع وتركيب الدوائر والتحقّق من البرمجيات والتحكّم في الحركة الجوية وجدولة البطولات الرياضية وغيرها.
2SAT. نقول إنّ الصيغة هي -CNF إذا كانت AND من ORات حيث يشمل كل OR بالضبط مُثابِتًا. ومسألة -SAT هي تقييد مسألة الإشباع على حالة تكون فيها صيغة المدخل -CNF. وبخاصة، فإنّ مسألة 2SAT هي تحديد، عند إعطاء صيغة -CNF ، ما إذا كان هناك إسناد يُشبِع_ ، بالمعنى أنّه يجعلها تُقيَّم إلى أو «صحيح». وستُعدّد الخوارزمية البديهية ذات القوة الغاشمة لـ 2SAT كل الإسنادات الممكنة ، لكن لحسن الحظ نستطيع أن نفعل أفضل بكثير من ذلك. والمفتاح هو أنّنا نستطيع أن ننظر إلى كل قيد من الشكل (حيث مُثابِتات يقابلان متغيّرات أو نفياتها) على أنّه تلازمًا منطقيًّا (implication) ، لأنّه يقابل القيد بأنّه إذا كان المُثابِت صحيحًا فلا بدّ أيضًا من صحّة . ولذلك نستطيع أن ننظر إلى على أنّها رسمًا بيانيًا موجَّهًا بين الـ مُثابِتًا، مع حافة من إلى تقابل تلازمًا من إلى . ويمكن إثبات أنّ غير مُشبِعة إذا وم فقط إذا كان هناك متغيّر بحيث يوجد مسار موجَّه من إلى وأيضًا مسار موجَّه من إلى (انظر تمرين — خوارزمية 2SAT). وهذا يخفّض 2SAT إلى مسألة تحديد الاتّصال في الرسوم البيانية الموجّهة (وهي مسألة يمكن حلّها بكفاءة).
3SAT. مسألة 3SAT هي مهمة تحديد قابلية الإشباع لصيغ 3CNF. قد يظنّ أحدهم أنّ الانتقال من اثنين إلى ثلاثة لا يُحدث فرقًا كبيرًا في التعقيد. لكنّه سيكون مخطئًا. ورغم الجهد الكبير، لا نعرف خوارزمية أفضل بشكل ملموس من القوة الغاشمة لـ 3SAT (أفضل الخوارزميات المعروفة تتطلّب نحو خطوة).
ومن المثير للاهتمام أنّ مسألة مشابهة تتكرّر مرارًا في الحساب، حيث إنّ الفرق بين اثنين وثلاثة يقابل غالبًا الفرق بين ما هو قابل للحلّ بالطرق العملية وما هو متعذّر. ولا نفهم أسباب هذه الظاهرة فهمًا كاملًا، وإنّ مفهوم اكتمال (NP completeness) الذي سنراه لاحقًا يقدّم بعض التفسير الجزئي لها. قد يكون ذلك مرتبطًا بأنّ تحسين متعدّد حدود يكفي في الغالب إلى معادلات على مشتقّته. فمشتقّة متعدّد حدود تربيعي خطّية، في حين أنّ مشتقّة متعدّد حدود تكعيبي تربيعية، و― كما سنرى ―الفرق بين حلّ المعادلات الخطّية وحلّ المعادلات التربيعية قد يكون عميقًا إلى حدّ كبير.
حلّ المعادلات الخطّية
من أنفع المسائل التي حلّها الناس مرارًا وتكرارًا هي حلّ معادلات خطّية في متغيّرًا. بمعنى آخر، حلّ معادلات من الشكل
حيث و أعداد حقيقية (أو ناطقة). ويمكن كتابة هذا بصورة أكثف على أنها المعادلات حيث مصفوفة ، وننظر إلى على أنّهما متّجهان عموديّان في .
ويمكن استعمال خوارزمية الإزالة الغاوسية (Gaussian elimination) القياسية لحلّ مثل هذه المعادلات في زمن متعدّد الحدود (أي تحديد ما إذا كان لها حلّ، وإيجاد الحلّ إن وُجد). وكما ناقشنا أعلاه، إن كنا مستعدّين للسماح ببعض الخسارة في الدقّة، فلنا حتى خوارزميات تتعامل مع متراجحات خطّية، وهي ما يُعرف أيضًا بـالبرمجة الخطّية. في المقابل، إن أصررنا على حلول صحيحة (integer)، فإنّ مهمة حلّ معادلات أو متراجحات خطّية تُعرف بـالبرمجة الصحيحة (integer programming)، وأفضل الخوارزميات المعروفة لها زمن أسّي في الحالة الأسوأ.
ملاحظة — تعقيد البتّات للأعداد
كلّما ناقشنا مسائل تكون مداخلها أعدادًا، يقابل طولَ المدخل عددَ البتّات (bits) اللازمة لوصف العدد (أو، بما يكافئه حتى ثابت معياري، عددَ الخانات بالأساس 10 أو 16 أو أيّ أساس ثابت آخر). ويمكن أن يكون الفرق بين طول المدخل وقيمة العدد نفسه بحدّة بالغة. مثلًا، يتفق معظم الناس على أنّه يوجد فرق هائل بين امتلاك مليار (i.e. ) دولار وامتلاك تسعة دولارات. وبالمثل، يوجد فرق هائل بين خوارزمية تتطلّب خطوة على عدد من بتّ وخوارزمية تتطلّب خطوة.
ومن الأمثلة مسألة (المشروحة أدناه) إيجاد العوامل الأولية لعدد صحيح معطى. والخوارزمية الطبيعية هي البحث عن عامل كهذا بتجريب كل الأعداد من إلى ، لكنّ ذلك سيتطلّب خطوة وهو أسّي في طول المدخل، أي في عدد البتّات اللازمة لوصف . (ويمكن تحسين زمن تشغيل هذه الخوارزمية بسهولة إلى نحو ، لكنّ هذا يبقى أسّيًا (أي ) في عدد البتّات اللازمة لوصف .) والسؤال المهمّ المفتوح منذ زمن طويل هو ما إذا كانت هناك خوارزمية كهذه تعمل في زمن متعدّد الحدود في طول المدخل (أي متعدّد الحدود في ).
حلّ المعادلات التربيعية
لنفترض أنّنا نريد حلّ معادلات لا خطّية فحسب بل تتضمّن حدودًا تربيعية من الشكل . بمعنى آخر، نفترض أنّنا أعطينا مجموعة متعدّدات حدود تربيعية وننظر في المعادلات . ولتجنّب مشكلات تمثيل البتّات، سنفترض دائمًا أنّ المعادلات تتضمّن القيود . وبما أنّ و هما وحدهما ما يحقّق المعادلة ، فإنّ هذا الافتراض يعني أنّنا نستطيع أن نقتصر على الحلول في . وتُعدّ مسألة حلّ المعادلات التربيعية في عدّة متغيّرات مسألة كلاسيكية ومبرَّرة إلى حدٍّ كبير. فهي تعميم للحالة الكلاسيكية للمعادلات التربيعية في متغيّر واحد التي يصارعها أجيال من طلاب الثانوية. كما أنّها تعميم لـمسألة إسناد التربيعي (quadratic assignment problem)، المُدخلة في الخمسينيات من القرن الماضي كوسيلة لتحسين إسناد الأنشطة الاقتصادية. ومرّة أخرى، لا نعرف خوارزمية أفضل بكثير لهذه المسألة من الخوارزمية التي تحصر كل الاحتمالات الممكنة.
أمثلة أكثر تقدّمًا
ولنسرد الآن بعض الأمثلة الإضافية لمسائل مثيرة للاهتمام هي أكثر تقدّمًا قليلًا، لكنّها ذات أهمية كبيرة في مجالات مثل الفيزياء والاقتصاد ونظرية الأعداد والتعمية.
مُحدِّد مصفوفة
مُحدِّد (determinant) مصفوفة من ، والمذكور بـ ، هو كمية مهمّة للغاية في الجبر الخطّي. مثلًا، من المعروف أنّ إذا وم فقط إذا كانت مفردة التحويلة (non-singular)، أي أنّ لها مصفوفة معكوسة ، وبالتالي يمكننا دائمًا حلّ معادلات من الشكل حلًّا فريدًا حيث و متّجهان من الأبعاد. والأعمّ من ذلك، يمكن التفكير في المُحدِّد على أنّه قياس كمّي لمدى بُعد عن أن تكون مفردة. فإذا كانت صفوف «شبه خطّية التابعية» (مثلًا، إذا كان الصف الثالث قريبًا جدًّا من أن يكون توليفة خطّية للصفّين الأولَين) فإنّ المُحدِّد سيكون صغيرًا، في حين أنّه إذا كانت بعيدة عن ذلك (مثلًا، إذا كانت الصفوف متعامدة (orthogonal) بعضها على بعض) فإنّ المُحدِّد سيكون كبيرًا. وبخاصة، لكل مصفوفة ، تكون القيمة المطلقة لمُحدِّد على الأكثر حاصل ضرب معايير (norms) صفوفها (أي الجذر التربيعي لمجموع مربّعات عناصرها)، مع التساوي إذا وم فقط إذا كانت الصفوف متعامدة بعضها على بعض.
يمكن تعريف المُحدِّد بعدّة طرائق. إحدى طرائق تعريف مُحدِّد مصفوفة من هي:
حيث هي مجموعة كل التبديلات من إلى ، وإشارة التبديل (sign of a permutation) تساوي أسّ عدد الانقلابات (inversions) في (أي الأزواج بحيث لكن ).
ويوحي هذا التعريف بأنّ حساب قد يتطلّب الجمع على حدًّا، وهو ما سيستغرق زمنًا أسّيًا لأنّ . لكنّ هناك طرائق أخرى لحساب المُحدِّد. مثلًا، من المعروف أنّ هي الدالة الوحيدة التي تحقّق الشروط التالية:
-
لكل مصفوفتَي مربع .
-
لكل مصفوفة من مُثلَّثة (triangular) ذات عناصر القُطر ، فإنّ . وبخاصة حيث هي مصفوفة الوحدة. (والمصفوفة المُثلَّثة هي مصفوفة يكون فيها كل العناصر أسفل القُطر، أو كل العناصر فوق القُطر، أصفارًا.)
-
حيث هي «مصفوفة تبديل» (swap matrix) تقابل تبديل صفّين أو عمودين من . أي أنّ هناك إحداثيين بحيث لكل ، .
وباستعمال هذه القواعد وخوارزمية الإزالة الغاوسية، يمكن تحديد ما إذا كانت مفردة أم لا، وفي الحالة الثانية تفكيك على صورة حاصل ضرب عدد متعدّد الحدود من مصفوفات التبديل والمصفوفات المُثلَّثة. (وفي الحقيقة يمكن التحقّق من أنّ عمليات الصفوف في الإزالة الغاوسية تقابل إمّا الضرب في مصفوفة تبديل أو في مصفوفة مُثلَّثة.) وبالتالي يمكننا حساب مُحدِّد مصفوفة من باستعمال زمن متعدّد الحدود من العمليات الحسابية.
دائم مصفوفة
بإعطائك مصفوفة من ، يُعرَّف دائمُ (permanent) على أنّه
بمعنى آخر، يُعرَّف على نحو مماثل للمُحدِّد في المعادلة باستثناء أنّنا نحذف الحدّ . ودائم المصفوفة كمية طبيعية، وقد دُرست في عدة سياقات بما فيها التركيبات (combinatorics) ونظرية الرسوم البيانية. كما أنّه يظهر في الفيزياء حيث يمكن استعماله لوصف الحالة الكمية (quantum state) لجسيمات بوزون متعدّدة (انظر هنا وهنا).
الدائم ببواقي القسمة على 2. إذا كانت عناصر أعدادًا صحيحة، فيمكننا تعريف الدالة البوليانية (Boolean) التي تُخرج، عند إدخال مصفوفة ، نتيجة دائم modulo . ويتبيّن أنّنا نستطيع حساب في زمن متعدّد الحدود. والمفتاح هو أنّه modulo فإنّ و هما الكمية نفسها، وبما أنّ الفرق الوحيد بين المعادلة والمعادلة هو أنّ بعض الحدود تُضرب في ، فإنّ لكل .
الدائم ببواقي القسمة على 3. تشجيعًا لما أحسنتُه حظّي أعلاه، قد نأمل في القدرة على حساب الدائم ببواقي القسمة على أيّ عدد أولي وربما في العموم. للأسف، لا يحالفنا الحظّ في ذلك. وكما في ظاهرة «من اثنين إلى ثلاثة» التي سبق ذكرها، لا نعرف خوارزمية أفضل بكثير من القوة الغاشمة لحساب الدائم نفسه ببواقي القسمة على .
إيجاد توازن بمجموع صفر
لعبة مجموعها صفر (zero sum game) هي لعبة بين لاعبين يكون فيها العائد للواحد هو نفسه الخسارة للآخر. بمعنى آخر، مهما كسب اللاعب الأول خسر اللاعب الثاني. ومهما كنا نرغب في تجنّبها، إلا أنّ ألعاب مجموعها صفر تظهر في الحياة، والشيء الجيّد فيها على الأقلّ أنّنا نستطيع حساب الاستراتيجية الأمثل.
ويمكن تحديد لعبة مجموعها صفر بمصفوفة من ، حيث إذا اختار اللاعب 1 الإجراء واختار اللاعب 2 الإجراء ، فإنّ اللاعب الأول يأخذ واللاعب الثاني يخسر المقدار نفسه. وتقول مبرهنة الأدنى-الأعلى (Min Max Theorem) المشهورة لجون فون نيومان إنّنا إذا سمحنا باستراتيجيات احتمالية أو «مختلطة» (حيث لا يختار اللاعب إجراءً واحدًا بل توزيعًا على الإجراءات) فلا يهمّ من يلعب أوّلًا: ستكون النتيجة النهائية واحدة. ورياضيًّا، تقضي مبرهنة الأدنى-الأعلى أنّه إذا جعلنا مجموعة التوزيعات الاحتمالية على (أي متّجهات أعمدة غير سالبة في مجموع عناصرها ) فإنّ
ويبيّن أنّ مبرهنة الأدنى-الأعلى نتيجةٌ تبعية لثنائية البرمجة الخطّية (linear programming duality)، وفي الحقيقة يمكن حساب قيمة المعادلة بكفاءة عبر برنامج خطّي.
إيجاد توازن ناش
لحسن الحظ، ليست كل ألعاب العالم الحقيقي ألعاب مجموعها صفر، ولدينا ألعاب أكثر عمومية، لا يكون فيها عائد أحد اللاعبين مساويًا بالضرورة لخسارة الآخر. وقد حصل جون ناش (John Nash) على جائزة نوبل لأنّه بيّن أنّ هناك مفهومًا من التوازن (equilibrium) لمثل هذه الألعاب أيضًا. وفي كثير من النصوص الاقتصادية يُسلَّم بأنّه متى كان اللاعبون الحقيقيون طرفًا في مثل هذه اللعبة فإنّهم يبلغون توازنًا ناشًّا. لكنّنا، على خلاف ألعاب مجموعها صفر، لا نعرف خوارزمية كفؤة لإيجاد توازن ناش عند إعطاء وصفٍ للعبة عامّة (ليست مجموعها صفر). وهذا يعني خصوصًا أنّه، رغم حدس الاقتصاديين، هناك ألعاب تحتاج استراتيجياتها الطبيعية عددًا أسّيًا من الخطوات لتتقارب إلى توازن.
اختبار الأوّلية (primality)
ومسألة حاسوبية كلاسيكية أخرى، كانت محلّ اهتمام منذ اليونانيين القدامى، هي تحديد ما إذا كان عدد معطى أوّليًّا أم مركّبًا (composite). ومن البديهي يمكننا فعل ذلك بتجريب قسيمته على كل الأعداد من ، لكنّ ذلك سيتطلّب خطوة على الأقلّ وهو أسّي في تعقيده البِتّي . ويمكننا تقليل خطوات هذه إلى بملاحظة أنّه إذا كان مركّبًا من الشكل فإنّ أحد أو أصغر من . لكنّ هذا لا يزال سيّئًا جدًّا. فإذا كان عددًا صحيحًا من بتّ، فإنّ يساوي نحو ، وبالتالي فإنّ تشغيل هذه الخوارزمية على مثل هذا المدخل سيستغرق أكثر بكثير من عمر الكون.
ولحسن الحظ، يتبيّن أنّنا نستطيع أن نفعل أفضل بكثير. في سبعينيات القرن الماضي، أعطى رابين وميلر خوارزميات احتمالية (probabilistic) لتحديد ما إذا كان عدد معطى أوّليًّا أم مركّبًا في زمن حيث . وسنناقش النموذج الاحتمالي للحساب لاحقًا في هذا المساق. وفي عام 2002، وجد أغراوال وكايال وساكسينا خوارزمية حتمية (deterministic) بزمن لهذه المسألة. وهذا بالتأكيد تطوير كان مثيرًا للاهتمام عند علماء الرياضيات من أرشيميدس إلى غاوس.
تحليل العوامل
بما أنّنا نستطيع بكفاءة تحديد ما إذا كان عدد أوّليًّا أم مركّبًا، فيمكننا أن نتوقّع أنّه في حالة المركّب يمكننا أيضًا إيجاد تحليل عوامل بكفاءة. للأسف، لا توجد خوارزمية معروفة كهذه. وفي تحوّل مدهش ومثير، استُخدم عدم وجود خوارزمية كهذه أساسًا للتعمية (encryption)، وهو في الحقيقة يستند إليه كثير من أمن الشبكة العنكبوتية العالمية. وسنعود إلى مسألة تحليل العوامل لاحقًا في هذا المساق. ونشير إلى أنّنا نعرف خوارزميات أفضل بكثير من القوة الغاشمة لهذه المسألة. بينما تتطلّب خوارزميات القوة الغاشمة زمن لتحليل عدد صحيح من بتّ، هناك خوارزميات معروفة تعمل في زمن نحو ، وهناك أيضًا خوارزميات يُعتقد على نطاق واسع (رغم أنّها لم تُحلَّل بدقّة كاملة) أنّها تعمل في زمن نحو . (وبـ«نحو» نعني أنّنا نهمل العوامل اللوغاريتمية المتعدّدة في .)
معرفتنا الحالية

قد يبدو الفرق بين خوارزمية بزمن أسّي وخوارزمية بزمن متعدّد الحدود مجرّدًا «كمّيًّا»، لكنّه في الواقع بالغ الأهمية. وكما رأينا من قبل، فإنّ خوارزمية القوة الغاشمة ذات الزمن الأسّي تنفد طاقتها بسرعة بالغة جدًّا، كما يقول إدموندز، فإنّه في الممارسة قد لا يكون هناك فرق كبير بين مسألة أفضل خوارزمية فيها أسّية ومسألة لا يمكن حلّها أصلًا. ولذلك فإنّ الخوارزميات الكفؤة التي ذكرناها أعلاه مستعملة على نطاق واسع وتُشغّل تطبيقات كثيرة في علوم الحاسوب. وفضلا عن ذلك، فإنّ خوارزمية بزمن متعدّد الحدود كثيرًا ما تنشأ عن بصيرة جوهرية في المسألة المطروحة، سواء كانت نتيجة «أقصى تدفّق وأصغر قطع»، أم قابلية حساب المُحدِّد، أم البنية النظرية للمجموعات التي تمكّن من اختبار الأوّلية. وهذه البصيرة قد تكون مفيدة بغضّ النظر عن آثارها الحاسوبية.
وفي الوقت الحالي لا نعرف ما إذا كانت المسائل «الصعبة» صعبة حقًّا، أم أنّ ذلك لمجرّد لأنّنا لم نجد بعد الخوارزميات المناسبة لها. لكنّنا سنرى الآن أنّ هناك مسائل تتطلّب بالضرورة زمنًا أسّيًا. ولسنا نعرف إن كان أيّ من الأمثلة أعلاه يقع في تلك الفئة.
خلاصة
-
هناك كثير من المسائل الطبيعية لها خوارزميات متعدّدة الحدود، ومسائل طبيعية أخرى نودّ لو نحلّها، لكنّ أفضل خوارزمياتها المعروفة أسّية.
-
غالبًا ما تستند خوارزمية بزمن متعدّد الحدود إلى اكتشاف بنية مخفيّة في المسألة، أو إلى إيجاد صياغة مكافئة لها على نحو مفاجئ.
-
هناك كثير من المسائل المثيرة للاهتمام التي يكون فيها فجوة أسّية (exponential gap) بين أفضل خوارزمية معروفة وأفضل خوارزمية يمكننا استبعادها. وإغلاق هذه الفجوة هي إحدى المسائل المفتوحة الرئيسة في علوم الحاسوب النظرية.
التمارين
تمرين — خوارزمية زمن أسّي لأطول مسار
قد تحتاج الخوارزمية الساذجة لحساب أطول مسار في رسم بياني معطى إلى أكثر من خطوة. أعطِ خوارزمية بزمن لمهمة إيجاد أطول مسار في رسوم بيانية من رأسًا.[2]
تمرين — خوارزمية 2SAT
لكل صيغة 2CNF ، عرِّف الرسم البياني على رأسًا يقابل المُثابِتات ، بحيث تكون هناك حافة إذا وفقط إذا كان القيد في . برهن أنّ غير مُشبِعة إذا وم فقط إذا كان هناك بحيث يوجد مسار من إلى ومن إلى في . بيّن كيف نستعمل هذا لحلّ 2SAT في زمن متعدّد الحدود.
تمرين — تخفيضات لإثبات الخوارزميات
الحقيقة التالية صحيحة: هناك خوارزمية متعدّدة الحدود التي، عند إدخال رسم بياني ، تُخرج إذا وفقط إذا كان الرسم البياني ذو جزأين (bipartite): أي إنّه يوجد تقسيم لـ إلى جزأين متمايزين و بحيث كل حافة تحقّق إمّا و أو و . استعمل هذه الحقيقة لتبرهن أنّ هناك خوارزمية متعدّدة الحدود لحساب الدالة التالية التي، عند إدخال رسم بياني ، تُخرج إذا وفقط إذا كان هناك تقسيم لرؤوس في الرسم البياني إلى جزأين و بحيث كلٌّ من و عُقدة كاملة (cliques): أي لكل زوج من الرؤوس المتمايزة تكون الحافة في ، وعلى نحو مماثل لكل زوج من الرؤوس المتمايزة تكون الحافة في .
ملاحظات ببليوغرافية
النصّ الكلاسيكي التمهيدي في الخوارزميات للطلاب الجامعيين هو [@CLRS]. وهناك نصّان أقلّ «موسوعية» هما Kleinberg وTardos [@KleinbergTardos06]، وDasgupta وPapadimitriou وVazirani [@DasguptaPV08]. وكتاب Jeff Erickson هو نصّ ممتاز في الخوارزميات متاح مجانًا على الإنترنت.
تعود جذور مسألة أصغر قطع إلى الحرب الباردة. وبالتحديد، اكتشف فورد وفولكرسون خوارزميتهما لأقصى تدفّق/أصغر قطع عام 1955 سبيلًا لمعرفة أصغر عدد من سِكك القطار التي يلزم تفجيرها لفصل روسيا عن بقية أوروبا. انظر المسح [@schrijver2005history] للمزيد.
وتوجد بعض الخوارزميات لمهمة إيجاد أطول المسارات في [@williams2009finding, @bjorklund2014determinant].
استكشافات إضافية
بعض المواضيع المرتبطة بهذا الفصل التي قد تكون في متناول الطلاب المتقدّمين تشمل: (يكمل)
الـ queue (طابور) هو بنية معطيات لتخزين قائمة عناصر بترتيب «الداخل أوّلًا، الخارج أوّلًا (FIFO)». وكل عملية «إخراج» (pop) تزيل عنصرًا من الطابور بالترتيب الذي «أُدخِل» به؛ انظر صفحة ويكيبيديا. ↩︎
تلميح: استعمل البرمجة الديناميكية (dynamic programming) لحساب، لكل و ، القيمة التي تساوي إذا كان هناك مسار بسيط من إلى يستعمل رؤوس بالضبط. افعل ذلك تكراريًا لـ ذات الأحجام المتزايدة. ↩︎