خوارزمية حتمية

في علم الحاسوب ، تُعرف الخوارزمية الحتمية بأنها خوارزمية تُنتج، عند إدخال بيانات محددة، نفس المخرجات دائمًا، حيث يمر الجهاز المستخدم دائمًا بنفس تسلسل الحالات. تُعد الخوارزميات الحتمية أكثر أنواع الخوارزميات دراسةً وشيوعًا، فضلًا عن كونها من أكثرها عمليةً، إذ يمكن تشغيلها بكفاءة على أجهزة حقيقية.

بشكل رسمي، تقوم الخوارزمية الحتمية بحساب دالة رياضية ؛ الدالة لها قيمة فريدة لأي مدخل في مجالها ، والخوارزمية هي عملية تنتج هذه القيمة المحددة كمخرج.

التعريف الرسمي

يمكن تعريف الخوارزميات الحتمية باستخدام آلة الحالة : تصف الحالة ما تفعله الآلة في لحظة زمنية محددة. تنتقل آلات الحالة بشكل منفصل من حالة إلى أخرى. فبعد إدخال البيانات مباشرةً، تكون الآلة في حالتها الابتدائية أو حالة البدء . إذا كانت الآلة حتمية، فهذا يعني أنه من هذه اللحظة فصاعدًا، تحدد حالتها الحالية حالتها التالية؛ أي أن مسارها عبر مجموعة الحالات محدد مسبقًا. تجدر الإشارة إلى أن الآلة قد تكون حتمية ومع ذلك لا تتوقف أو تنتهي، وبالتالي لا تُنتج أي نتيجة.

ومن الأمثلة على الآلات المجردة المحددة التي تتسم بالحتمية آلة تورينج الحتمية والآلة المحدودة الحتمية .

الخوارزميات غير الحتمية

هناك مجموعة متنوعة من العوامل التي قد تجعل الخوارزمية تتصرف بطريقة غير حتمية أو غير حتمية:

  • إذا كان يستخدم حالة خارجية بخلاف المدخلات، مثل مدخلات المستخدم، أو متغير عام ، أو قيمة مؤقت الأجهزة، أو قيمة عشوائية ، أو بيانات القرص المخزنة.
  • إذا كان النظام يعمل بطريقة حساسة للتوقيت، على سبيل المثال، إذا كان يحتوي على معالجات متعددة تكتب إلى نفس البيانات في نفس الوقت، ففي هذه الحالة، سيؤثر الترتيب الدقيق الذي يكتب به كل معالج بياناته على النتيجة.
  • إذا تسبب خطأ في الجهاز في تغيير حالته بطريقة غير متوقعة.

على الرغم من أن البرامج الحقيقية نادراً ما تكون حتمية تماماً، إلا أنه من الأسهل على البشر، وكذلك على البرامج الأخرى، فهم البرامج الحتمية. ولهذا السبب، تبذل معظم لغات البرمجة ، وخاصة لغات البرمجة الوظيفية ، جهداً لمنع حدوث الأحداث المذكورة أعلاه إلا في ظل ظروف محددة.

أدى انتشار المعالجات متعددة النوى إلى زيادة الاهتمام بالحتمية في البرمجة المتوازية، وقد تم توثيق تحديات عدم الحتمية بشكل جيد. [ 1 ] [ 2 ] وقد تم اقتراح عدد من الأدوات للمساعدة في التعامل مع هذه التحديات [ 3 ] [ 4 ] [ 5 ] [ 6 ] لمعالجة حالات الجمود وحالات التزامن .

مساوئ الحتمية

في بعض الحالات، يُعدّ سلوك البرنامج غير الحتمي ميزة. فعلى سبيل المثال، يجب ألا يكون سلوك برنامج خلط أوراق اللعب المستخدم في لعبة البلاك جاك قابلاً للتنبؤ من قِبل اللاعبين، حتى لو كان رمز البرنامج المصدري متاحًا. غالبًا ما لا يكفي استخدام مولد أرقام شبه عشوائي لضمان عدم قدرة اللاعبين على التنبؤ بنتيجة الخلط. قد يُخمّن مقامرٌ ماهرٌ بدقة الأرقام التي سيختارها المولد، وبالتالي يُحدد محتويات مجموعة الأوراق بالكامل مسبقًا، مما يسمح له بالغش. على سبيل المثال، تمكّن فريق أمن البرمجيات في شركة Reliable Software Technologies من فعل ذلك لتطبيق لعبة تكساس هولدم بوكر التي تُوزّعها شركة ASF Software، مما سمح لهم بالتنبؤ بنتيجة الجولات مسبقًا باستمرار. [ 7 ] يمكن تجنّب هذه المشاكل، جزئيًا، من خلال استخدام مولد أرقام شبه عشوائي آمن تشفيريًا ، ولكن لا يزال من الضروري استخدام بذرة عشوائية غير قابلة للتنبؤ لتهيئة المولد. لهذا الغرض، يلزم وجود مصدر لعدم الحتمية، مثل ذلك الذي يوفره مولد الأرقام العشوائية للأجهزة .

تجدر الإشارة إلى أن الإجابة السلبية على مسألة P=NP لا تعني بالضرورة أن البرامج ذات المخرجات غير الحتمية أقوى نظريًا من تلك ذات المخرجات الحتمية. يمكن تعريف فئة التعقيد NP (التعقيد) دون أي إشارة إلى عدم الحتمية باستخدام التعريف القائم على المُدقِّق .

فئات الحتمية في اللغات

الزئبق

تُحدد لغة البرمجة الوظيفية المنطقية الزئبقية فئات حتمية مختلفة لأنماط المسندات كما هو موضح في المرجع. [ 8 ] [ 9 ]

هاسكل

توفر لغة هاسكل عدة آليات:

  • اللا حتمية أو مفهوم الفشل
    • يتضمن نوعا " ربما" و "إما" مفهوم النجاح في النتيجة.
    • يمكن استخدام طريقة الفشل الخاصة بالفئة Monad للإشارة إلى الفشل كاستثناء.
    • يوفر محول Maybe monad و MaybeT monad عمليات حسابية فاشلة (إيقاف تسلسل الحساب وإرجاع Nothing) [ 10 ]
  • الحسم غير المحدد مع حلول متعددة
    • يمكنك استرجاع جميع النتائج الممكنة لعملية حسابية متعددة النتائج، وذلك بتغليف نوع النتيجة في موناد MonadPlus . (تؤدي طريقته mzero إلى فشل النتيجة، ويقوم mplus بجمع النتائج الناجحة). [ 11 ]

عائلة لغات ML واللغات المشتقة منها

كما هو موضح في Standard ML و OCaml و Scala

  • يتضمن نوع الخيار مفهوم النجاح.

جافا

في لغة جافا ، قد تمثل قيمة المرجع الفارغ نتيجة غير ناجحة (خارج النطاق).

انظر أيضاً

مراجع

  1. إدوارد أ. لي. "مشكلة الخيوط" (ملف PDF) . تم الاطلاع عليه بتاريخ 29-05-2009 .
  2. بوتشينو الابن، روبرت ل.؛ أدفي، فيكرام س.؛ أدفي، ساريتا ف.؛ سنير، مارك (2009). يجب أن تكون البرمجة المتوازية حتمية بشكل افتراضي . ورشة عمل USENIX حول المواضيع الساخنة في التوازي.
  3. "مدقق خيوط Intel Parallel Inspector" . تم الاطلاع عليه بتاريخ 29-05-2009 .
  4. يوان لين. "اكتشاف تضارب البيانات والتعطل باستخدام محلل الخيوط في برنامج صن ستوديو" (ملف PDF) . تم الاطلاع عليه بتاريخ 29-05-2009 .
  5. إنتل. "مفتش إنتل المتوازي" . تم الاسترجاع في 29-05-2009 .
  6. ديفيد وورثينجتون. "إنتل تعالج دورة حياة التطوير باستخدام Parallel Studio" . مؤرشف من الأصل بتاريخ 28 مايو 2009. تم الاطلاع عليه بتاريخ 26 مايو 2009 .
  7. ماكجرو، غاري ؛ فيغا، جون . "اجعل برنامجك يتصرف بشكل صحيح: التلاعب بالأرقام: كيفية الغش في المقامرة عبر الإنترنت" . آي بي إم . مؤرشف من الأصل في 13 مارس 2008. تم الاطلاع عليه في 2 يوليو 2007 .
  8. "فئات الحتمية في لغة برمجة ميركوري" . مؤرشف من الأصل بتاريخ 2012-07-03 . تم الاطلاع عليه بتاريخ 2013-02-23 .
  9. "أنماط زئبق المرجعية" . مؤرشف من الأصل بتاريخ 2012-07-03 . تم الاطلاع عليه بتاريخ 2013-02-25 .
  10. "تمثيل الفشل باستخدام موناد ربما" .
  11. "فئة MonadPlus" .