مقدمة { #chapintro }
مقدمة
- تقديم دراسة الحوسبة وبيان الدافع لدراستها لذاتها، بصرف النظر عن عمليات التنفيذ بعينها.
- فكرة الخوارزمية (algorithm) وبعض تاريخها.
- الخوارزميات ليست مجرد أدوات، بل أيضًا طرق في التفكير وفي الفهم.
- لمحة عن تحليل ترتيب كبير-أو Big-، وعن الإبداع المفاجئ في تصميم الخوارزميات الكفؤة.
"علم الحاسوب لا يتعلق بالحاسوب أكثر مما يتعلق الفلك بالناظر", المنسوب إلى إيدغر ديكسترا.[1]
"يحتاج المخترقون إلى فهم نظرية الحوسبة بقدر ما يحتاج الرسّامون إلى فهم كيمياء الأصباغ", بول غراهام 2003.[2]
"موضوع محاضرتي يتّضح على نحو أكثر مباشرة بمجرد طرح سؤالين: أولًا، هل الضرب أصعب من الجمع؟ وثانيًا، لماذا؟... أودّ أن أُبيّن أنه لا توجد خوارزمية للضرب بسيطةً حسابيًا كخوارزمية الجمع، وهذا يُثبت وجود عقبة يصطدم بها المرء", آلان كوبهام، 1964
من أعظم الابتكارات التي ابتكرها البابلليون القدامى كانت نظامَ الأرقام ذي القيمة المكانية (place-value number system). يمثّل هذا النظامُ الأعدادَ على هيئة تسلسل من الأرقام، حيث يحدّد موضع كل رقم قيمته.
وهذا يقابل نظامًا مثل الأرقام الرومانية، حيث لكل رقم قيمة ثابتة بصرف النظر عن موضعه. على سبيل المثال، فإن المسافة المتوسطة إلى القمر تقارب 259,956 ميلًا رومانيًا. وفي الأرقام الرومانية القياسية، فإن ذلك يُكتب هكذا
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMDCCCCLVI
ولكتابة المسافة إلى الشمس بالأرقام الرومانية نحتاج إلى نحو 100,000 رمز؛ أي أن كتابًا من 50 صفحة يكفي لاحتواء هذا العدد وحده!
ولمن يفكّر في الأعداد ضمن نظام جمعي مثل الأرقام الرومانية، فإن كميات مثل المسافة إلى القمر أو الشمس ليست كبيرةً فحسب — بل هي لا تُنطق: إذ لا يمكن التعبير عنها ولا حتى إدراكها. ولا عجب أن استخدم إراتوستينس، أول من حسب قطر الأرض (بنسبة خطأ تصل إلى نحو عشرة بالمئة)، وإيبارخوس، أول من حسب المسافة إلى القمر، نظام القيمة المكانية السداسي عند الببابليين (أساس 60)، لا نظامًا من نوع الأرقام الرومانية.
الضرب في الأعداد الصحيحة: مثال على خوارزمية
في لغة علم الحاسوب، يُعرف نظام القيمة المكانية المستخدم في تمثيل الأعداد (representation) بأنه بنية بيانات (data structure): أي مجموعة تعليمات، أو «وصفة»، لتمثيل الكائنات على هيئة رموز. أما الخوارزمية (algorithm) فهي مجموعة تعليمات، أو «وصفة»، لإجراء العمليات على هذه التمثيلات. وقد مكّنت بنى البيانات والخوارزميات تطبيقات مذهلة غيّرت المجتمع البشري، لكن أهميتها تتجاوز فائدتها العملية. فالبنى القادمة من علم الحاسوب، مثل البتات (bits)، والسلاسل النصية (strings)، والرسوم البيانية (graphs)، بل وحتى فكرة البرنامج (program) نفسه، وكذلك المفاهيم مثل العمومية (universality) والتكرار (replication)، لم تجد استخدامات عملية (كثيرة) فحسب، بل أسهمت في نشوء لغة جديدة وطريقة جديدة في النظر إلى العالم.
إضافة إلى اختراع نظام القيمة المكانية، اخترع البابلليون أيضًا الخوارزميات «القياسية» التي تعلّمها جميعنا في المدرسة الابتدائية لجمع الأعداد وضربها. وقد كانت هذه الخوارزميات أساسية على مرّ العصور لمن يستعمل العدّادات (abaci)، أو البردي، أو القلم والورق، لكن في عصر الحواسيب: هل تظلّ لها فائدة تتجاوز تعذيب تلاميذ الصف الثالث؟ ولكي نرى لماذا تظلّ هذه الخوارزميات ذات صلةٍ بالغة، دعنا نقارن خوارزمية الضرب البابلونية رقمًا برقم (أي «ضرب المدرسة الابتدائية») بالخوارزمية الساذجة التي تضرب الأعداد عبر الجمع المتكرّر. ونبدأ بوصف الخوارزميتين وصفًا رسميًا، انظر خوارزمية — Multiplication via repeated addition وخوارزمية — Grade-school multiplication.
خوارزمية — Multiplication via repeated addition
INPUT: Non-negative integers $x,y$
OUTPUT: Product $x\cdot y$
Let $result \leftarrow 0$.
For{$i=1,\ldots,y$}
$result \leftarrow result + x$
endfor
return $result$
خوارزمية — Grade-school multiplication
INPUT: Non-negative integers $x,y$
OUTPUT: Product $x\cdot y$
Write $x=x_{n-1}x_{n-2}\cdots x_0$ and $y = y_{m-1}y_{m-2}\cdots y_0$ in decimal place-value notation. # $x_0$ is the ones digit of $x$, $x_1$ is the tens digit, etc.
Let $result \leftarrow 0$
For{$i=0,\ldots,n-1$}
For{$j=0,\ldots,m-1$}
$result \leftarrow result + 10^{i+j}\cdot x_i \cdot y_j$
endfor
endfor
return $result$
كلٌّ من خوارزمية — Multiplication via repeated addition وخوارزمية — Grade-school multiplication يفترض أننا نعرف بالفعل كيف نجمع الأعداد، كما يفترض خوارزمية — Grade-school multiplication أيضًا أننا نستطيع ضرب عدد في أُسّ من 10 (وهي بعد كل أمر إزاحة بسيطة). ولنفترض أن و عددان صحيحان، كلٌّ منهما رقمًا عشريًا. (وهذا يوافق تقريبًا 64 رقمًا ثنائيًا (binary digits)، وهو حجم شائع في كثير من لغات البرمجة.) وحساب باستخدام خوارزمية — Multiplication via repeated addition يعني إضافة إلى نفسها مرة، أي (لأن عدد من رقمًا) ما لا يقلّ عن عملية جمع. وبالمقابل، فإن خوارزمية المدرسة الابتدائية (أي خوارزمية — Grade-school multiplication) تتضمّن إزاحة وضربًا لأرقام مفردة، وبالتالي تنفّذ عملية على أرقام مفردة في أقصى الأحوال. ولفهم الفرق، لاحظ أن تلميذًا في المدرسة الابتدائية يستطيع تنفيذ عملية على رقم مفرد في نحو ثانيتين، ولذلك سيحتاج إلى نحو ثانية (أي نحو نصف ساعة) لحساب باستخدام خوارزمية — Grade-school multiplication. وبالمقابل، فرغم أن الحاسوب أسرع من الإنسان بمليارات المرّات، لو استخدمنا خوارزمية — Multiplication via repeated addition لحساب على حاسوب شخصي حديث، لتطلّب الأمر ثانية (أي أكثر من ثلاثة آلاف عام!) للوصول إلى النتيجة نفسها.
لم تجعل الحواسيب الخوارزميات بالغة. على العكس، لقد أدّى الزيادة الهائلة في قدرتنا على قياس البيانات وتخزينها ونقلها إلى ارتفاع الطلب على تطوير خوارزميات أفضل وأدقّ، تمكّننا من اتخاذ قرارات أفضل بالاستناد إلى هذه البيانات. ونرى أيضًا أن فكرة الخوارزمية مستقلة إلى حدٍّ بعيد عن جهاز الحوسبة الفعلي الذي ينفّذها. فخوارزمية الضرب رقمًا برقم أفضل بكثير من الجمع المتكرّر، سواء كانت التقنية التي نستعملها لتنفيذها شريحة أساسها السيليكون، أم تلميذًا في الصف الثالث بقلمٍ وورق.
يهتم علم الحاسوب النظري بالخصائص الجوهرية (inherent) للخوارزميات والحوسبة؛ أي تلك الخصائص المستقلة عن التكنولوجيا الراهنة. ونطرح أسئلة سبق أن تأمّلها البابلليون، مثل «ما أفضل طريقة لضرب عددين؟»، لكننا نطرح أيضًا أسئلة تعتمد على العلوم المتطوّرة مثل «هل يمكننا استعمال تأثيرات التشابك الكمّي لتسريع تحليل الأعداد إلى عوامل؟».
ملاحظة — المواصفة والتنفيذ وتحليل الخوارزميات.
يتكوّن الوصف الكامل لخوارزمية من ثلاثة مكوّنات:
-
المواصفة (specification): ماذا هي المهمة التي تؤدّيها الخوارزمية (مثلًا الضرب في حالة خوارزمية — Multiplication via repeated addition وخوارزمية — Grade-school multiplication.)
-
التنفيذ (implementation): كيف تتحقّق المهمة: ما هو تسلسل التعليمات الذي ينبغي تنفيذه. فرغم أن خوارزمية — Multiplication via repeated addition وخوارزمية — Grade-school multiplication تؤدّيان المهمة الحسابية نفسها (أي لهما المواصفة نفسها)، فإنهما يؤدّيها بطريقتين مختلفتين (أي لهما تنفيذان مختلفان).
-
التحليل (analysis): لماذا يحقّق هذا التسلسل من التعليمات المهمة المطلوبة. سيتضمّن الوصف الكامل لـخوارزمية — Multiplication via repeated addition وخوارزمية — Grade-school multiplication برهانًا لكلٍّ من هاتين الخوارزميتين يثبت أن الخوارزمية، على المُدخلَين ، تُخرج فعلًا .
وكثيرًا ما نبيّن، في سياق التحليل، أن الخوارزمية ليست صحيحة فحسب بل كفؤة أيضًا. أي نريد أن نبيّن أنها لا تحسب المهمة المطلوبة فحسب، بل تفعل ذلك في عدد محدَّد من العمليات. فمثلًا تحسب خوارزمية — Grade-school multiplication دالة الضرب على مُدخلات من رقمًا باستخدام عملية، بينما تحسب خوارزمية — Karatsuba multiplication (المُشرح أدناه) الدالة نفسها باستخدام عملية. (ونُعرِّف هنا رموز المستخدَمة في المقاربات وترميز O الكبير.)
مثال موسَّع: طريقة أسرع للضرب (اختياري)
ومجرد أن تفكّر في خوارزمية الضرب القياسية رقمًا برقم، تبدو وكأنها «الأفضل بجلاء» طريقةَ ضربِ الأعداد. وفي عام 1960 نظَّم الرياضيّ الشهير أندريه كولموغروف ندوةً في جامعة موسكو بطرح توقّعةٍ مفادها أن كل خوارزمية لضرب عددين من رقمًا تتطلّب عددًا من العمليات الأساسية يتناسب مع (أي عملية، باستخدام ترميز على النحو المعرَّف في الخلفية الرياضية). بعبارة أخرى، توقَّع كولموغروف أن مضاعفة عدد الأرقام في أي خوارزمية ضرب ستربّع عدد العمليات الأساسية المطلوبة. وكان في الحضور طالبٌ شابّ اسمه أناتولي كاراتسوبا، وفي أقل من أسبوع فكَّد خطأ توقّعة كولموغروف باكتشاف خوارزمية تتطلّب نحو عملية فقط، حيث ثابت. وكلّما ازداد صار هذا العدد أصغر بكثير من ، ولذلك تكون خوارزمية كاراتسوبا أفضل من خوارزمية المدرسة الابتدائية عندما يكون كبيرًا. (على سبيل المثال، لتنفيذ Python ينتقل من خوارزمية المدرسة الابتدائية إلى خوارزمية كاراتسوبا للأعداد التي يبلغ طولها 1000 بت أو أكثر.) فرغم أن الفرق بين خوارزمية من صنف وأخرى من قد يكون حاسمًا أحيانًا في الممارسة (انظر الخوارزميات خارج الحساب أدناه)، فإننا في هذا الكتاب سنُهمل هذه التمييزات في معظمها. غير أننا نشرح خوارزمية كاراتسوبا أدناه لأنها مثال جيّد على كيف تكون الخوارزميات مدهشة في كثير من الأحيان، وكذلك أنها عرضٌ لـ_تحليل الخوارزميات_ (analysis of algorithms)، وهو محوريٌّ لهذا الكتاب ولعلم الحاسوب النظري بمجمله.
تستند خوارزمية كاراتسوبا إلى طريقة أسرع في ضرب الأعداد ذات الرقمين. ولنفترض أن زوجًا من الأعداد ذات الرقمين. ولنكتب لـ«خانة العشرات» في ، و لـ«خانة الآحاد»، بحيث ، ونكتب بالمثل حيث . وخوارزمية المدرسة الابتدائية لضرب و موضَّحة في الشكل التوضيحي.

ويمكن تصوّر خوارزمية المدرسة الابتدائية على أنها تحوّل مهمة ضرب زوجٍ من الأعداد ذات الرقمين إلى أربع عمليات ضرب لأرقام مفردة، عبر الصيغة
وعامةً، فإن مضاعفةَ عدد الأرقام في المُدخل داخل خوارزمية المدرسة الابتدائية تؤدّي إلى أربعة أضعاف عدد العمليات، أي إلى خوارزمية من رتبة . وبالمقابل، فإن خوارزمية كاراتسوبا تقوم على الملاحظة أنّ بإمكاننا كتابة المعادلة أيضًا على الصورة
وهذا يخفّض ضرب العددين و كلَّ منهما من رقمين إلى حساب ثلاثة جداءات أبسط: ، و، و. وبتكرار الاستراتيجية ذاتها على نحو تكراري (recursive)، يمكننا تخفيض مهمة ضرب عددين من رقمًا إلى مهمة ضرب ثلاثة أزواج من الأعداد ذات رقمًا.[3] ولأننا عند كل مرة نضاعف فيها عدد الأرقام نُضاعف ثلاثيًّا عدد العمليات، فسنتمكّن من ضرب أعداد من رقمًا باستخدام نحو عملية.
ما سبق هو الفكرة الحدسية وراء خوارزمية كاراتسوبا، لكنه لا يكفي لتحديدها تحديدًا كاملًا. فالوصف الكامل لخوارزمية يتضمّن مواصفةً دقيقة (precise specification) لعملياتها إلى جانب تحليلها: أي برهانًا على أن الخوارزمية تفعل بالفعل ما يُفترض أن تفعله. وتفصيل عمليات خوارزمية كاراتسوبا معروض في خوارزمية — Karatsuba multiplication، بينما تحليلها مقدَّم في لمّة ولمّة.


خوارزمية — Karatsuba multiplication
INPUT: non-negative integers $x,y$ each of at most $n$ digits
OUTPUT: $x\cdot y$
procedure{Karatsuba}{$x$,$y$}
lif {$n \leq 4$} return $x\cdot y$ lendif
Let $m = \floor{n/2}$
Write $x= 10^{m}\overline{x} + \underline{x}$ and $y= 10^{m}\overline{y}+ \underline{y}$
$A \leftarrow Karatsuba(\overline{x},\overline{y})$
$B \leftarrow Karatsuba(\overline{x}+\underline{x},\overline{y}+\underline{y})$
$C \leftarrow Karatsuba(\underline{x},\underline{y})$
Return $(10^n-10^m)\cdot A + 10^m \cdot B +(1-10^m)\cdot C$
endprocedure
خوارزمية — Karatsuba multiplication ليس سوى نصف الوصف الكامل لخوارزمية كاراتسوبا. والنصف الآخر هو التحليل، الذي يتضمّن إثبات أن (1) خوارزمية — Karatsuba multiplication يحسب عملية الضرب فعلًا، و__(2)__ أنه يفعل ذلك باستخدام عملية. وقد ننتقل الآن إلى بيان الحقيقتين:
لمّة
لكل زوجٍ من الأعداد الصحيحة غير السالبة ، فإن الخوارزمية خوارزمية — Karatsuba multiplication، عند إعطائها المُدخلَين ، تُخرج .
برهان
لنكن أقصى عدد أرقام لـ و. سنُثبت المبرهنة بالاستدلال على . الحالة الأساس هي حيث تُعيد الخوارزمية بحكم تعريفها. (ولا يهمّ أيّ خوارزمية نستعملها في ضرب الأعداد ذات الأربعة أرقام — يمكننا حتى استعمال الجمع المتكرّر.) وإلاّ، فإن كان ، نُعرِّف ، ونكتب و.
وبتعويض هذا في ، نحصل على
وبإعادة ترتيب الحدود نرى أن
بما أن الأعداد ،، و،، و، جميعها تملك رقمًا على الأكثر، فإن فرضية الاستدلال تُرجِع أن القيم التي يحسبها الاستدعاءات التكرارية ستحقّق ، و، و. وبتعويض هذا في المعادلة نرى أن يساوي القيمة التي تحسبها الخوارزمية خوارزمية — Karatsuba multiplication.
لمّة
إذا كان عددين صحيحين من رقم على الأكثر، فإن الخوارزمية خوارزمية — Karatsuba multiplication ستأخذ عملية على المُدخلَين .
برهان
يوضّح الشكل التوضيحي الفكرة وراء البرهان، وسنكتفي هنا برسم مختصر لها، تاركين استكمال التفاصيل إلى تمرين — تحليل خوارزمية كاراتسوبا. والبرهان أيضًا بالاستدلال. نُعرِّف لتكون أقصى عدد خطوات التي تأخذها الخوارزمية خوارزمية — Karatsuba multiplication على مُدخلات طولها على الأكثر. ولأنّ الحالة الأساس ينفّذ فيها تمرين — تحليل خوارزمية كاراتسوبا عددًا ثابتًا من العمليات الحسابية، فنحن نعرف أن بالنسبة إلى ثابت ما، وأنّه من أجل تتحقّق المعادلة التكرارية بالنسبة إلى ثابت ما (باستعمال الحقيقة إن الجمع يمكن إنجازه في عملية).
تنحلّ المعادلة التكرارية المعادلة إلى . والحدس الكامن وراء ذلك معروض في الشكل التوضيحي، وهذه أيضًا نتيجةٌ لما يسمى بـ«نظرية المُهيمن» في المعادلات التكرارية. وكما ذُكر أعلاه، فإننا نترك إتمام البرهان للقارئ في تمرين — تحليل خوارزمية كاراتسوبا.

خوارزمية كاراتسوبا ليست بأي حال من الأحوال نهايةَ الطريق لخوارزميات الضرب. وفي الستينيات من القرن الماضي، وسّع توم وكوك أفكار كاراتسوبا للحصول على خوارزمية ضرب زمنها لكل ثابت . وفي عام 1971، حقّق شونهاغه وستراسن خوارزميات أفضل باستخدام تحويل فورييه السريع (Fast Fourier Transform)؛ إذ كانت فكرتهم أن يعاملوا الأعدادَ بطريقةٍ ما على أنها «إشارات»، وأن ينفّذوا الضرب بكفاءة أعلى بالانتقال إلى مجال فورييه. (ويُعدّ تحويل فورييه (Fourier transform) أداةً مركزية في الرياضيات والهندسة، تُستعمل في عددٍ هائل من التطبيقات؛ فإن لم تكن قد رأيته بعد، فصُدف أن تصادفه في وقتٍ ما أثناء دراستك.) وفي السنوات التي تلت ذلك واصل الباحثون تحسين الخوارزمية، ولم ينجح هارفي وفان دير هوفن إلا مؤخرًا جدًا في الحصول على خوارزمية ضرب زمنها (مع أنها لا تبدأ في التفوّق على خوارزمية شونهاغه وستراسن إلا عند أعداد فلكية حقًا). ومع ذلك، ورغم كل هذا التقدّم، فإننا لا نعرف بعدُ ما إذا كان هناك خوارزمية زمنها لضرب عددين من رقمًا!
ملاحظة — ضرب المصفوفات (ملاحظة متقدّمة)
(يحتوي هذا الكتاب على كثير من الملاحظات والأقسام «المتقدّمة» أو «الاختيارية». وقد تفترض هذه خلفيةً ليس كل طالب يملكها، ويمكن تخطّيها بأمان إذ لا يعتمد أيٌّ من الأجزاء اللاحقة عليها.)
يمكن استعمال أفكار شبيهة بأفكار كاراتسوبا لتسريع عمليات ضرب المصفوفات (matrices) أيضًا. فالمصفوفات طريقةٌ قويّة لتمثيل المعادلات الخطية والعمليات، وتُستعمل على نطاقٍ واسع في تطبيقاتٍ لا حصر لها في الحوسبة العلمية والرسوميات والتعلّم الآلي وغيرها بكثير.
ومن العمليات الأساسية التي يمكن إجراؤها على مصفوفتين هي ضربهما بعضهما في بعض. فمثلًا، إذا كان و فإن حاصل ضرب في هو المصفوفة . ويمكنك أن ترى أننا نستطيع حساب هذه المصفوفة عبر ثمانية جداءات بين الأعداد.
ولنفترض الآن أن زوجيًا، وأن و زوجٌ من المصفوفات ذات ، كلٌّ منهما مؤلَّفٌ من أربع كتل سُمّيت و. عندئذٍ يمكن التعبير عن صيغة حاصل ضرب المصفوفتين و بالطريقة نفسها أعلاه، مع استبدال الجداءات بجداءات مصفوفات، والجمع بجمع المصفوفات. وهذا يعني أننا نستطيع استعمال الصيغة أعلاه لاشتقاق خوارزمية تُضاعِف أبعادَ المصفوفات على حساب زيادة عدد العمليات بمعامل ، وهو ما ينتج عملية من أجل .
وفي عام 1969، لاحظ فولكر ستراسن أن بالإمكان حساب حاصل ضرب زوجٍ من المصفوفات باستخدام سبعة فقط من جداءات الأعداد، وذلك بملاحظة أن كل مُدخَل في المصفوفة يمكن حسابه بجمع الحدود السبعة التالية وطرحها: ، و، و، و، و، و، و. وبالفعل، يمكن التحقق من أن .
وباستعمال هذه الملاحظة، يمكننا الحصول على خوارزمية بحيث إنّ مضاعفة أبعاد المصفوفات تؤدّي إلى زيادة عدد العمليات بمعامل ، ما يعني أن التكلفة من أجل هي . ومنذ ذلك الحين حسّن عملٌ طويل هذه الخوارزمية، وبلغ الرقم القياسي الحالي زمن تشغيل قدره نحو . غير أن الأمر، بخلاف حالة ضرب الأعداد الصحيحة، لا نعرف حتى الآن أي خوارزمية لضرب المصفوفات تعمل في زمن خطي أو حتى قريب من الخطي في حجم مصفوفات المُدخل (مثلًا خوارزمية زمنها ). وقد حاول الناس استعمال تمثيلات المجموعات، ويمكن النظر إليها على أنها تعميمات لتحويل فورييه، للحصول على خوارزميات أسرع، لكن هذا الجهد لم ينجح بعد.
الخوارزميات خارج الحساب
السعي وراء خوارزميات أفضل ليس محصورًا البتّة في المهام الحسابية مثل الجمع أو الضرب أو حلّ المعادلات. فقد اكتُشف في العقود العديدة الماضية كثير من خوارزميات الرسوم البيانية (graph algorithms)، بما فيها خوارزميات إيجاد المسارات والتطابقات والأشجار الممتّنة والقطع والتدفّقات، ولا يزال هذا مجال بحثٍ مكثّف. (فمثلًا، شهدت السنوات الأخيرة تطوّرات كثيرة في خوارزميات مسألة أقصى تدفّق (maximum flow)، ناتجةً عن صلاتٍ غير متوقّعة مع الدوائر الكهربائية وحلّال المعادلات الخطية.) وتُستعمل هذه الخوارزميات ليس في التطبيقات «الطبيعية» فحسب، مثل توجيه حركة مرور الشبكات أو الملاحة عبر نظام تحديد المواقع، بل أيضًا في تطبيقات شديدة التنوّع، مثل اكتشاف الأدوية عبر البحث عن بنى في رسوم تفاعل الجينات، وصولًا إلى حساب المخاطر من الارتباطات في الاستثمارات المالية.
أُسِّست شركة Google على أساس خوارزمية PageRank، وهي خوارزمية كفؤة لتقريب «المتجه الخاصّ الرئيس» (principal eigenvector) لمصفوفة تجاور شبكة الويب (بصورة مُخمَّدة منها). وأُسِّست شركة Akamai على أساس بنية بيانات جديدة تُعرف بـ_التجزئة المتّسقة_ (consistent hashing)، لجدول تجزئة تُخزَّن «دلاءه» (buckets) في خوادم مختلفة. وتُشكّل خوارزمية الانتشار العكسي (backpropagation algorithm)، التي تحسب المشتقات الجزئية لشبكة عصبية في زمنيًا بدلًا من ، الأساسَ وراء كثيرٍ من النجاحات المذهلة الحديثة في تعلّم الشبكات العصبية العميقة. وقد استُعملت خوارزميات حلّ المعادلات الخطية تحت قيود التخلّف (sparsity) — وهو مفهومٌ يُعرف بـ_الاستشعار الضاغط_ (compressed sensing) — لتقليص حجم البيانات المطلوبة لتحليل صور التصوير بالرنين المغناطيسي التقليصَ الجذري، وتحسين جودتها. وهذا أحدث فرقًا حاسمًا في تصوير الأورام السرطانية عند الأطفال بالأشعة المغناطيسية، حيث كان الأطباء مضطرين في السابق إلى استعمال التخدير لشلّ التنفّس أثناء الفحص، أحيانًا بعواقب وخيمة.
وحتى في الأسئلة الكلاسيكية التي دُرست على مرّ العصور، ما تزال الاكتشافات الجديدة تتواصل. فمثلًا، في مسألة تحديد ما إذا كان عددٌ صحيحٌ معيّن أوّلًا أم مركّبًا، وهي مسألة دُرست منذ أيام فيثاغورس، لم تُكتشف الخوارزميات الاحتمالية الكفؤة إلا في السبعينيات، بينما لم يُعثر على أول خوارزمية حتمية من رتبة متعدد الحدود إلا في عام 2002. وفي المسألة المرتبطة، أي مسألة إيجاد عوامل عددٍ مركّب فعليًا، وُجدت خوارزميات جديدة في الثمانينيات، وفي التسعينيات (كما سنرى لاحقًا في هذا المقرر) رفعت الاكتشافاتُ آفاقَ الأمل في الحصول على خوارزميات أسرع عبر استعمال تأثيرات ميكانيكا الكم.
ورغم كل هذا التقدّم، فإنّ في عالم الخوارزميات ما زال ثمة أسئلة أكثر بكثير من الإجابات. ففي حالة كل المسائل الطبيعية تقريبًا، لا نعرف ما إذا كانت الخوارزمية الحالية هي «الأفضل»، أم ما تزال هناك خوارزمية أفضل بكثير في انتظار الاكتشاف. وكما ألمحت إليه مقولة كوبهام الافتتاحية لهذا الفصل، فإننا حتى في مسألة ضرب الأعداد الأساسية لم نجب بعدُ عن سؤال ما إذا كانت هناك خوارزمية ضرب بكفاءة خوارزمياتنا في الجمع أم لا. لكننا على الأقلّ نعرف الآن الطريقة الصحيحة لـ_أن نسأل_ هذا السؤال.
في أهمية النتائج السالبة
العثور على خوارزميات أفضل لمسائل مثل الضرب، أو حلّ المعادلات، أو مسائل الرسوم البيانية، أو مواءمة الشبكات العصبية مع البيانات، هو بلا شكّ جهدٌ يستحقّ العناء. لكنّ لماذا المهمّة أن نُثبت أن هذه الخوارزميات لا توجد؟ أحد الدوافع هو الفضول الفكري المجرّد. وسببٌ آخر لدراسة نتائج الاستحالة أنها تقابل الحدود الأساسية لعالمنا. بمعنى آخر، فإن نتائج الاستحالة هي قوانين طبيعة.
وهذه بعض أمثلة نتائج الاستحالة خارج علم الحاسوب (انظر ملاحظات مرجعية للمزيد عنها). ففي الفيزياء، تقابل استحالة بناء آلة الحركة الدائمة (perpetual motion machine) قانون حفظ الطاقة. وتقابل استحالة بناء محرّك حراري يتجاوز حدّ كارنو القانون الثاني للديناميكا الحرارية، بينما تُعدّ استحالة نقل المعلومات بسرعة تفوق سرعة الضوء إحدى ركائز النسبية الخاصة. وفي الرياضيات، رغم أننا جميعًا تعلّمنا في المدرسة الثانوية صيغة حلّ المعادلات التربيعية، فإن استحالة تعميم هذه الصيغة على معادلات من الدرجة الخامسة أو أعلى ولدت نظرية المجموعات. واستحالة إثبات بديهية إقليدس الخامسة من الأربع الأولى أنتجت الهندسات اللاإقليدية، التي انتهى أمرها إلى أن تكون حاسمةً لنظرية النسبية العامة.
وبالمثل، فإن نتائج استحالة الحوسبة تقابل «قوانين حوسبة الطبيعة» التي تخبرنا بالحدود الأساسية لأي جهاز معالجة معلومات، سواء كان قائمًا على السيليكون أم على العصبونات أم على الجسيمات الكمّية. وفضلا عن ذلك، وجد علماء الحاسوب مقاربات إبداعية لـ_تطبيق_ القيود الحوسبية لإنجاز مهامّ مفيدة. فمثلًا، يُشفَّر قدرٌ كبير من حركة الإنترنت الحديثة باستخدام مخطط تشفير RSA، الذي يستند أمنه إلى استحالة (المُفترَضة) تحليل الأعداد الصحيحة الكبيرة إلى عواملها بكفاءة. وفي الآونة الأخيرة، يستعمل نظام Bitcoin نظيرًا رقميًا لمعيار «الذهب»، حيث لا يُستعمل معدنٌ ثمين بل تُكتسب عملةٌ جديدة عبر «تعدين» حلولٍ لمسائل يصعب حلّها حوسبيًا.
خلاصة
- يعود تاريخ الخوارزميات إلى آلاف السنين؛ فقد كانت أساسية لكثير من التقدّم البشري، وهي اليوم تُشكّل أساس صناعاتٍ تتجاوز قيمة كلٍّ منها مليارات الدولارات، وكذلك تقنياتٍ تُنقذ الأرواح.
- كثيرًا ما توجد أكثر من خوارزمية واحدة لإنجاز المهمة الحسابية نفسها. والعثور على خوارزمية أسرع يمكن أن يُحدث فرقًا أكبر بكثير من تحسين عتاد الحوسبة.
- والخوارزميات وبنى البيانات الأفضل لا تُسرّع الحسابات فحسب، بل يمكن أن تنتج رؤى نوعية جديدة.
- إحدى المسائل التي سندرسها هي معرفة ما هي الخوارزمية الأكفأ لم مسألة معطاة.
- ولإثبات أن خوارزمية هي الأكفأ لم مسألة ما، نحتاج إلى القدرة على إثبات أنه مستحيل حلّ المسألة باستعمال عددٍ أقل من الموارد الحسابية.
خارطة طريق لبقية هذا الكتاب
كثيرًا ما، عندما نحاول حلّ مسألة حسابية، سواء كانت حلّ جملة من المعادلات الخطية، أو إيجاد أكبر متجه خاصّ في مصفوفة، أو محاولة ترتيب نتائج البحث على الإنترنت، يكفي أن نستعمل معيار «أعرفها حين أراها» في وصف الخوارزميات. ومتى ما وجدنا بعض طريقة لحلّ المسألة، فإننا نكتفي بذلك، وقد لا نبالغ في اهتمامنا بالنموذج الرياضي الدقيق لخوارزميتنا. لكن حين نريد الإجابة عن سؤال مثل «هل يوجد خوارزمية لحلّ المسألة ؟»، نحتاج إلى دقّةٍ أكبر بكثير.
على وجه التحديد، سنحتاج إلى (1) تعريف دقيق لما يعنيه حلّ ، و__(2)__ تعريف دقيق لما هي الخوارزمية. وقد لا يكون (1) بسيطًا في بعض الأحيان، لكن (2) هو التحدّي الخاصّ؛ إذ ليس من البتّة واضح كيف (ولا حتى إن كان ذلك ممكنًا) كيف نستطيع أن نُحيط بكل الطرق المحتملة لتصميم الخوارزميات. وسندرس عدة نماذج حوسبة (models of computation) بسيطة، ونُبيّن أنها، رغم بساطتها، تلتقط كل المقاربات «المعقولة» لتحقيق الحوسبة، بما فيها كل تلك المستعملة حاليًا في أجهزة الحوسبة الحديثة.
وبعد أن تتوفّر لنا نماذج الحوسبة هذه الصياغية، يمكننا أن نحاول الحصول على نتائج استحالة (impossibility results) لمهامَّ حسابية، تُبيّن أن بعض المسائل لا يمكن حلّها (وربّما لا يمكن حلّها ضمن موارد عالمنا). وقد قال أرشميدس مرةً إن محورًا ورفاعًا طويلًا بما يكفي يكفيان لتحريك العالم. وسنرى كيف تُتيح لنا الاختزالات (reductions) الانتقالَ من نتيجة صعوبة واحدة إلى عددٍ كبير جدًّا من نتائج الصعوبة الأخرى، تضيءَ الحدودَ بين المسائل القابلة للحساب (computable) وغير القابلة للحساب (uncomputable)، أو القابلة للحلّ (tractable) والعسيرة (intractable).
وسنعود في ما بعد من هذا الكتاب إلى فحص نماذج الحوسبة لدينا، ونرى كيف يمكن لموارد مثل العشوائية أو التشابك الكمّي أن تغيّر نظريًا قوة نموذجنا. وفي سياق الخوارزميات الاحتمالية، سنرى لمحةً عن كيف صارت العشوائية أداةً لا غنى عنها لفهم الحوسبة والمعلومات والاتصال. وسنرى أيضًا كيف يمكن أن تكون الصعوبة الحسابية أصلًا لا عائقًا، وأن تُستعمل في «إزالة العشوائية» (derandomization) من الخوارزميات الاحتمالية. وتظهر الأفكار نفسها أيضًا في علم التعمية (cryptography)، الذي شهد في العقود الماضية ثورةً لا تقنية فحسب بل فكرية أيضًا، وكثيرٌ منها مبنيٌّ على الأسس التي نستكشفها في هذا المقرر.
علم الحاسوب النظري موضوعٌ واسع، يتمدّد متفرّعًا ويلامس تخصّصات علمية وهندسية كثيرة. ويقدّم هذا الكتاب عيّنة جزئية جدًّا (ومتحيّزة) من هذا المجال. وفوق كل شيء، آمل أن أتمكّن من أن «أعدي» بعض حُبّي لهذا المجال على الأقلّ إليك، وهو حبٌّ مستوحى ومغذّى بالصلة بالممارسة، لكنه عميق وجميل بصرف النظر عن التطبيقات.
الاعتماديات بين الفصول
ينقسم هذا الكتاب إلى الأجزاء التالية، انظر الشكل التوضيحي.
-
تمهيديات: المقدمة، الخلفية الرياضية، وتمثيل الأشياء كنصوص.
-
الجزء الأول: الحوسبة المتناهية (الدوائر المنطقية): تكافؤ الدوائر مع البرامج المستقيمة. مجموعات بوابات عَامّة. وجود دائرة لكل دالة، وتمثيل الدوائر كنصوص، الدائرة العَامّة، الحدّ الأدنى لحجم الدائرة باستعمال حجّة العدّ.
-
الجزء الثاني: الحوسبة المنتظمة (آلات تورينج): تكافؤ آلات تورينج مع البرامج ذات الحلقات. تكافؤ النماذج (بما فيها آلات RAM، وحساب لامدا ( calculus)، والأوتوماتا الخلوية)، وتهيئات آلات تورينج، ووجود آلة تورينج عَامّة، والدوال غير قابلة للحساب (بما فيها مسألة التوقف ومبرهنة رايس)، ومبرهنة عدم اكتمال غودل، والنماذج الحسابية المقيّدة (اللغات النمطية واللغات الخالية من السياق).
-
الجزء الثالث: الحوسبة الكفؤة: تعريف زمن التشغيل، مبرهنة التسلسل الزمني، و، و، واكتمال ومبرهنة كوك-ليفن، والحوسبة المحدودة المساحة.
-
الجزء الرابع: الحوسبة العشوائية: الاحتمال، الخوارزميات العشوائية، ، والتضخيم (amplification)، و، والمولّدات شبه العشوائية وإزالة العشوائية.
-
الجزء الخامس: مواضيع متقدّمة: علم التعمية، والبراهين والخوارزميات (البراهين التفاعلية وبراهين المعرفة الصفرية، وتطابق Curry-Howard)، والحوسبة الكمّية.

ويسير الكتاب إلى حدٍّ كبير بترتيبٍ خطّي، مع بناء كل فصلٍ على ما قبله، مع الاستثناءات التالية:
-
موضوعات حساب لامدا (حساب لامدا ولغات البرمجة الوظيفية وحساب لامدا ولغات البرمجة الوظيفية)، ومبرهنة عدم اكتمال غودل (هل كل مبرهنة قابلة للإثبات؟)، والأوتوماتا والتعبيرات النمطية وقواعد السياق الحر (نماذج الحوسبة المقيَّدة)، والحوسبة المحدودة المساحة (الحساب المقيّد بالمساحة)، لا تُستعمل في الفصول التالية. ولذلك يمكنك أن تختار تغطيتها أو تخطّي أيّ مجموعة فرعية منها.
-
لا يملك الجزء الثاني (الحوسبة المنتظمة / آلات تورينج) اعتمادًا قويًّا على الجزء الأول (الحوسبة المتناهية / الدوائر المنطقية)، ومن الممكن تدريسهما بترتيبٍ معكوس مع تعديل طفيف. إذ تُستعمل الدوائر المنطقية في الجزء الثالث (الحوسبة الكفؤة) في نتائج من قبيل ومبرهنة كوك-ليفن، وكذلك في الجزء الرابع (من أجل وإزالة العشوائية) والجزء الخامس (وبالذات في علم التعمية والحوسبة الكمّية).
-
جميع الفصول في advancedpart (المواضيع المتقدّمة) مستقلّة عن بعضها ويمكن تغطيتها بأي ترتيب.
ويمكن لمقررٍ مبنيٌّ على هذا الكتاب أن يستعمل الأجزاء الأول والثاني والثالث كلّها (مع تجاوز بعضها أو كلّها من حساب لامدا، أو هل كل مبرهنة قابلة للإثبات؟، أو نماذج الحوسبة المقيَّدة، أو الحساب المقيّد بالمساحة)، ثمّ أن يغطّي إما الجزء الرابع كلّه (الحوسبة العشوائية) أو بعضه، وأن يضيف «رشةً» من المواضيع المتقدّمة من الجزء الخامس بحسب اهتمام الطالب أو المُدرِّس.
التمارين
تمرين
رتّب أهمية الاختراعات التالية في تسريع ضرب الأعداد الكبيرة (أي التي تتكوّن من 100 رقم أو أكثر). أي استعمل تقديرات «الحساب على ظهر الورقة» لترتيبها من حيث معامل التسريع الذي قدّمته مقارنةً بالحالة السابقة.
a. اكتشاف خوارزمية المدرسة الابتدائية الضرب رقمًا برقم (أي تحسينًا على الجمع المتكرّر).
b. اكتشاف خوارزمية كاراتسوبا (أي تحسينًا على خوارزمية الضرب رقمًا برقم).
c. اختراع الحواسيب الإلكترونية الحديثة (أي تحسينًا على الحسابات بالقلم والورق).
تمرين
كان الحاسوب الشخصي Apple II عام 1977 معالجًا سرعته 1.023 Mhz، أي نحو عملية في الثانية. وفي وقت كتابة هذه السطور، يُنفّذ أسرع حاسوب فائق في العالم 93 «بيتا-فلوب» (petaflops) أي عملية فاصلة عائمة في الثانية، أي نحو خطوة أساسية في الثانية. لكلٍّ من أزمنة التشغيل التالية (بوصفها دالةً في طول المُدخل )، احسب لكلٍّ من الحاسوبين كم مُدخلًا كبيرًا يستطيع معالجته في أسبوعٍ من الحساب، إذا كان ينفّذ خوارزمية بهذا الزمن:
a. عملية.
b. عملية.
c. عملية.
d. عملية.
e. عملية.
تمرين — فائدة عدم وجود خوارزمية
ذكرنا في هذا الفصل عدة شركات أُسِّست على أساس اكتشاف خوارزميات جديدة. فهل يمكنك أن تعطي مثالًا لشركة أُسِّست على أساس عدم وجود خوارزمية؟ انظر الهامش للحصول على تلميح.[4]
تمرين — تحليل خوارزمية كاراتسوبا
a. نفترض أن هو تسلسل أعداد بحيث وأن لكل ، يكون بالنسبة إلى ما. برهن أن لكل .[5] \
b. برهن أن عدد عمليات الأرقام المفردة التي تتطلّبها خوارزمية كاراتسوبا لضرب عددين من رقمًا لا يتجاوز .
تمرين
نفّذ في لغة البرمجة التي تختارها الدالتين Gradeschool_multiply(x,y) وKaratsuba_multiply(x,y) اللتين تأخذان مصفوفتَي أرقام x وy وتعيدان مصفوفة تمثّل حاصل ضرب x في y (حيث يُعرَّف x بالعدد x[0]+10*x[1]+100*x[2]+... إلخ) باستعمال خوارزمية المدرسة الابتدائية وخوارزمية كاراتسوبا على التوالي. عند أيّ عددٍ من الأرقام تتفوّق خوارزمية كاراتسوبا على خوارزمية المدرسة الابتدائية؟
تمرين — ضرب المصفوفات (اختياري، متقدّم)
في هذا التمرين، نُبيّن أنه إذا كان بالإمكان، بالنسبة إلى ما، كتابة حاصل ضرب مصفوفتين حقيقيّتي القيم بما لا يتجاوز ضربًا، أمكّننا عندئذٍ ضرب مصفوفتين في نحو زمنًا لكل كبير بما يكفي.
ولنجعل هذا دقيقًا، نحتاج إلى إنشاء بعض التدوين الذي لسوء الحظّ ثقيل نوعًا ما. نفترض أن هناك ما و بحيث إن كان لدينا أي مصفوفات و، أمكننا أن نكتب لكل : بعض الدوال الخطية ومعاملات . برهن أن، تحت هذا الافتراض، لكل ، إذا كان كبيرًا بما يكفي، فإن هناك خوارزمية تحسب حاصل ضرب مصفوفتين باستعمال عملية حسابية على الأكثر. انظر الهامش للحصول على تلميح.[6]
ملاحظات مرجعية
ولنحصل على لمحة موجزة عمّا سنراه في هذا الكتاب، من المفيد جدًا أن تقرأ مقال برنارد شازل الرائع عن الخوارزمية بوصفها أداةً في العلوم الحديثة. ويقدّم كتاب مور وميرتنز [@MooreMertens11] عرضًا رائعًا وشاملًا لنظرية الحوسبة، بما في ذلك كثيرٌ مما نُناقشه في هذا الفصل وفي بقية هذا الكتاب. وكتاب Aaronson [@Aaronson13democritus] قراءةٌ أخرى عظيمة تمسّ الموضوعات ذاتها إلى حدٍّ بعيد.
ولمزيدٍ من المعلومات عن الخوارزميات التي استعملها البابلليون، انظر مبحث نوت والكتاب الكلاسيكي لنويتوباورر.
وكثيرٌ من الخوارزميات التي نذكرها في هذا الفصل مشمولة في كتب الخوارزميات، مثل كتب كورمن وليزرسون وريفِست وستاين [@CLRS]، وكلينبرغ وتاردوس [@KleinbergTardos06]، وداسغوpta وباباديميتراوف وفازيراني [@DasguptaPV08]، وكذلك كتاب جيف إريكسون التدريسي. وكتاب إريكسون متاح مجانًا على الإنترنت ويتضمّن عرضًا ممتازًا للخوارزميات التكرارية عمومًا، لخوارزمية كاراتسوبا بصفة خاصة.
ويروي أناتولي كاراتسوبا نفسه في [@Karatsuba95] قصّة اكتشافه خوارزمية الضرب التي يحمل اسمها. وكما ذُكر أعلاه، أُجريت تحسيناتٌ إضافية من قِبل توم وكوك [@Toom63, @Cook66]، وشونهاغه وستراسن [@SchonhageStrassen71]، وفورِر [@Furer07]، ومؤخّرًا هارفي وفان دير هوفن [@HarveyvdHoeven2019]، انظر هذا المقال لعرضٍ جيد. وقصّة إعادة اكتشاف هذه الخوارزمية على يد جون توكي في سياق الحرب الباردة يرويها [@Cooley87FFTdiscovery]. (ونقول «إعادة اكتشاف» لأنه تبيّن لاحقًا أن تاريخ الخوارزمية يعود إلى غاوس [@heideman1985gauss].) وتُعالَج تحويلات فورييه السريعة في بعض الكتب المذكورة أدناه، كما تتوفّر أيضًا محاضرات عبر الإنترنت مثل محاضرات جيف إريكسون. انظر أيضًا هذا المقال الشهير لديفيد أوستن. وقد اكتُشف الضرب السريع للمصفوفات (matrix multiplication) على يد ستراسن [@Strassen69]، ومنذ ذلك الحين وهذا مجال بحثٍ نشط. و[@Blaser13] استعراضٌ موصى به ومستقلّ بذاته لهذا المجال.
واخترع ويربوس [@Werbos74] خوارزمية الانتشار العكسي (Backpropagation) من أجل الاشتقاق السريع للشبكات العصبية. واخترع لاري بيج وسيرجي برين [@pagerank99] خوارزمية PageRank. وهي ترتبط عن قرب بخوارزمية HITS لكلينبرغ [@Kleinber99]. وأُسِّست شركة Akamai على أساس بنية بيانات التجزئة المتّسقة (consistent hashing) الموصوفة في [@Akamai97]. ولـ_الاستشعار الضاغط_ (compressed sensing) تاريخٌ طويل. والورقتان التأسسيتان هما [@CandesRombergTao06, @Donoho2006compressed]. ويقدّم [@compressedmri08] استعراضًا لتطبيقات الاستشعار الضاغط في التصوير بالمغناطيسية؛ انظر أيضًا [هذا المقال الشهير لإيلنبرغ [@@Ellenberg10wired]. وقد قدّم أغروال وكايال وساكسينا [@AgrawalKayalSaxena04] الخوارزمية الحتمية من رتبة متعدد الحدود لاختبار الأولية.
ألمحنا بإيجاز إلى نتائج الاستحالة الكلاسيكية في الرياضيات، بما فيها استحالة إثبات بديهية إقليدس الخامسة من البقية، واستحالة ثلاثي الزاوية بالمسطر والقلم الدائري، واستحالة حلّ معادلة من الدرجة الخامسة بالجذور. وقد عُرض برهان هندسي لاستحالة ثلاثي الزاوية (وهي إحدى المسائل الهندسية الكلاسيكية الثلاث التي ترجع إلى اليونان القديمة) في تدوينة تاو هذه. ويغطّي كتاب ماريو ليفيو [@Livio05] بعض الخلفية والأفكار الكامنة وراء نتائج الاستحالة هذه. وهناك بحثٌ حديث مثير يركّز على محاولة استعمال التعقيد الحسابي لإلقاء ضوء على الأسئلة الأساسية في الفيزياء، مثل فهم الثقوب السوداء والتوفيق بين النسبية العامة وميكانيكا الكم.
غالبًا ما تُقرأ هذه المقولة على أنها تحقير لأهمية الحواسيب الفيزيائية الفعلية في علم الحاسوب، لكن لاحظ أن الناظر لا غنى عنه البتة في الفلك، لأنه يتيح لنا وسيلةً لربط التنبؤات النظرية بالملاحظات التجريبية الفعلية. ↩︎
وللإنصاف، فإن غراهام يقول في الجملة التالية "عليك أن تعرف كيف تحسب التعقيد الزمني والمكاني، وأن تعرف ما معنى Turing completeness". ويتضمّن هذا الكتاب هذه الموضوعات، إلى جانب موضوعات أخرى مثل الصعوبة NP، والعشوائية، وعلم التعمية، والحوسبة الكمّية، وغيرها. ↩︎
إذا كان عددًا فإن هي العدد الصحيح الناتج عن تقريبه إلى الأسفل، انظر هذا الكتاب: الترميز والاصطلاحات. ↩︎
وكما سنرى في الفصل التشفير، فإن كل شركة تقريبًا تعتمد على علم التعمية تحتاج إلى افتراض عدم وجود خوارزميات بعينها. وعلى وجه التحديد، أُسِّست شركة RSA Security على أساس أمان نظام RSA المُعمّى، الذي يفترض عدم وجود خوارزمية كفؤة لحساب التحليل الأوّل للأعداد الصحيحة الكبيرة إلى عواملها الأولية. ↩︎
تلميح: استعمل برهانًا بالاستدلال — افترض أن هذا صحيح لكل قيم من إلى ، وبرهن أنه صحيح أيضًا لـ. ↩︎
ابدأ بإثبات ذلك في حالة بالنسبة إلى طبيعي ما، وفي هذه الحالة تستطيع فعل ذلك تكراريًا بتقسيم المصفوفات إلى كتل . ↩︎