نمذجة زمن التنفيذ { #chapmodelruntime }
نمذجة زمن التنفيذ
- النمذجة الرسمية لزمن التنفيذ، وبخاصة المفاهيم مثل خوارزميات الزمن أو . \
- الصنفان و اللذان يَمجِّدان على التوالي زمن متعدد الحدود والزمن الأسّي. \
- نظرية التسلسل الزمني (time hierarchy theorem)، التي تقول تحديدًا إن لكل هناك دوال نستطيع حسابها في زمن لكن لا نستطيع حسابها في زمن . \
- الصنف من الحساب غير المنتظم (non-uniform)، والنتيجة القائلة إن
"عندما يكون مقياس حجم المسألة معقولًا وحين تأخذ الأحجام قيمًا كبيرة إلى حدّ التطرف، يصبح التقدير المقارِب لـ ... رتبة صعوبة [خوارزمية] ... مهمًّا من الناحية النظرية. فهو لا يمكن تزويره بجعل الخوارزمية صعبة بصورة مصطنعة عند الأحجام الأصغر"، جاك إدمونز، "Paths, Trees, and Flowers"، 1963
اقتباس
ماكس نيومان: من الجيد جدًا أن تقول إن آلة تستطيع ... أن تفعل هذا أو ذاك، لكن ... فماذا عن الوقت الذي يستغرقه ذلك؟
آلان تورينج: في رأيي فإن هذا العامل الزمني هو السؤال الوحيد الذي سيّضمّ كل الصعوبة التقنية الحقيقية.
لوحة إذاعية في BBC حول "هل يمكن القول إن آلات الحساب الآلية تفكّر؟"، 1952
في الحساب الكفؤ: مقدمة غير رسمية رأينا أمثلة على خوارزميات فعّالة، وقدّمنا بعض الادّعاءات عن زمن تنفيذها، لكننا لم نعطِ تعريفًا رياضيًا دقيقًا لهذا المفهوم. سنفعل ذلك في هذا الفصل، باستعمال نماذج آلات تورينج وآلات RAM (أو بما يكافئهما NAND-TM وNAND-RAM) التي رأيناها من قبل. زمن تنفيذ خوارزمية ليس عددًا ثابتًا، إذ إن أي خوارزمية غير تافهة تحتاج وقتًا أطول لتشغيلها على مدخلات أطول. ولذلك فإن ما نريد قياسه هو الاعتمادية بين عدد الخطوات التي تأخذها الخوارزمية وطول المدخل. وبخاصة فإننا نهتم بالتمييز بين الخوارزميات التي تعمل في زمن متعدد الحدود على الأكثر (أي، زمن لثابت ما ) وبين المسائل التي تحتاج كل خوارزمية زمنًا أسّيًا على الأقل (أي، لثابت ما ). وكما ذُكر في اقتباس إدمونز في الحساب الكفؤ: مقدمة غير رسمية، فإن الفرق بين هذين قد يكون أحيانًا بحجم الفرق بين القابل للحساب وغير القابل للحساب.

في هذا الفصل نعرّف رسميًا ما معنى أن تكون دالة قابلة للحساب في عدد معيّن من الخطوات. وكما ناقشنا في الحساب الكفؤ: مقدمة غير رسمية، فإن زمن التنفيذ ليس عددًا، بل ما يهمّنا هو سلوك التوسّع (scaling behavior) لعدد الخطوات مع نمو حجم المدخل. يمكننا استعمال آلات تورينج أو آلات RAM لإعطاء هذا التعريف الرسمي، ويبيّن أنّ ذلك لا يُحدث فرقًا على مستوى الدقّة الذي يهمّنا. سنُجري في هذا الفصل عدة تعريفات مهمّة ونبرهن على بعض النظريات المهمّة. سنعرّف أصناف التعقيد الزمني (time complexity classes) الأساسية المستعملة في هذا الكتاب، وسنبيّن أيضًا نظرية التسلسل الزمني التي تقول إن إعطاءنا موارد أكثر (عدد خطوات أكثر لكل حجم مدخل) يتيح لنا حساب دوال أكثر.
بعبارة أخرى بلغة أكثر «رياضية»، سنعرّف في هذا الفصل ما معنى أن تكون الدالة قابلة للحساب في زمن خطوة، حيث دالة ما تربط طول المدخل بعدد خطوات الحساب المسموح بها. وباستعمال هذا التعريف سنقوم بما يلي (انظر أيضًا الشكل التوضيحي):
-
سنعرّف الصنف من الدوال البوليانية القابلة للحساب في زمن متعدد الحدود، والصنف من الدوال القابلة للحساب في زمن أسّي. لاحظ أن . فإذا استطعنا حساب دالة في زمن متعدد الحدود، فمن المؤكد أننا نستطيع حسابها في زمن أسّي.
-
سنبيّن أن الأزمنة اللازمة لحساب دالة باستعمال آلة تورينج وباستعمال آلة RAM (أو برنامج NAND-RAM) مرتبطة بعلاقة متعددة الحدود. وبخاصة فهذا يعني أن الصنفين و متطابقان سواء عُرِّفا باستعمال آلات تورينج أو آلات RAM / برامج NAND-RAM.
-
سنعطي برنامج NAND-RAM شاملًا فعّالًا، ونستعمل ذلك لإثبات نظرية التسلسل الزمني التي تعني تحديدًا أن مجموعة جزئية مُحكمة (strict subset) من .
-
سنربط المفاهيم المعرَّفة هنا بالنماذج غير المنتظمة من الدوائر البوليانية وبرامج NAND-CIRC المعرَّفة في تعريف الحوسبة. ونعرّف بأنه صنف الدوال التي يمكن حسابها بواسطة متتالية من دوائر ذات حجم متعدد الحدود. ونبرهن على أن وأن يحوي دوال غير قابلة للحساب.
التعريف الرسمي لزمن التنفيذ
تعمل كل نماذجنا للحساب (آلات تورينج وبرامج NAND-TM وبرامج NAND-RAM وغيرها) بتنفيذ سلسلة من التعليمات على مدخل واحد خطوة في كل مرة. يمكننا تعريف زمن التنفيذ لخوارزمية في أحد هذه النماذج بقياس عدد الخطوات التي تأخذها على المدخل بوصفه دالةَ طول المدخل . نبدأ بتعريف زمن التنفيذ بالنسبة إلى آلات تورينج:
تعريف — زمن التنفيذ (آلات تورينج)
ليكن دالة ما تربط الأعداد الطبيعية بالأعداد الطبيعية. نقول إن الدالة قابلة للحساب في زمن آلة تورينج مقداره (وباختصار: زمن TM) إذا وُجدت آلة تورينج بحيث إن لكل كبير بما يكفي ولكل ، عند إعطائها المدخل تتوقّف الآلة بعد تنفيذ خطوة على الأكثر وتُخرج .
نعرّف بأنه مجموعة الدوال البوليانية (الدوال التي تربط بـ ) القابلة للحساب في زمن TM مقداره .
لدالة و، يمكننا تعريف رسميًا معنى أن تكون قابلة للحساب في زمن لا يتجاوز ، حيث هو حجم المدخل.
توقّف وتأمّل
ليس تعريف — زمن التنفيذ (آلات تورينج) معقّدًا جدًا، لكنه من أهم التعريفات في هذا الكتاب. وكالمعتاد، فإن صنف من الدوال لا من الآلات. فإذا كان آلة تورينج، فإن عبارة مثل « عنصر في » لا معنى لها. ويُشار في الأدبيات إلى مفهوم زمن TM المعرَّف هنا أحيانًا بـ«زمن آلة تورينج ذات شريط واحد» (single-tape Turing machine time)، لأن بعض النصوص تعتبر آلات تورينج ذات أكثر من شريط عمل واحد.
إن التساهل في اعتبار قيم «الكبيرة بما يكفي» فقط ليس مهمًّا جدًا، لكنه مريح لأنه يتيح لنا ألّا نتعامل صراحةً مع «الحالات الحدّية» غير المثيرة للاهتمام.
بينما يمكن تعريف مفهوم القابلية للحساب ضمن زمن تنفيذ معيّن لكل دالة، فإن الصنف هو صنف من الدوال البوليانية ذات الخرج ببت واحد. وهذا الاختيار ليس مهمًّا جدًا، لكنه اتُّخذ من أجل البساطة والراحة لاحقًا. وفي الواقع، لكل دالة غير بوليانية تكافؤٌ حسابي مع دالة بوليانية، انظر تمرين — الدوال البوليانية.
تمرين محلول — مثال على حدود الزمن
برهن أن .

الحل
يتضح البرهان في الشكل التوضيحي. لنفرض أن ، ومن ثم يوجد عدد ما وآلة بحيث إن لكل ولكل ، تُخرج القيمة في خطوة على الأكثر. بما أن ، يوجد عدد ما بحيث إن لكل لدينا . ومن ثم فإن لكل تُخرج القيمة في خطوة على الأكثر، مما يُظهر أن .
الزمن متعدد الحدود والأسّي
على خلاف مفهوم قابلية الحساب، قد يكون زمن التنفيذ الدقيق دالةً للنموذج الذي نستعمله. غير أنه يتبيّن أنه إن كنا نهتم فقط بدقة «خشنة بما يكفي» (وهي الحالة الغالبة في معظم الأحيان)، فإن اختيار النموذج، سواء كانت آلات تورينج أو آلات RAM أو برامج NAND-TM/NAND-RAM أو برامج C/Python، لا يهم. وتُعرف هذه بـ_أطروحة_ تورينج-تشرش الموسَّعة (extended Church-Turing Thesis). وبالتحديد سنهتم غالبًا بالفرق بين الزمن متعدد الحدود والزمن الأسّي.
صنفا التعقيد الزمني الرئيسان اللذان سنهتم بهما هما التاليان:
-
الزمن متعدد الحدود: الدالة قابلة للحساب في زمن متعدد الحدود إذا كانت تنتمي إلى الصنف . أي إن إذا وُجدت خوارزمية لحساب تعمل في زمن متعدد الحدود على الأكثر (أي، على الأكثر لثابت ما ) في طول المدخل.
-
الزمن الأسّي: الدالة قابلة للحساب في زمن أسّي إذا كانت تنتمي إلى الصنف . أي إن إذا وُجدت خوارزمية لحساب تعمل في زمن أسّي على الأكثر (أي، على الأكثر لثابت ما ) في طول المدخل.
بعبارة أخرى، فالتعريفان هما:
تعريف — و
ليكن . نقول إن إذا وُجد كثير حدود وآلة تورينج بحيث إن لكل , عند إعطائها المدخل تتوقّف آلة تورينج خلال خطوة على الأكثر وتُخرج .
نقول إن إذا وُجد كثير حدود وآلة تورينج بحيث إن لكل ، عند إعطائها المدخل تتوقّف خلال خطوة على الأكثر وتُخرج .
توقّف وتأمّل
من فضلك خذ وقتك للتأكد من فهمك هذين التعريفين. وبخاصة، أحيانًا يظنّ الطلبة أن الصنف يقابل الدوال التي ليست في . لكن الأمر ليس كذلك. فإذا كانت في ، فإنها يمكن حسابها في زمن أسّي. وهذا لا يعني أنها لا يمكن حسابها في زمن متعدد الحدود أيضًا.
تمرين محلول — تعريفات مختلفة لـ
برهن أن كما هو معرَّف في تعريف — P وEXP يساوي
الحل
لإثبات تساوي هاتين المجموعتين نحتاج إلى البرهان على أن وأن . نبدأ بالاحتواء الأول. لنفرض أن . عندئذٍ يوجد كثير حدود ما وآلة تورينج بحيث إن تحسب وتتوقّف عند كل مدخل خلال خطوة على الأكثر. يمكننا كتابة كثير الحدود على الصورة حيث ، ونفترض أن غير صفري (وإلا فإننا نترك بحيث تقابل أكبر عدد يكون عنده غير صفري). و_درجة_ هي العدد . وبما أن ، فإن ومهما كان معامل ، فإن عند كبير بما يكفي، وهذا يعني أن آلة تورينج ستتوقّف عند المدخلات ذات الطول خلال أقل من خطوة، وبالتالي .
أما الاحتواء الثاني، فلنفرض أن . عندئذٍ يوجد موجب بحيث إن ، وهذا يعني وجود آلة تورينج وعدد ما بحيث تحسب الدالة ، ولكل تتوقّف عند المدخلات ذات الطول خلال خطوة على الأكثر. ليكن أقصى عدد خطوات تأخذها عند المدخلات التي طولها على الأكثر. عندئذٍ إذا عرّفنا كثير الحدود ، نرى أن تتوقّف عند كل مدخل خلال خطوة على الأكثر، ومن ثم فإن وجود يُظهر أن .
بما أن الزمن الأسّي أكبر كثيرًا من الزمن متعدد الحدود، فإن . وجميع المسائل التي أدرجناها في الحساب الكفؤ: مقدمة غير رسمية تنتمي إلى ، لكن كما رأينا، فإن بعضها له خوارزميات أفضل بكثير تُظهر أنه ينتمي فعليًا إلى الصنف الأصغر .
| (لكن ليس معروفًا أنه في ) | |
|---|---|
| أقصر مسار | أطول مسار |
| قطع أدنى | قطع أقصى |
| 2SAT | 3SAT |
| معادلات خطّية | معادلات تربيعية |
| مجموع صفري | ناش |
| المُحدِّد | الدائم |
| الأولية | التحليل إلى عوامل |
الجدول : جدول أمثلة من الحساب الكفؤ: مقدمة غير رسمية. كل هذه المسائل تنتمي إلى ، لكن المسائل الموجودة في العمود الأيسر فقط هي المعروفة حاليًا بأنها تنتمي إلى أيضًا (أي أنها تملك خوارزمية بزمن متعدد الحدود). انظر أيضًا الشكل التوضيحي.

ملاحظة — النسخ البوليانية للمسائل
تمثّل كثير من المسائل المعرَّفة في الحساب الكفؤ: مقدمة غير رسمية دوالَ غير بوليانية (دوال خرجها أكثر من بت واحد)، بينما و مجموعتان من الدوال البوليانية. غير أنه لكل دالة غير بوليانية يمكننا دائمًا تعريف دالة بوليانية تكافؤها حسابيًا، وذلك بجعل هي البت رقم في (انظر تمرين — الدوال البوليانية). ومن ثم فإن الجدول أعلاه، وكذلك الشكل التوضيحي، يشيران إلى النسخ البوليانية المتكافئة حسابيًا لهذه المسائل.
نمذجة زمن التنفيذ باستعمال آلات RAM / NAND-RAM
آلات تورينج نموذجٌ نظري أنيق للحساب، لكنه لا يقابل عن قرب معماريات الحوسبة في العالم الحقيقي. ولا يهمّ الفرق بين آلات تورينج والحاسوب الفعلي كثيرًا عندما نبحث في مسألة أيّ الدوال قابلة للحساب، لكنه قد يُحدث فرقًا في سياق الكفاءة. فحتى عنصر أساسي في مقرّرات الخوارزميات في البكالوريوس مثل «الترتيب بالدمج» (merge sort) لا يمكن تنفيذه على آلة تورينج في زمن (انظر ملاحظات مرجعية). وتُطابق آلات RAM (أو بما يكافئها برامج NAND-RAM) معمارية الحوسبة الفعلية أكثر، كما تطابق ما نعنيه حين نقول خوارزميات أو في مقرّرات الخوارزميات أو في مقابلات الترميز على السبورة. ويمكننا تعريف زمن التنفيذ بالنسبة لبرامج NAND-RAM كما فعلنا مع آلات تورينج.
تعريف — زمن التنفيذ (RAM)
ليكن دالة ما تربط الأعداد الطبيعية بالأعداد الطبيعية. نقول إن الدالة قابلة للحساب في زمن RAM مقداره (وباختصار: زمن RAM) إذا وُجد برنامج NAND-RAM بحيث إن لكل كبير بما يكفي ولكل ، عند إعطائه المدخل يتوقّف البرنامج بعد تنفيذ سطرًا على الأكثر ويُخرج .
نعرّف بأنه مجموعة الدوال البوليانية (الدوال التي تربط بـ ) القابلة للحساب في زمن RAM مقداره .
لأن برامج NAND-RAM تقابل تصوراتنا الطبيعية لزمن التنفيذ أكثر، سنستعمل NAND-RAM بوصفه نموذجنا «الافتراضي» لزمن التنفيذ، ومن ثم نستعمل (دون أي رمز سفلي) للإشارة إلى . غير أنه يتبيّن أنه ما دمنا نهتم فقط بالفرق بين الزمن الأسّي والزمن متعدد الحدود، فإن هذا لا يُحدث فرقًا يُذكر. والسبب في ذلك أن آلات تورينج تستطيع محاكاة برامج NAND-RAM بحمولة إضافية (overhead) متعددة الحدود على الأكثر (انظر أيضًا الشكل التوضيحي):
مبرهنة — الربط بين RAM وآلات تورينج
ليكن دالة بحيث إن لكل ، وإن كانت الخريطة قابلة للحساب بواسطة آلة تورينج في زمن . عندئذٍ
توقّف وتأمّل
التفاصيل الفنية لـ مبرهنة — الربط بين RAM وآلات تورينج، مثل الشرط بأن تكون قابلة للحساب في زمن أو الثابتين و في المعادلة (وهما ليسا مضبوطين ويمكن تحسينهما)، ليست مهمّة جدًا. وبخاصة، فإن كل دوال حدود الزمن غير الشاذّة التي نلتقي بها عمليًا، مثل ، ، وغيرها، تحقّق شروط مبرهنة — الربط بين RAM وآلات تورينج، انظر أيضًا ملاحظة — حدود الزمن الجيدة.
والرسالة الرئيسة لهذه النظرية هي أن آلات تورينج وآلات RAM «متكافئتان بشكل تقريبي» بالمعنى أن إحداهما تستطيع محاكاة الأخرى بحمولة متعددة الحدود. وكذلك، فرغم أن البرهان يتضمّن بعض التفاصيل الفنية، فهو ليس عميقًا ولا صعبًا، وإنما يتبع ببساطة محاكاة آلات RAM بآلات تورينج التي رأيناها في مبرهنة — آلات تورينج (أي برامج NAND-TM) وآلات RAM (أي برامج NAND-RAM) متكافئة مع «محاسبة» أدقّ.

على سبيل المثال، بتطبيق مبرهنة — الربط بين RAM وآلات تورينج مع ، وباستعمال الحقيقة ، نرى أن ، وهذا يعني (بحسب تمرين محلول — تعريفات مختلفة لـP) بمعنى آخر، كان بإمكاننا أن نعرّف بالمثل بوصفه صنف الدوال القابلة للحساب بواسطة برامج NAND-RAM (بدلاً من آلات تورينج) التي تعمل في زمن متعدد الحدود في طول المدخل. وبالمثل، بتطبيق مبرهنة — الربط بين RAM وآلات تورينج مع ، نرى أن الصنف يمكن أيضًا تعريفه بأنه مجموعة الدوال القابلة للحساب بواسطة برامج NAND-RAM في زمن على الأكثر، حيث كثير حدود ما. وتُعرف نتائج تكافؤ مشابهة للعديد من النماذج، بما فيها الآلات الخلوية وبرامج C/Python/Javascript والحواسيب المتوازية والكثير من النماذج الأخرى، وهو ما يبرّر اختيار لأنه يعبّر عن مفهوم لقابلية المعالجة (tractability) مستقل عن التقنية. (انظر #ECTTsec لمزيد من النقاش حول هذه المسألة.) يسمح هذا التكافؤ بين آلات تورينج وبين NAND-RAM (وكذلك سائر النماذج) بأن نختار النموذج الذي نفضّله بحسب المهمة المعروضة (أي «كُلُّ الكعكة وتأكلها أيضًا») حتى حين ندرس أسئلة الكفاءة، ما دمنا نهتم فقط بالفجوة بين الزمن متعدد الحدود والزمن الأسّي. وحين نرغب في تصميم خوارزمية، يمكننا استعمال القوة والراحة الإضافيين اللذين يوفّرهما NAND-RAM. وحين نرغب في تحليل برنامج أو إثبات نتيجة سالبة، يمكننا قصر انتباهنا على آلات تورينج.
كل النماذج الحسابية «المعقولة» متكافئة إن كنا نهتم فقط بالتمييز بين الزمن متعدد الحدود والزمن الأسّي.
تشير الصفة «المعقولة» أعلاه إلى كل النماذج الحسابية القابلة للتوسّع التي جرى تنفيذها عمليًا، مع الاستثناء المحتمل لـ_الحاسوب الكمّي_ (quantum computers)، انظر #ECTTsec والحساب الكمّي.
ليس من الصعب إثبات الاتجاه ، إذ يستطيع برنامج NAND-RAM محاكاة آلة تورينج بحمولة ثابتة عبر تخزين جدول انتقال في مصفوفة (كما هو حال في برهان مبرهنة — آلة تورينج الشاملة). ويمكن محاكاة كل خطوة من خطوات آلة تورينج بعدد ثابت من خطوات RAM، ويمكن البرهان على أن هذا الثابت أصغر من . وعليه فإن جوهر النظرية هو إثبات أن . ويتبع هذا البرهان عن قرب برهان مبرهنة — آلات تورينج (أي برامج NAND-TM) وآلات RAM (أي برامج NAND-RAM) متكافئة، الذي بيّنا فيه أن كل دالة قابلة للحساب ببرنامج NAND-RAM فهي قابلة للحساب بآلة تورينج (أو بما يكافئها برنامج NAND-TM). ولإثبات مبرهنة — الربط بين RAM وآلات تورينج، نتبع البرهان نفسه بالضبط، لكننا نتحقق فقط من أن حمولة محاكاة بواسطة متعددة الحدود. البرهان يحوي تفاصيل كثيرة، لكنه ليس عميقًا. ومن ثم فإن فهمك صِياغة هذه النظرية أهم بكثير من فهم برهانها.
برهان
لا نركّز إلا على الاتجاه غير البديهي . ليكن . يمكن حساب في زمن ببرنامج NAND-RAM ما ، ونحتاج إلى البرهان على أنها يمكن حسابها أيضًا في زمن بآلة تورينج . وسيتبع ذلك من البرهان على أن يمكن حسابها في زمن ببرنامج NAND-TM، إذ إن لكل برنامج NAND-TM توجد آلة تورينج تحاكيه بحيث تقابل كل دورة من دورات خطوة واحدة من خطوات .
كما ذُكر أعلاه، نتبع برهان مبرهنة — آلات تورينج (أي برامج NAND-TM) وآلات RAM (أي برامج NAND-RAM) متكافئة (محاكاة برامج NAND-RAM ببرامج NAND-TM) ونستعمل المحاكاة نفسها بالضبط، لكن مع محاسبة أدقّ لعدد الخطوات التي تكلّفتها المحاكاة. تذكّر أن محاكاة NAND-RAM تعمل بأن «نقشّر» مزايا NAND-RAM واحدةً واحدة، حتى يبقى لدينا NAND-TM.
لن نقدّم التفاصيل الكاملة، لكن سنعرض الأفكار الرئيسة المستعملة في البرهان على أن كل ميزة من مزايا NAND-RAM يمكن محاكاتها بـ NAND-TM بحمولة متعددة الحدود على الأكثر:
-
تذكّر أن كل متغيّر أو عنصر من عناصر مصفوفة في NAND-RAM يمكن أن يحوي عددًا صحيحًا بين و، حيث هو عدد الأسطر التي نُفِّذت حتى الآن. لذلك، إذا كان برنامج NAND-RAM يحسب في زمن ، فإن كل الأعداد الصحيحة التي يستعملها على المدخلات ذات الطول هي من رتبة على الأكثر. وهذا يعني أن أكبر قيمة يمكن أن يبلغها
iهي على الأكثر، ومن ثم يمكن التفكير في كل متغيّر من متغيّرات بوصفه مصفوفة من فهرسًا على الأكثر، يحمل كل منها عددًا طبيعيًا من رتبة على الأكثر. ولنضع عدد البتات اللازمة لترميز هذه الأعداد. (ويمكننا بدء المحاكاة بحساب و.) -
يمكننا ترميز مصفوفة NAND-RAM طولها تحوي أعدادًا في بوصفها مصفوفة بوليانية (أي، NAND-TM) من بت، ويمكننا أيضًا التفكير فيها بوصفها مصفوفة ثنائية البعد كما فعلنا في برهان مبرهنة — آلات تورينج (أي برامج NAND-TM) وآلات RAM (أي برامج NAND-RAM) متكافئة. ونرمّز عددًا منفردًا (scalar) في NAND-RAM يحوي عددًا في ببساطة بمصفوفة NAND-TM أقصر من بت.
-
يمكننا محاكاة المصفوفات ثنائية البعد باستعمال مصفوفات أحادية البعد طولها . وتستعمل كل العمليات الحسابية على الأعداد الصحيحة خوارزميات المدرسة الابتدائية، التي تأخذ زمنًا متعدد الحدود في عدد البتات للأعداد الصحيحة، وهو في حالتنا. ومن ثم يمكننا محاكاة خطوة من NAND-RAM بخطوة من نموذج يستعمل الذاكرة العشوائية لكن بمصفوفات أحادية البعد ذات قيم بوليانية فقط.
-
أغلى خطوة هي الانتقال من الذاكرة العشوائية إلى نموذج الذاكرة المتسلسلة الخاص بـ NAND-TM/آلات تورينج. وكما فعلنا في برهان مبرهنة — آلات تورينج (أي برامج NAND-TM) وآلات RAM (أي برامج NAND-RAM) متكافئة (انظر التفاصيل القبيحة (اختياري))، يمكننا محاكاة الوصول إلى مصفوفة
Fooعند موقع مُرمَّز في مصفوفةBarبما يلي:a. نسخ
Barإلى مصفوفة مؤقتةTempb. وجود مصفوفةIndexتكون في البداية أصفارًا كلها باستثناء في الموقع الأول. c. تكرار ما يلي حتى تُرمِّزTempالعدد : (عدد التكرارات هو على الأكثر.)- إنقاص العدد المُرمَّز في temp بمقدار . (يستغرق عددًا من الخطوات متعدد الحدود في .)
- إنقاص
iحتى يساوي . (يستغرق خطوة.) - مسح
Indexحتى نصل إلى النقطة التي يساوي فيها ، ثم تغيير هذا إلى ، ثم التقدّم خطوة واحدة وكتابة في هذا الموقع. (يستغرق خطوة.) d. عند الانتهاء نعلم أنه إذا مسحناIndexحتى نصل إلى النقطة التي يكون فيهاIndex[i]، فإنiيحوي القيمة التي رمّزهاBar(يستغرق خطوة.)
التكلفة الكلية لكل عملية من هذا النوع هي خطوة.
باختصار، نحاكي خطوة واحدة من NAND-RAM باستعمال خطوة من NAND-TM، ومن ثم فإن زمن المحاكاة الكلي هو ، وهو أصغر من عند كبير بما يكفي.
ملاحظة — حدود الزمن الجيدة
عند النظر في حدود الزمن العامة، علينا الحرص على استبعاد بعض الحالات «الشاذّة»، مثل دوال التي لا تمنح الخوارزمية وقتًا كافيًا لقراءة المدخل، أو دوال يكون فيها حدّ الزمن نفسه غير قابل للحساب. ونقول إن الدالة هي دالة حدّ زمني جيدة (nice time bound function) (أو «دالة جيدة» اختصارًا) إذا كان لكل لدينا (أي أن يتيح وقتًا كافيًا لقراءة المدخل)، ولكل لدينا (أي أن يتيح وقتًا أكبر على المدخلات الأطول)، وإن كانت الخريطة (أي تحويل سلسلة طولها إلى متتالية من واحدًا) قابلة للحساب ببرنامج NAND-RAM في زمن .
كل حدود التعقيد الزمني «الطبيعية» التي نلتقي بها في التطبيقات، مثل ، ، وغيرها، هي «جيدة». ولذلك فمن الآن فصاعدًا لن نقرأ إلا عن الصنف حين تكون دالة «جيدة». وبخاصة فإن شرط قابلية الحساب مغطّى عادةً بسهولة. فمثلًا، بالنسبة للدوال الحسابية مثل ، يمكننا عادةً حساب التمثيل الثنائي لـ في زمن متعدد الحدود في عدد البتات الخاصة بـ ، وبالتالي لوغاريتمي متعدد الحدود في . ولذلك فإن زمن كتابة السلسلة في هذه الحالات سيكون .
أطروحة تورينج-تشرش الموسَّعة (نقاش)
يُظهر مبرهنة — الربط بين RAM وآلات تورينج أن النماذج الحسابية لـ_آلات تورينج_ و_آلات RAM / برامج NAND-RAM_ متكافئة حتى عوامل متعددة الحدود في زمن التنفيذ. ومن أمثلة النماذج المتكافئة متعددة الحدود:
-
جميع لغات البرمجة القياسية، بما فيها C/Python/JavaScript/Lisp/وما شابه.
-
حساب (انظر أيضًا ملاحظات مرجعية).
-
الآلات الخلوية
-
الحواسيب المتوازية
-
أجهزة الحوسبة البيولوجية مثل الحواسيب المعتمدة على الـ DNA.
تقول أطروحة تورينج-تشرش الموسَّعة إن هذا صحيح لكل النماذج الحسابية القابلة للتنفيذ فيزيائيًا. بعبارة أخرى، تقول أطروحة تورينج-تشرش الموسَّعة إن لكل جهاز حوسبة قابل للتوسّع (له وصف منتهٍ لكنه يمكن من حيث المبدأ استعماله لتشغيل عمليات حسابية على مدخلات كبيرة بلا حدّ) يوجد ثابت ما بحيث لكل دالة يستطيع حسابها على مدخلات طولها باستعمال كمية من الموارد الفيزيائية، تكون في . وهذا هو تشديد لـ«أطروحة تورينج-تشرش» (البسيطة) التي ناقشناها في أطروحة Church-Turing (مناقشة)، والتي تقول إن مجموعة الدوال القابلة للحساب هي نفسها لكل النماذج القابلة للتنفيذ فيزيائيًا، لكن دون أن تشترط أن تكون حمولة المحاكاة بين النماذج المختلفة متعددة الحدود على الأكثر.
كل الإنشاءات الحالية للنماذج الحسابية القابلة للتوسّع ولغات البرمجة تطابق أطروحة تورينج-تشرش الموسَّعة، بالمعنى أنها يمكن محاكاتها بحمولة متعددة الحدود بواسطة آلات تورينج (وبالتالي أيضًا ببرامج NAND-TM أو NAND-RAM). وعليه فإن الصنفين و صامدان أمام تغيير النموذج، ويمكننا استعمال لغة البرمجة التي نختارها، أو وصف عالي المستوى لخوارزمية، لتحديد ما إذا كانت مسألة ما في أم لا.
كما أن أطروحة تورينج-تشرش نفسها، فإن أطروحة تورينج-تشرش الموسَّعة تقع في السياق المقارب ولا تعطي مباشرةً تنبؤًا قابلًا للاختبار التجريبي. غير أنها يمكن تخصيصها بحدود أدقّ للحمولة، مما يعطي تنبؤات قابلة للاختبار التجريبي مثل أطروحة تورينج-تشرش الفيزيائية الموسَّعة التي ذكرناها في أطروحة كيرش-تورينغ الفيزيائية الموسّعة (نقاش).
خلال قرن وأكثر من دراسة الحوسبة وتبليطها، لم يبنِ أحد حتى الآن جهاز حوسبة قابل للتوسّع يخالف أطروحة تورينج-تشرش الموسَّعة. غير أن الحوسبة الكمّية (quantum computing)، إن تحقّقت، ستشكّل تحديًا جادًّا لأطروحة تورينج-تشرش الموسَّعة (انظر الحساب الكمّي). غير أنه، حتى لو تحقّقت وعود الحوسبة الكمّية تحقّقًا كاملًا، فإن أطروحة تورينج-تشرش الموسَّعة صحيحة «أخلاقيًّا»، بالمعنى أننا بحاجة فعلًا إلى تكييف الأطروحة لتأخذ في الحسبان إمكانية الحوسبة الكمّية، لكن مخطّطها العام يبقى دون تغيير. ما زلنا قادرين على نمذجة الحوسبة رياضيًا، وما زلنا نستطيع معاملة البرامج بوصفها سلاسل ووجود برنامج شامل، وما زالت لدينا نتائج التسلسل الزمني وغياب قابلية الحساب، ولا يوجد حتى الآن أي سبب للشك في أطروحة تورينج-تشرش (البسيطة). وعلاوة على ذلك، لا يبدو أن احتمال الحوسبة الكمّية يُحدث فرقًا في التعقيد الزمني لكثير من المسائل الملموسة التي نهتم بها (لكنها ليست كلّها!). وبخاصة، حتى الآن، من بين كل مسائل الأمثلة المذكورة في الحساب الكفؤ: مقدمة غير رسمية، ليس سوى مسألة واحدة فقط — تحليل الأعداد الصحيحة إلى عوامل (integer factoring) — يتأثر تعقيدها بتعديل نموذجنا ليشمل الحواسيب الكمّية أيضًا.
الآلة الشاملة الفعّالة: مفسِّر NAND-RAM مكتوب بـ NAND-RAM
رأينا في مبرهنة — آلة تورينج الشاملة «آلة تورينج الشاملة». وبمدارسة ذلك البرهان، ودمجه مع مبرهنة — الربط بين RAM وآلات تورينج، نرى أن البرنامج له حمولة متعددة الحدود، بمعنى أنه يستطيع محاكاة خطوة من برنامج NAND-TM (أو NAND-RAM) معيّن على مدخل في خطوة. لكن في الواقع، وبمحاكاة برامج NAND-RAM مباشرةً، يمكننا فعل ما هو أفضل بحمولة ضربية ثابتة فقط. بمعنى آخر، يوجد برنامج NAND-RAM شامل بحيث لكل برنامج NAND-RAM ، يحاكي مقدار خطوة من باستعمال خطوة فقط. (والثابت الضمني في ترميز قد يعتمد على البرنامج لكنه لا يعتمد على طول المدخل.)
مبرهنة — شمولية NAND-RAM الفعّالة
يوجد برنامج NAND-RAM يحقّق ما يلي:
-
( برنامج NAND-RAM شامل.) لكل برنامج NAND-RAM ومدخل ، لدينا ، حيث نرمّز بـ خرجَ على سلسلة ترمّز الزوج .
-
( فعّال.) يوجد ثابتان ما بحيث لكل برنامج NAND-RAM ، إذا توقّف عند المدخل بعد خطوة على الأكثر، فإن يتوقّف بعد خطوة على الأكثر، حيث .
توقّف وتأمّل
كما في حالة مبرهنة — الربط بين RAM وآلات تورينج، فإن برهان مبرهنة — شمولية NAND-RAM الفعّالة ليس عميقًا جدًا، ومن ثم فإن فهم صِياغته أهم. وبالتحديد، إن كنتَ تفهم كيف تشرع في كتابة مفسِّر لـ NAND-RAM باستعمال لغة برمجة حديثة مثل Python، فإنك تعرف كل ما تحتاج معرفته عن برهان هذه النظرية.

برهان
لكي نعرض برنامج NAND-RAM شاملًا بتفصيله الكامل، سنحتاج إلى وصف مخطّط تمثيل دقيق، وكذلك إلى كامل تعليمات NAND-RAM الخاصة بالبرنامج. ولأن ذلك ممكن، فإن الأهم هو التركيز على الأفكار الرئيسة، ولذلك نكتفي هنا بعرض مخطّط للبرهان. مواصفات NAND-RAM معطاة في الملحق، ولأغراض هذه المحاكاة يمكننا ببساطة استعمال تمثيل شيفرة NAND-RAM بوصفه سلسلة ASCII.
يحصل البرنامج كمدخلَين على برنامج NAND-RAM ومدخل ، ثم يحاكي خطوة في كل مرة. ولإتمام ذلك، يفعل ما يلي:
-
يحتفظ بالمتغيّرَين
program_counterوnumber_stepsالخاصَّين بالسطر الحالي المراد تنفيذه وبعدد الخطوات التي نُفِّذت حتى الآن. -
يمسح في البداية شيفرة ليجد العدد من أسماء المتغيّرات المتمايزة التي يستعملها . وسيحوّل كل اسم متغيّر إلى عدد بين و، ويستعمل مصفوفة
Programلتخزين شيفرة ، بحيث لكل سطر تُخزِّنProgram[]السطر رقم من وقد حُوِّلت فيه أسماء المتغيّرات إلى أعداد. (وبشكل أكثر تحديدًا، سنستعمل عددًا ثابتًا من المصفوفات لترميز العملية المستعملة في هذا السطر، وأسماء المتغيّرات وفهارس المعاملات، كلٌّ على حدة.) -
يحتفظ بمصفوفة واحدة
Varsتحوي كل قيم متغيّرات . ونقسّمVarsإلى كتل طولها . فإذا كان عددًا يقابل متغيّر مصفوفةFooمن متغيّرات ، خزّنّاFoo[0]فيVars[]، وخزّنّاFoo[1]فيVar_values[], وFoo[2]فيVars[]وهكذا (انظر الشكل التوضيحي). وبوجه عام، إذا كان المتغيّر رقم من متغيّرات متغيّرًا منفردًا (scalar) فإن قيمته ستُخزَّن في الموقعVars[]. وإذا كان متغيّر مصفوفة فإن قيمة عنصره رقم ستُخزَّن في الموقعVars[]. -
لمحاكاة خطوة واحدة من ، يسترجع البرنامج من
Programالسطر المقابل لـprogram_counterوينفّذه. وبما أن NAND-RAM تملك عددًا ثابتًا من العمليات الحسابية، يمكننا تنفيذ منطق تحديد أيّ عملية نُنفّذ باستعمال متتالية من عدد ثابت من جمل if-then-else. أمّا استرجاع قيم معاملات كل تعليمة منVarsفيمكن فعله باستعمال عدد ثابت من العمليات الحسابية.
مراحل الإعداد تستغرق عددًا ثابتًا فقط من الخطوات (يعتمد على لكنه لا يعتمد على المدخل ).
وبعد الانتهاء من الإعداد، لا نحتاج لمحاكاة خطوة واحدة من سوى استرجاع السطر المقابل، وتنفيذ عدد ثابت من «جمل if else»، ومحاولات وصول إلى Vars لمحاكاته.
ولذلك فإن زمن التنفيذ الكلي لمحاكاة خطوة من البرنامج هو على الأكثر عند إهمال الثوابت التي تعتمد على البرنامج .
الآلة الشاملة الموقوتة
ومن نتائج فعّالة الآلة الشاملة ما يلي. بمعطى أي آلة تورينج ومدخل و«ميزانية خطوات» ، يمكننا محاكاة تنفيذ لمدة خطوة في زمن متعدد الحدود في . وبشكل رسمي، نعرّف دالة التي تأخذ المعاملات الثلاثة و وميزانية الزمن، وتُخرج إذا توقّفت خلال خطوة على الأكثر، وتُخرج بغير ذلك. تحسب الآلة الشاملة الموقوتة في زمن متعدد الحدود (انظر الشكل التوضيحي). (وبما أننا نقيس الزمن كدالة في طول المدخل، فإننا نعرّف على أنها تأخذ المدخل ممثَّلًا بالأس (unary): سلسلة من واحدًا.)
مبرهنة — آلة تورينج الشاملة الموقوتة
ليكن الدالة المعرَّفة كما يلي عندئذٍ .

برهان
نكتفي بعرض مخطّط للبرهان لأن النتيجة تتبع إلى حد كبير مباشرةً من مبرهنة — الربط بين RAM وآلات تورينج ومبرهنة — شمولية NAND-RAM الفعّالة. فبحسب مبرهنة — الربط بين RAM وآلات تورينج، لإثبات أن يكفي أن نعطي برنامج NAND-RAM بزمن متعدد الحدود يحسب .
يمكن الحصول على مثل هذا البرنامج كما يلي. بمعطى آلة تورينج ، يمكننا بحسب مبرهنة — الربط بين RAM وآلات تورينج تحويلها في زمن متعدد الحدود في وصفها إلى برنامج NAND-RAM مكافئ لها وظيفيًا، بحيث يمكن محاكاة تنفيذ لمدة خطوة بتنفيذ لمدة خطوة. يمكننا عندئذٍ تشغيل الآلة الشاملة NAND-RAM في مبرهنة — شمولية NAND-RAM الفعّالة لمحاكاة لمدة خطوة باستعمال زمن ، وإخراج إذا لم يتوقّف التنفيذ ضمن هذه الميزانية. وهذا يُظهر أن يمكن حسابها ببرنامج NAND-RAM في زمن متعدد الحدود في وخطّي في ، أي إن .
نظرية التسلسل الزمني
بعض الدوال غير قابلة للحساب، لكن هل هناك دوال يمكن حسابها، لكن بتكلفة باهظة فقط؟ على سبيل المثال، هل هناك دالة يمكن حسابها في زمن ، لكن لا يمكن حسابها في زمن ؟ يتبيّن أن الجواب نعم:
مبرهنة — نظرية التسلسل الزمني
لكل دالة جيدة ، توجد دالة في .
لا شيء خاص بـ ، ويمكننا أن نكون قد استعملنا أي دالة أخرى قابلة للحساب بكفاءة وتتجه إلى اللانهاية مع .
إن كان لدينا وقت أكثر، يمكننا حساب دوال أكثر.
ملاحظة — نتيجة تبعية أبسط لنظرية التسلسل الزمني
إن عموم نظرية التسلسل الزمني قد يجعل برهانها أصعب قليلًا في القراءة. قد يكون اتباع البرهان أسهل إن حاولت أولًا أن تثبت بنفسك العبارة الأسهل .
يمكنك فعل ذلك بالبرهان على أن الدالة التالية تنتمي إلى : لكل آلة تورينج ومدخل ، لدينا إذا وإذا فقط توقّفت عند خلال خطوة على الأكثر. يمكن البرهان على أن باستعمال آلة تورينج الشاملة (أو برنامج NAND-RAM الشامل الفعّال في مبرهنة — شمولية NAND-RAM الفعّالة). ومن جهة أخرى، يمكننا استعمال أفكار مشابهة لتلك المستعملة لإثبات غياب قابلية حساب في برهان مباشر لعدم قابلية حساب HALT (اختياري) لإثبات أن .

في برهان مبرهنة — عدم قابلية حساب دالة التوقّف (غياب قابلية حساب مسألة التوقّف)، بيّنا أن الدالة لا يمكن حسابها في أي زمن منتهٍ. وتدقيق البرهان يُظهر أنه يعطي شيئًا أقوى. أي أن البرهان يُظهر أن إن ضبّطنا ميزانيتنا الحسابية على خطوة، فلا نستطيع ليس فقط التمييز بين البرامج التي تتوقّف وتلك التي لا تتوقّف، بل لا نستطيع حتى التمييز بين البرامج التي تتوقّف خلال خطوة على الأكثر وتلك التي تحتاج أكثر من ذلك (حيث عدد يعتمد على ). لذلك يتبع برهان مبرهنة — نظرية التسلسل الزمني أفكار غياب قابلية حساب مسألة التوقّف، لكن مع محاسبة أدقّ أيضًا لزمن التنفيذ.
برهان
برهاننا مستوحى من برهان غياب قابلية حساب مسألة التوقّف. وبالتحديد، لكل دالة كما في صِياغة النظرية، نعرّف دالة التوقّف المحدود (Bounded Halting) كما يلي. مدخلُ هو زوج بحيث و يرمّز برنامج NAND-RAM ما. نعرّف
(الثابت والدالة اعتباطيّان إلى حد كبير، وقد اختيرا للملاءمة في هذا البرهان.)
مبرهنة — نظرية التسلسل الزمني نتيجة مباشرة للمُدّعَين التاليين:
المُدّع 1:
و
المُدّع 2: .
من فضلك تأكّد أنك تفهم أن النظرية تتبع بالفعل مباشرةً من دمج هذين المُدّعَين. والآن ننتقل إلى إثباتهما.
برهان المُدّع 1: يمكننا بسهولة التحقق في زمن خطّي مما إذا كان مدخل ما على الصورة حيث . وبما أن دالة جيدة، يمكننا تقييمها في زمن . وعليه يمكننا حساب كما يلي:
-
احسب في خطوة.
-
نستعمل برنامج NAND-RAM الشامل في مبرهنة — شمولية NAND-RAM الفعّالة لمحاكاة خطوة من على المدخل باستعمال خطوة على الأكثر. (تذكّر أننا نستعمل للإشارة إلى كمية محدودة بـ لثابتين ما .)
-
إذا توقّفت خلال خطوات هذه فإخراج ، وإلا فإخراج .
طول المدخل هو . وبما أن و لكل ، فإن زمن التنفيذ سيكون ، ومن ثم تُظهر الخوارزمية أعلاه أن ، وهو ما يُكمل برهان المُدّع 1.
برهان المُدّع 2: هذا البرهان هو جوهر مبرهنة — نظرية التسلسل الزمني، وهو يشبه عن قرب البرهان البراهني على أن غير قابل للحساب. لنفرض، طلبًا للتناقض، وجود برنامج NAND-RAM ما يحسب خلال خطوة. سنُظهر التناقض بأن ننشئ برنامجًا ، ونبيّن أن بافتراضنا، إذا عمل أقل من خطوة عند إعطائه (نسخة مكمَّلة من) شيفرته الخاصة كمدخل، فإنه في الواقع يعمل أكثر من خطوة، والعكس صحيح. (ومن المفيد إعادة قراءة الجملة الأخيرة مرتين أو ثلاثًا لتتأكد من فهمك هذه المنطقية. فهي تشبه إلى حد كبير البرهان المباشر على غياب قابلية حساب مسألة التوقّف، حيث حصلنا على تناقض باستعمال «حَلّالة توقّف» (halting solver) مفترضة لبناء برنامج، يُعطى شيفرته الخاصة كمدخل، يتوقّف إذا وإذا فقط ما لم يتوقّف.)
سنعرّف بأنه البرنامج الذي عند مدخل سلسلة يفعل ما يلي:
-
إذا لم يكن لـ الصورة حيث يمثّل برنامج NAND-RAM و، فاعُد . (تذكّر أن تشير إلى السلسلة المكوّنة من واحدًا.)
-
احسب (بتكلفة خطوة على الأكثر، بافتراضنا).
-
إذا كان فإن يدخل في حلقة لا نهائية، وإلا فإنها تتوقّف.
لتكن طول وصف كسلسلة، وليكن أكبر من . سنصل إلى تناقض بتقسيم الحالة إلى ما إذا كان يساوي أم .
من جهة، إذا كان ، فإن بافتراضنا أن يحسب ، تدخل في حلقة لا نهائية عند المدخل ، ومن ثم بالذات فإن لا تتوقّف خلال خطوة عند المدخل . لكن هذا يناقض افتراضنا بأن .
وهذا يعني أنه لا بد من أن يكون . لكن في هذه الحالة، وبما أننا نفترض أن يحسب ، فإن لا تفعل شيئًا في الطور 3 من حسابها، ومن ثم فإن تكاليف الحساب تنشأ كلها في الطورين 1 و2. وليس صعبًا التحقق من أن الطور 1 يمكن إنجازه في أقل من خطوة، أي في زمن خطّي بل أقل. أما الطور 2 فيتضمّن تنفيذ ، الذي يفرض بافتراضنا خطوة. وبالمجموع يمكننا تنفيذ الطورين في أقل من خطوة، وهو ما يعني بحكم التعريف أن ، وهذا بالطبع تناقض. ويُكمل هذا برهان المُدّع 2 وبالتالي برهان مبرهنة — نظرية التسلسل الزمني.
تمرين محلول — مقابل
برهن أن .
الحل
تتبع هذه العبارة مباشرةً من نظرية التسلسل الزمني، لكن إثباتها مباشرةً قد يكون تمرينًا مفيدًا، انظر ملاحظة — نتيجة تبعية أبسط لنظرية التسلسل الزمني. نحتاج إلى البرهان على وجود . لتكن و. كلتاهما دالتان جيدتان. وبما أن ، فإن مبرهنة — نظرية التسلسل الزمني تقضي بوجود ما في . وبما أن عند كبير بما يكفي، فإن . ومن جهة أخرى، . بالفعل، لنفرض العكس: لو كان هناك ثابت وآلة تورينج تحسب على المدخلات ذات الطول في خطوة على الأكثر لكل كبير بما يكفي، فبما أن عند كبير بما يكفي، كان ينتج عن ذلك أن ، وهذا يناقض اختيارنا لـ .
تخبرنا نظرية التسلسل الزمني بأن هناك دوال نستطيع حسابها في زمن لكن ليس في ، وفي زمن لكن ليس في ، إلخ. وبخاصة، هناك قطعًا دوال نستطيع حسابها في زمن لكن ليس في . لقد رأينا أننا لا نفتقر إلى دوال طبيعية يكون فيها أفضل خوارزمية معروفة تحتاج تقريبًا زمن ، وأن كثيرًا من الناس قد استثمروا جهدًا كبيرًا في محاولة تحسين ذلك. غير أنه، على خلاف الحالة المنتهية مقابل اللانهائية، فإننا لا نعرف حاليًا كيف نستبعد حتى خوارزمية بزمن لكل الأمثلة أعلاه. لكننا سنرى أن هناك تخمّنًا واحدًا غير مُثبَت كان سيستنتج مثل هذه النتيجة لمعظم هذه المسائل.

تعتمد نظرية التسلسل الزمني على وجود برنامج NAND-RAM شامل فعّال، كما هو مُثبَت في مبرهنة — شمولية NAND-RAM الفعّالة. وللنماذج الأخرى مثل آلات تورينج لدينا نتائج تسلسل زمني مشابهة تُظهر أن هناك دوال قابلة للحساب في زمن وغير قابلة للحساب في زمن ، حيث يقابل الحمولة في الآلة الشاملة المقابلة.
الحساب غير المنتظم
لقد رأينا الآن مقياسين لـ«تكلفة الحساب» للدوال. في الصنف SIZEn,m(s) عرّفنا تعقيد حساب الدوال المنتهية باستعمال الدوائر / برامج الأسطر المستقيمة. وبالتحديد، لدالة منتهية وعدد ، لدينا إذا وُجدت دائرة من بوابة NAND على الأكثر (أو بما يكافئها برنامج NAND-CIRC من سطرًا) تحسب . ولربط هذا بصنفَي المعرَّفين في هذا الفصل، نحتاج أولًا إلى توسيع الصنف من الدوال المنتهية إلى الدوال ذات طول مدخل غير محدود.
تعريف — الحساب غير المنتظم
ليكن و حدَّي زمن جيدَين. لكل ، عرّف ليكون تقييدَ على المدخلات ذات الحجم . أي إن هي الدالة التي تربط بـ بحيث لكل لدينا .
نقول إن قابلة للحساب غير المنتظم بحجم على الأكثر، ويُرمَّز لها بـ ، إذا وُجدت متتالية من دوائر NAND بحيث:
-
لكل ، تحسب الدالة
-
لكل كبير بما يكفي، تملك عددًا من البوابات هو على الأكثر.
بعبارة أخرى، إذا وإلا إذا كان لكل لدينا . المقابل غير المنتظم للصنف هو الصنف المعرَّف كما يلي
هناك فرق كبير بين الحساب غير المنتظم وأصناف التعقيد المنتظمة مثل أو . الشرط يعني وجود آلة تورينج واحدة تحسب عند كل المدخلات في زمن متعدد الحدود. أما الشرط فيعني فقط أنه لكل طول مدخل يمكن أن تكون هناك دائرة مختلفة تحسب باستعمال عدد متعدد الحدود من البوابات عند المدخلات ذات هذه الأطوال. وكما سنرى، فإن لا تستلزم بالضرورة أن يكون . غير أن الاتجاه الآخر صحيح:

مبرهنة — الحساب غير المنتظم يحتوي الحساب المنتظم
يوجد بحيث إن لكل جيدة ولكل ،
وبخاصة، يُظهر مبرهنة — الحساب غير المنتظم يحتوي الحساب المنتظم أن لكل لدينا ، ومن ثم .
الفكرة وراء البرهان هي «نشر الحلقة» (unrolling the loop). وبالتحديد، سنستعمل الصيغ اللغوية البرمجية للحساب غير المنتظم والمنتظم، أي NAND-CIRC وNAND-TM. الفرق الرئيس بين الاثنين هو أن NAND-TM لها حلقات. لكن، لكل ثابتة، إن كنّا نعرف أن برنامج NAND-TM يعمل في خطوة على الأكثر، يمكننا استبدال حلقته بأن «ننسخ ونلصق» شيفرته مرة، على غرار ما يمكننا في Python استبدال شيفرة مثل
for i in range(4):
print(i)
بالشيفرة «الخالية من الحلقات»
print(0)
print(1)
print(2)
print(3)
ولتحويل هذه الفكرة إلى برهان فعلي، علينا معالجة صعوبة فنية واحدة، وهي ضمان أن يكون برنامج NAND-TM غافلًا (oblivious) بالمعنى أن قيمة متغيّر الفهرس i في الدورة رقم من الحلقة تعتمد على فقط ولا تعتمد على محتويات المدخل. وسننتقل إلى معالجة ذلك في برامج NAND-TM الغافلة، ثم نُكمل برهان مبرهنة — الحساب غير المنتظم يحتوي الحساب المنتظم.
برامج NAND-TM الغافلة
تعتمد طريقتنا لإثبات مبرهنة — الحساب غير المنتظم يحتوي الحساب المنتظم على «نشر الحلقة». على سبيل المثال، خُذ NAND-TM التالي لحساب دالة على مدخلات من طول اعتباطي:
temp_0 = NAND(X[0],X[0])
Y_nonblank[0] = NAND(X[0],temp_0)
temp_2 = NAND(X[i],Y[0])
temp_3 = NAND(X[i],temp_2)
temp_4 = NAND(Y[0],temp_2)
Y[0] = NAND(temp_3,temp_4)
MODANDJUMP(X_nonblank[i],X_nonblank[i])
بوضع (على سبيل المثال)، يمكننا أن نحاول ترجمة برنامج NAND-TM هذا إلى برنامج NAND-CIRC لحساب بأن «ننسخ ونلصق» الحلقة ثلاث مرات (مع حذف سطر MODANDJMP):
temp_0 = NAND(X[0],X[0])
Y_nonblank[0] = NAND(X[0],temp_0)
temp_2 = NAND(X[i],Y[0])
temp_3 = NAND(X[i],temp_2)
temp_4 = NAND(Y[0],temp_2)
Y[0] = NAND(temp_3,temp_4)
temp_0 = NAND(X[0],X[0])
Y_nonblank[0] = NAND(X[0],temp_0)
temp_2 = NAND(X[i],Y[0])
temp_3 = NAND(X[i],temp_2)
temp_4 = NAND(Y[0],temp_2)
Y[0] = NAND(temp_3,temp_4)
temp_0 = NAND(X[0],X[0])
Y_nonblank[0] = NAND(X[0],temp_0)
temp_2 = NAND(X[i],Y[0])
temp_3 = NAND(X[i],temp_2)
temp_4 = NAND(Y[0],temp_2)
Y[0] = NAND(temp_3,temp_4)
لكن ما سبق ليس برنامج NAND-CIRC صالحًا لأنه يحوي إشارات إلى المتغيّر الخاص i.
ولجعله برنامج NAND-CIRC صالحًا، نستبدل الإشارات إلى i في الدورة الأولى بـ ، والإشارات في الدورة الثانية بـ ، والإشارات في الدورة الثالثة بـ .
(كما ننشئ متغيّرًا اسمه zero ونستعمله في أول مرة يُنشأ فيها أي متغيّر، ونحذف أيضًا الإسنادات إلى المتغيّرات غير المخرَجة التي لا تُستعمل لاحقًا.)
البرنامج الناتج هو برنامج NAND-CIRC قياسي «خالٍ من الحلقات والفهارس» يحسب (انظر أيضًا الشكل التوضيحي):
temp_0 = NAND(X[0],X[0])
one = NAND(X[0],temp_0)
zero = NAND(one,one)
temp_2 = NAND(X[0],zero)
temp_3 = NAND(X[0],temp_2)
temp_4 = NAND(zero,temp_2)
Y[0] = NAND(temp_3,temp_4)
temp_2 = NAND(X[1],Y[0])
temp_3 = NAND(X[1],temp_2)
temp_4 = NAND(Y[0],temp_2)
Y[0] = NAND(temp_3,temp_4)
temp_2 = NAND(X[2],Y[0])
temp_3 = NAND(X[2],temp_2)
temp_4 = NAND(Y[0],temp_2)
Y[0] = NAND(temp_3,temp_4)

كان مفتاح هذا التحويل هو أن في برنامج NAND-TM الأصلي الخاص بـ ، سواء كان المدخل أو أو أي سلسلة أخرى، فإن متغيّر الفهرس i مضمون أن يساوي في الدورة الأولى، و في الدورة الثانية، و في الدورة الثالثة، وهكذا.
المتتالية المحدّدة ليست جوهرية: فالملكية الحاسمة هي أن برنامج NAND-TM الخاص بـ غافل بالمعنى أن قيمة الفهرس i في الدورة رقم تعتمد على فقط ولا تعتمد على اختيار المدخل بعينه.
ولحسن الحظ، من الممكن تحويل كل برنامج NAND-TM إلى برنامج غافل مكافئ وظيفيًا بحمولة تربيعية على الأكثر. (وبالمثل يمكننا تحويل أي آلة تورينج إلى آلة تورينج غافلة مكافئة وظيفيًا، انظر تمرين — آلات تورينج الغافلة.)
مبرهنة — جعل NAND-TM غافلة
لتكن دالة جيدة، وليكن .
عندئذٍ يوجد برنامج NAND-TM يحسب في خطوة ويحقّق ما يلي.
لكل توجد متتالية بحيث لكل ، إذا نُفِّذ عند المدخل فإن المتغيّر i في الدورة رقم يساوي .
بعبارة أخرى، يعني مبرهنة — جعل NAND-TM غافلة أنه إن كنا نستطيع حساب في خطوة، لاستطعنا حسابها في خطوة ببرنامج يكون فيه موضع i في الدورة رقم معتمدًا على وعلى طول المدخل فقط، لا على محتويات المدخل."
وهكذا البرنامج يمكن ترجمته بسهولة إلى برنامج NAND-CIRC من سطرًا بـ«نشر الحلقة».
يمكننا ترجمة أي برنامج NAND-TM إلى برنامج غافل بجعل «يكنّس» مصفوفاته. أي أن الفهرس i في يتحرك دائمًا من الموقع بالكامل إلى الموقع ثم يعود.
يمكننا عندئذٍ محاكاة البرنامج بحمولة على الأكثر: إذا أراد تحريك i إلى اليسار ونحن في كنسة إلى اليمين، فإننا ببساطة ننتظر خطوة على الأكثر حتى نعود إلى الموقع نفسه في أثناء الكنسة إلى اليسار.

برهان
لتكن برنامج NAND-TM يحسب في خطوة. نبني برنامج NAND-TM غافلًا لحساب كما يلي (انظر أيضًا الشكل التوضيحي).
-
عند المدخل ، يحسب القيمة وينشئ مصفوفتَي
AtstartوAtendبحيثAtstart[]وAtstart[]لكل ، وAtend[]وAtend[i]لكل . ويمكننا فعل ذلك لأن دالة جيدة. ولاحظ أن هذا الحساب لا يعتمد على بل على طوله فقط، فهو غافل. -
تمتلك أيضًا مصفوفة خاصة اسمها
Markerمُهيّأة بصفرية. -
يغيّر متغيّر الفهرس في اتجاه حركته إلى اليمين كلما كان
Atstart[i]، وإلى اليسار كلما كانAtend[i]. -
يحاكي البرنامج تنفيذَ . لكن إذا حاولت تعليمة
MODANDJMPفي التحرك إلى اليمين عندما تكون تتحرك إلى اليسار (أو العكس)، فإن تضبطMarker[i]على وتدخل في «وضع انتظار» خاص. وفي هذا الوضع تنتظر حتى المرة التالية التي يكون فيهاMarker[i](في الكنسة التالية)، وعندها تصفّر قيمةMarker[i]وتُكمل المحاكاة. وفي أسوأ الحالات سيستغرق هذا خطوة (إذا اضطرت أن تذهب بالكامل من طرف إلى الطرف الآخر ثم تعود.) -
ونعدّل أيضًا بحيث ينهي الحساب بعد محاكاة خطوة بالضبط من ، بإضافة «خطوات صورية» إذا انتهت مبكرًا.
نرى أن تحاكي تنفيذَ بحمولة خطوة من مقابل كل خطوة واحدة من ، وبذلك يكتمل البرهان.
يعني مبرهنة — جعل NAND-TM غافلة ضمنًا مبرهنة — الحساب غير المنتظم يحتوي الحساب المنتظم. بالفعل، إذا كان برنامج NAND-TM غافلًا من سطرًا يحسب في زمن ،فإنه لكل يمكننا الحصول على برنامج NAND-CIRC من سطرًا بمجرد أخذ نسخة من (مع حذف سطر MODANDJMP الأخير).
في النسخة رقم نستبدل كل الإشارات من الشكل Foo[i] بـ foo_ حيث هي قيمة i في الدورة رقم .
«نشر الحلقة»: تحويل خوارزمي من آلات تورينج إلى دوائر
برهان مبرهنة — الحساب غير المنتظم يحتوي الحساب المنتظم خوارزمي، بمعنى أن البرهان ينتج خوارزمية بزمن متعدد الحدود، تعطى آلة تورينج ومعيارين و، فتُنتج دائرة من بوابة تتفق مع عند كل المدخلات (طالما كانت تعمل أقل من خطوة على هذه المدخلات.) نُدوّن هذه الحقيقة في النظرية التالية، لأنها ستكون مفيدة لنا لاحقًا:

مبرهنة — مُصرِّف من آلة تورينج إلى دائرة
يوجد خوارزمية بحيث لكل آلة تورينج وأعداد ، تعمل في خطوة وتُخرج دائرة NAND ذات مدخلاً و بوابة ومخرج واحد، بحيث
برهان
نكتفي بعرض مخطّط للبرهان، لأنه يتبع بترجمة برهان مبرهنة — الحساب غير المنتظم يحتوي الحساب المنتظم مباشرةً إلى خوارزمية، مع محاكاة آلات تورينج ببرامج NAND-TM (انظر أيضًا الشكل التوضيحي). وبالتحديد، تفعل ما يلي:
-
تحوّل آلة تورينج إلى برنامج NAND-TM مكافئ لها.
-
تحوّل برنامج NAND-TM إلى برنامج غافل مكافئ له تمامًا باتباع برهان مبرهنة — جعل NAND-TM غافلة. ويأخذ البرنامج مقدار خطوة لمحاكاة خطوة من .
-
«انشر الحلقة» في للحصول على برنامج NAND-CIRC من سطرًا (أو بما يكافئه دائرة NAND بـ بوابة) يقابل تنفيذ دورة من .

بـ«نشر الحلقة» يمكننا تحويل خوارزمية تأخذ خطوة لحساب إلى دائرة تستعمل بوابة لحساب تقييد على .
توقّف وتأمّل
إن مراجعة التحويلات الموصوفة في الشكل التوضيحي، وكذلك حل التمرينين التاليين، طريقة ممتازة لزيادة اطمئنانك إلى التعقيد غير المنتظم، وبخاصة إلى وعلاقتها بـ .
تمرين محلول — توصيف بديل لـ
برهن أن لكل ، لدينا إذا وإلا إذا كانت هناك آلة تورينج بزمن متعدد الحدود بحيث لكل تُخرج وصفًا لدائرة ذات مدخلاً تحسب تقييدَ لـ على المدخلات في .
الحل
نبدأ باتجاه «إذا». لنفرض أن هناك آلة تورينج بزمن متعدد الحدود تُخرج عند المدخل دائرة تحسب . عندئذٍ تكون الآلة التالية آلة تورينج بزمن متعدد الحدود تحسب . وعند المدخل تفعل ما يلي:
-
لتكن واحسب .
-
أعِد تقييم عند .
وبما أننا نستطيع تقييم دائرة بوليانية عند مدخل في زمن متعدد الحدود، تعمل في زمن متعدد الحدود وتحسب عند كل مدخل .
أمّا اتجاه «فقط إذا»، فإذا كانت آلة تورينج تحسب في زمن متعدد الحدود، فإن (باستعمال تكافؤ آلات تورينج مع NAND-TM وكذلك مبرهنة — جعل NAND-TM غافلة) يوجد أيضًا برنامج NAND-TM غافل يحسب في زمن لكثير حدود ما . يمكننا الآن تعريف بأنها آلة تورينج تُخرج عند المدخل دائرة NAND الناتجة عن «نشر الحلقة» في لعدد من الدورات. تحسب دائرة NAND الناتجة الدالة وتملك بوابة. ويمكن أيضًا تحويلها إلى دائرة بوليانية بـ بوابة AND/OR/NOT.
تمرين محلول — توصيف بالنصيحة
ليكن . عندئذٍ إذا وإلا إذا وُجد كثير حدود ، وآلة تورينج بزمن متعدد الحدود ، ومتتالية من السلاسل، بحيث لكل :
- \
- لكل ، لدينا .
الحل
نكتفي بعرض مخطّط للبرهان. أمّا اتجاه «فقط إذا»، فإذا كان فيمكننا استعمال وصف الدائرة المقابلة ببساطة بوصفه ، وبرنامج حساب تقييم دائرة عند مدخلها في زمن متعدد الحدود بوصفه .
أمّا اتجاه «إذا» فيمكننا استعمال تقنية «نشر الحلقة» نفسها في مبرهنة — الحساب غير المنتظم يحتوي الحساب المنتظم للبرهان على أن إذا كان برنامج NAND-TM بزمن متعدد الحدود، فإن لكل يمكن حساب الخريطة ببرنامج NAND-CIRC ذي حجم متعدد الحدود .
هل تستطيع الخوارزميات المنتظمة محاكاة غير المنتظمة؟
يُظهر مبرهنة — الحساب غير المنتظم يحتوي الحساب المنتظم أن كل دالة في تنتمي إلى . ويمكن أن نسأل: هل هناك علاقة عكسية. لنفرض أن بحيث يكون لـ برنامج NAND-CIRC «قصير» لكل . هل يمكننا القول إنه لا بد أن يكون في لـ «صغير» ما؟ الجواب لا القاطع. ليس فقط أن غير مشمولة في ، بل إن تحوي دوال غير قابلة للحساب!
مبرهنة — تحوي دوال غير قابلة للحساب
توجد دالة غير قابلة للحساب بحيث .
بما أن يقابل الحساب غير المنتظم، فإن الدالة تكون في إذا كان لكل تقييدُ على المدخلات ذات الطول دائرة/برنامج صغير، حتى لو كانت الدوائر لقيم مختلفة من مختلفة تمامًا عن بعضها. وبخاصة، إذا كانت تملك الخاصية أن لكل مدخلَين متساويي الطول و لدينا ، فهذا يعني أن هي إما الدالة الثابتة صفر وإما الدالة الثابتة واحد لكل . وبما أن الدالة الثابتة تملك دائرة (صغيرة جدًا!)، فإن مثل هذه الدالة ستكون دائمًا في (بل حتى في أصناف أصغر). غير أنه، عبر اختزال من مسألة التوقّف، يمكننا الحصول على دالة تحمل هذه الخاصية وهي غير قابلة للحساب.
برهان
خُذ «دالة التوقّف الثنائية» (unary halting function) التالية المعرَّفة كما يلي. ولنضع الدالة التي عند المدخل تُخرج السلسلة المقابلة للتمثيل الثنائي للعدد من دون خانة الأكثر أهمية. لاحظ أن محققة للاكتلية (onto). لكل ، نعرّف . أي إن كان هو طول ، فإن إذا وإذا فقط كانت السلسلة ترمّز برنامج NAND-TM يتوقّف عند المدخل .
غير قابلة للحساب، إذ لو كانت قابلة للحسبنا عبر تحويل البرنامج المدخل إلى العدد بحيث ثم تشغيل (أي على سلسلة من واحدًا). ومن جهة أخرى، لكل ، تكون مساوية لـ عند كل المدخلات أو مساوية لـ عند كل المدخلات ، ومن ثم يمكن حسابها ببرنامج NAND-CIRC من عدد ثابت من الأسطر.
القضية هنا بطبيعة الحال هي الانتظام (uniformity). لدالة ، إذا كانت في ، فلدينا خوارزمية واحدة تستطيع حساب لكل . ومن جهة أخرى، قد يكون في لكل باستعمال خوارزمية مختلفة تمامًا لكل طول مدخل. ولهذا السبب نستعمل عادةً لا كنموذج للحساب الفعّال بل كطريقة لنمذجة الحساب غير الفعّال. على سبيل المثال، في علم التشفير غالبًا ما يُعرَّف مخطّط التشفير بأنه آمن إذا كان كسره بمفتاح طولها يحتاج أكثر من عدد متعدد الحدود من أسطر NAND. وبما أن ، فإن هذا يستبعد خاصةً وجود خوارزمية بزمن متعدد الحدود لفعل ذلك، لكن هناك أسبابًا فنية تجعل العمل في نموذج غير منتظم أكثر معقولية في علم التشفير. كما أنه يتيح الحديث عن الأمان بمصطلحات غير مقاربة، مثل أن يملك المخطّط « بتًّا من الأمان».
ولرغم أنه قد يكون مشكلة حقيقية في أحيان، إلا أن الفرق بين الحساب المنتظم وغير المنتظم لا يبدو مهمًّا جدًا في كثير من السياقات الطبيعية. وبخاصة، في كل أمثلة المسائل التي لا نعرف أنها في التي ناقشناها سابقًا: أطول مسار، 3SAT، التحليل إلى عوامل، إلخ، لا نعرف أن هذه المسائل في أيضًا. وعليه، للدوال «الطبيعية»، إن تسرّرت أن هي تقريبًا نفسها ، فستكون مصيبًا أكثر من خطئك.

الحساب المنتظم مقابل غير المنتظم: خلاصة
وبالخلاصة، فإن نموذجي الحساب اللذين وصفناهما حتى الآن هما:
-
النماذج المنتظمة: آلات تورينج، برامج NAND-TM، آلات RAM، برامج NAND-RAM، C/JavaScript/Python، إلخ. تشتمل هذه النماذج على الحلقات وذاكرة غير محدودة، ومن ثم يستطيع برنامج واحد حساب دالة ذات طول مدخل غير محدود.
-
النماذج غير المنتظمة: الدوائر البوليانية أو برامج الأسطر المستقيمة لا تملك حلقات ولا تستطيع سوى حساب دوال منتهية. وزمن تنفيذها هو تمامًا عدد الأسطر أو البوابات التي تحويها.
لدالة وحدّ زمن جيد ما ، نعرف أن:
-
إذا كانت قابلة للحساب المنتظم في زمن ، فهناك متتالية من الدوائر حيث تملك عددًا من البوابات وتحسب (أي تقييدَ على ) لكل .
-
الاتجاه العكسي ليس صحيحًا بالضرورة - فهناك أمثلة لدوال بحيث يمكن حساب حتى بدائرة ذات حجم ثابت، لكن غير قابلة للحساب.
وهذا يعني أن التعقيد غير المنتظم أنفع لإثبات صعوبة دالة منها لإثبات سهولتها.
خلاصة
-
يمكننا تعريف التعقيد الزمني لدالة باستعمال برامج NAND-TM، ومثل مفهوم قابلية الحساب، يبدو أن هذا يلتقط التعقيد الجوهري للدالة.
-
هناك كثير من المسائل الطبيعية التي تملك خوارزميات بزمن متعدد الحدود، ومسائل طبيعية أخرى نودّ حلّها جدًا، لكن أفضل خوارزميات معروفة لها أسّية.
-
تعريف الزمن متعدد الحدود، وبالتالي الصنف ، صامد أمام تغيير النموذج، سواء كانت آلات تورينج أو NAND-TM أو NAND-RAM أو لغات برمجة حديثة أو كثير من النماذج الأخرى.
-
تُظهر نظرية التسلسل الزمني أن هناك بعض المسائل التي يمكن حلّها في زمن أسّي لكن ليس في زمن متعدد الحدود. غير أننا لا نعرف إن كان الأمر كذلك في الأمثلة الطبيعية التي وصفناها في هذه المحاضرة.
-
بـ«نشر الحلقة» يمكننا البرهان على أن كل دالة قابلة للحساب في زمن يمكن حسابها بمتتالية من برامج NAND-CIRC (واحد لكل طول مدخل) كل منها حجمه على الأكثر.
تمارين
تمرين — تكافؤ التعريفات المختلفة لـ و.
برهن أن الصنفين و المعرَّفين في تعريف — P وEXP يساويان على التوالي و. (إذا كانت مجموعة مجموعات، فإن المجموعة هي مجموعة كل العناصر بحيث يوجد يكون فيها ).
تمرين — الصمود أمام التمثيل
مبرهنة — الربط بين RAM وآلات تورينج يُظهر أن الصنفين و صامدان أمام التغيّرات في اختيار النموذج الحسابي. ويُظهر هذا التمرين أن هذين الصنفين صامدان أيضًا أمام اختيارنا لطريقة تمثيل المدخل.
وبالتحديد، لتكن دالة تربط الرسوم البيانية بـ ، ولتكن الدالتين المعرَّفتين كما يلي. لكل :
-
إذا وإذا فقط كان يمثّل رسمًا بيانيًا بتمثيل مصفوفة التجاور بحيث .
-
إذا وإذا فقط كان يمثّل رسمًا بيانيًا بتمثيل قائمة التجاور بحيث .
برهن أن إذا وإلا إذا كان .
وبوجه عام، لكل دالة ، فإن الجواب عن سؤال ما إذا كان (أو ما إذا كان ) لا يتغيّر بتبديل التمثيلات، ما دام التحويل من تمثيل إلى آخر يمكن إنجازه في زمن متعدد الحدود (وهذا ينطبق تقريبًا على كل التمثيلات المعقولة).
تمرين — الدوال البوليانية
لكل دالة ، عرّف بأنها الدالة التي تربط بـ بحيث إنها على المدخل (تمثيل سلسلة لـ) ثلاثية مع و و،
حيث هو البت رقم في السلسلة .
برهن أن لكل ، لدينا إذا وإلا إذا كانت هناك آلة تورينج وكثير حدود بحيث لكل ، عند المدخل تتوقّف خلال خطوة وتُخرج .
تمرين — تركيب الزمن متعدد الحدود
نقول إن الدالة (ربما غير البوليانية) قابلة للحساب في زمن متعدد الحدود إذا كانت هناك آلة تورينج وكثير حدود بحيث لكل ، عند المدخل تتوقّف خلال خطوة وتُخرج . برهن أن لكل زوج من الدوال القابلتين للحساب في زمن متعدد الحدود، فإن تركيبهما ، وهو الدالة بحيث ، قابلة للحساب في زمن متعدد الحدود أيضًا.
تمرين — عدم تركيب الزمن الأسّي
نقول إن الدالة (ربما غير البوليانية) قابلة للحساب في زمن أسّي إذا كانت هناك آلة تورينج وكثير حدود بحيث لكل ، عند المدخل تتوقّف خلال خطوة وتُخرج . برهن أن هناك بحيث كلتا و قابلة للحساب في زمن أسّي، لكن ليست قابلة للحساب في زمن أسّي.
تمرين — آلات تورينج الغافلة
نقول إن آلة تورينج غافلة إذا كانت هناك دالة ما بحيث لكل مدخل طوله ، ولكل ، ينطبق ما يلي:
-
إذا أخذت أكثر من خطوة حتى تتوقّف عند المدخل ، فإن رأس في الخطوة رقم سيكون في الموقع . (لاحظ أن هذا الموقع يعتمد على طول فقط لا على محتواها.)
-
إذا توقّفت قبل الخطوة رقم فإن .
برهن أن إذا كان فيوجد آلة تورينج غافلة تحسب في زمن متعدد الحدود. انظر الحاشية للإرشاد.[1]
تمرين
لتكن الدالة بحيث إنه على مدخل سلسلة تمثّل ثلاثية ، حيث هو تمثيل قائمة التجاور لرسم بياني ذي رأسًا، و و عددان في ، تكون إذا كانت الحافة موجودة في الرسم البياني. وتُخرج القيمة عند كل المدخلات الأخرى.
-
برهن أن .
-
لتكن الدالة التي على مدخل مصفوفة تجاور تُخرج إذا وإذا فقط كان الرسم البياني الذي تمثّله مستويًّا (أي يمكن رسمه على المستوى دون أن تتقاطع حافاته). ولهذا السؤال يمكنك استعمال بلا برهان الحقيقة أن . برهن أن حيث هي الدالة التي على مدخل قائمة تجاور تُخرج إذا وإذا فقط كان يمثّل رسمًا بيانيًا مستويًّا.
تمرين — تقييم دوائر NAND
لتكن الدالة بحيث لكل سلسلة تمثّل زوجًا حيث برنامج NAND-CIRC (وليس NAND-TM!) ذو مدخلًا ومخرج واحد ، و، يكون . وعند كل المدخلات الأخرى تُخرج القيمة .
برهن أن .
تمرين — إيجاد دالة صعبة
لتكن الدالة بحيث على مدخل سلسلة تمثّل زوجًا حيث
- لعدد ما
فـ إذا لم يكن هناك برنامج NAND-CIRC من سطرًا على الأكثر يحسب الدالة التي جدولُ صدقها هو السلسلة . أي إن إذا كان لكل برنامج NAND-CIRC من سطرًا على الأكثر، يوجد بحيث ، حيث تدل على الإحداثي رقم من ، باستعمال التمثيل الثنائي لتطابق مع الأعداد .
-
برهن أن .
-
(تحدٍّ) برهن أن هناك خوارزمية بحيث إذا كان كبيرًا بما يكفي، فإن تعمل في زمن وتُخرج سلسلة تكون جدولَ صدق دالة غير منتمية إلى . (بعبارة أخرى، إذا كانت هي السلسلة التي تُخرجها ، وإذا عرّفنا بأنها الدالة التي فيها يُخرج الإحداثي رقم من ، فإن .[2]
تمرين
لنفرض أنك مسؤول عن جدولة المقرّرات في علوم الحاسوب في الجامعة X. في الجامعة X، يستيقظ طلبة علوم الحاسوب متأخرين، وعليهم العمل على مشاريعهم الناشئة في فترة الظهيرة، ويقضون عطلات نهاية أسبوع طويلة مع مستثمريهم. ولذلك لا تملك سوى فترتين محتملتين: يمكنك جدولة مقرر إما الاثنين-الأربعاء 11 صباحًا-1 ظهرًا أو الثلاثاء-الخميس 11 صباحًا-1 ظهرًا.
لتكن الدالة التي تأخذ كمدخلَين قائمة مقرّرات وقائمة تعارضات (أي قائمة أزواج من المقرّرات التي لا يمكن أن تتشارك الفترة الزمنية نفسها) وتُخرج إذا وإذا فقط كانت هناك جدولة «خالٍ من التعارضات» للمقرّرات في ، حيث لا يُجدوَل أي زوج في في الفترة الزمنية نفسها.
وبدقة أكبر، فإن القائمة هي قائمة سلاسل والقائمة هي قائمة أزواج من الشكل . و إذا وإذا فقط وُجد تقسيم لـ إلى جزأين بحيث لا يوجد زوج يكون فيه و كلاهما في الجزء نفسه.
برهن أن . وكالمعتاد، لا يلزمك تقديم الشيفرة كاملة لإثبات ذلك، ويمكنك وصف العمليات بمستوى عالٍ، كما يمكنك الإشارة إلى أي بنى بيانات أو نتائج أخرى مذكورة في الكتاب أو في المحاضرة. ولاحظ أن لإثبات أن دالة في يلزمك (1) تقديم خوارزمية تحسب في زمن متعدد الحدود، (2) البرهان على أن تعمل فعلًا في زمن متعدد الحدود، وأنها تحسب فعلًا الإجابة الصحيحة.
حاول التفكير في ما إذا كانت خوارزميتك تمتد إلى الحالة التي فيها ثلاث فترات زمنية ممكنة.
ملاحظات مرجعية
لأننا مهتمون بالعدد الأقصى من الخطوات عند مدخلات ذات طول معيّن، فإن زمن التنفيذ كما عرّفناه يُعرف غالبًا بـ_تعقيد أسوأ حالة_ (worst case complexity). أما العدد الأدنى من الخطوات (أو تعقيد «أفضل حالة») اللازم لحساب دالة عند مدخلات طولها فليس عادةً كمية ذات معنى، إذ إن كل مسألة طبيعية تقريبًا لديها بعض الحالات السهلة التافهة. غير أن تعقيد الحالة المتوسطة (أي التعقيد عند مدخل «نمطي» أو «عشوائي») مفهوم مثير للاهتمام سنعود إليه عندما نتحدث عن التشفير (cryptography). ومع ذلك، فإن تعقيد أسوأ حالة هو أكثر مقاييس التعقيد شيوعًا وأساسيها، وسيكون محور تركيزنا في معظم هذا الكتاب.
تُعطى بعض الحدود الدنيا لآلات تورينج ذات الشريط الواحد في [@maass1985combinatorial].
ولتعريف الكفاءة في حساب ، يلزم الحذر بشأن ترتيب تطبيق خطوات الاختزال، فقد يكون مهمًّا لكفاءة الحساب، انظر على سبيل المثال هذه الورقة.
تُستعمل الرموز لأسباب تاريخية. وقد أدخلها كارب وليبتون، اللذان أوصفا هذا الصنف بأنه يقابل الدوال التي يمكن حسابها بآلات تورينج بزمن متعدد الحدود، مع إعطائها عند أي طول مدخل سلسلة نصيحة (advice string) طولها متعدد الحدود في .
إرشاد: هذا هو المقابل من آلات تورينج لـ مبرهنة — جعل NAND-TM غافلة. نستبدل خطوة واحدة من آلة TM الأصلية التي تحسب بـ«كنسة» لآلة TM الغافلة تمشي فيها خطوة إلى اليمين ثم خطوة إلى اليسار. ↩︎
إرشاد: استعمل البند 1، ووجود دوال تتطلب برامج NAND صعبة أسّيًا، والحقيقة أن هناك عددًا منتهًيًا فقط من الدوال التي تربط بـ . ↩︎