5000 ثم "كبير" ELIF عندما "عدد السكان"> 1500 طن ..." /> 5000 ثم "كبير" ELIF عندما "عدد السكان"> 1500 طن ..." />
أكثر

العديد من عبارات ELSE في Expression في QGIS (2.6)

العديد من عبارات ELSE في Expression في QGIS (2.6)


هل من الممكن أن يكون لديك أكثر من ELSE فيالحالة عندبيان في منشئ التعبير في QGIS؟

على سبيل المثال:

الحالة عند "عدد السكان"> 5000 ثم "كبير" ELIF عندما "عدد السكان"> 1500 ثم "متوسط" آخر "صغير" النهاية

أعلم أن هذا الجزء من التعليمات البرمجية خاطئ تمامًا ، لكنني لا أستطيع العثور على ما يعادلهELIF

بعض الافكار؟ هل أنظر إلى المشكلة بطريقة خاطئة ؟!


حسنًا يا رفاق ، أنا آسف ...

أي ما يعادلELIFهومتي.

تمت الإجابة على هذا السؤال بالفعل هنا.

آسف على الضوضاء.


بيانات الحالة المتداخلة مقابل بيانات الحالة ذات المعايير المتعددة [مغلق]

تريد تحسين هذا السؤال؟ قم بتحديث السؤال بحيث يكون & # 39s على الموضوع لمسؤولي قاعدة البيانات Stack Exchange.

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

على سبيل المثال ، لنفترض أن لدينا جدولًا به حقلين صحيحين ، العمود أ والعمود ب. أي من الاستفسارين سيكون أكثر ملاءمة للمعالج؟ نظرًا لأننا نقوم فقط بتقييم ما إذا كانت = 1 أو a = 0 مرة واحدة باستخدام العبارات المتداخلة ، فهل سيكون هذا أكثر كفاءة للمعالج ، أم أن إنشاء عبارة متداخلة سوف يلتهم هذا التحسين؟

معايير متعددة لبيان الحالة:


لا يمكن استخدام قيود التحقق إلا للتحقق مما إذا كانت البيانات تقع ضمن مجموعة معينة من المعلمات. يتم التحقق من صحة عبارة CHECK (.) بشكل أساسي كشرط منطقي إذا كانت النتيجة 1 ، يتم إدخال الصف ، إذا كانت النتيجة 0 ، لا يتم إدراج الصف ، ويتم إرجاع خطأ إلى العميل.

لاختبار ذلك ، قمت بإنشاء الجدول الخاص بك ، جنبًا إلى جنب مع قيد الفحص المقترح ، وأدخلت عدة صفوف من بيانات الاختبار:

ينتج عن هذا عدة أخطاء ويسمح بإدراج صفين:

عند محاولة إدخال 2 و 3 (أو في الواقع أي شيء بخلاف 1 أو & gt4) ، سيعود القيد خطأ ، مشيرًا إلى SQL Server لعدم تنفيذ الإدراج ، وإرجاع رسائل الخطأ الموضحة أعلاه.

فيما يلي مثال على كيفية تحقيق ذلك باستخدام المشغل:

تأكد من إزالة القيد من الجدول قبل محاولة إدخال البيانات ، لأنه قد يتعارض مع رمز المشغل:


هفرهيو

هل لوحة دفتر الأستاذ مطلوبة إذا كان جانب منزلي من الخشب؟

ما هي اللغة الأولى لاستخدام الكلمات الأساسية الشرطية؟

هل يمكن للاعب جديد الانضمام إلى مجموعة فقط عندما تبدأ حملة جديدة؟

لماذا يستخدم برنامج التحويل البرمجي AVR GCC كلمة "CALL" كاملة على الرغم من أنني قمت بضبط علامة "-mshort-calls"؟

هل من العدل أن يقوم الأستاذ بتقديرنا على حيازة الأوراق السابقة؟

كتاب سادس عن الأشخاص المحاصرين في سلسلة من العوالم التي يتخيلونها

كيف تعمل الرياضيات عند شراء أميال طيران؟

كيف تعمل مصيدة فئران للاستخدام في الفضاء؟

خذ 2! هل هذا المستفيد متوازن من سيدتي أوف باين الساحر؟

أنياب متنامية بدون جسد

هل يجب أن أستخدم بطاقة ائتمان بدون فائدة لإجراء عملية شراء كبيرة لمرة واحدة؟

إحالة غير قانونية من sObject إلى Id

لماذا نثني كتابًا لنجعله مستقيمًا؟

الرسم بدون استبدال: لماذا ترتيب السحب غير ذي صلة؟

عبور حدود الولايات المتحدة / كندا لمدة تقل عن 24 ساعة

هل الرئيس التنفيذي هو "المهنة" التي يوجد بها معظم السيكوباتيين؟

ظرف لا تبالغ فيه

ArcGIS Pro Python arcpy.CreatePersonalGDB_management

ما مقدار الضرر الذي قد يلحقه كوب من مادة النجوم النيوترونية بالأرض؟

كيف تكتب هذا المصطلح الرياضي؟ مع الحالات لا يعمل

كيف تم تحويل الصور من فيلم إلى صورة كبيرة في إطار الصورة قبل المسح الرقمي؟

لماذا يجب أن أصوت وأقبل الإجابات؟

حروف المجموع ليست مختلفة

جعل تاريخ التحديث التلقائي ومجال الوقت في QGIS؟

Unicorn Meta Zoo # 1: لماذا بودكاست آخر؟ هل من الممكن إضافة وقت التحرير إلى جدول ملف الشكل؟ كيفية إنشاء في QGIS شكل حقل يقوم بإرجاع التاريخ الحالي تلقائيًا ما يجب فعله للحفاظ على رمز Python دائمًا في QGIS 2.14 .2 إجراء تحديث تلقائي لحقل التاريخ والوقت في QGISH كيفية تعيين NULL كقيمة افتراضية لحقل التاريخ في QGIS 2.4؟ حساب حقل التاريخ في ArcPy كيفية تحديث حقل التاريخ عند نقل هندسة PostGIS في QGIS؟ QGIS Server عند إنشاء استعلام التحديث إلى postgis يعين حقل التاريخ = '' بدلاً من = فارغ مما يؤدي إلى ظهور خطأ في أداة حقول التاريخ DBQGIS - غير قادر على تحديد تاريخ اليوم؟ استخدام تلميحات الخريطة والتعبير المحكم في QGIS؟ تنسيق تاريخ مدير الوقت بدون وقت عرض الوقت في حقل التاريخ هل من الممكن إضافة وقت التحرير إلى جدول ملف الشكل؟ إجراء تحديث تلقائي لحقل التاريخ والوقت في QGIS

أريد أن أجعل حقل التاريخ والوقت محدثًا بينما أقوم بتحرير حقل سمة بهذا التنسيق yyyy-mm-dd 00:00:00 (= 2016-05-08 11:04:00) - التاريخ / الوقت المحلي. البيانات موجودة في ملف شكل QGIS 2.14 وخطوط متجهة مثل لقطة الشاشة أدناه.

عندما عنصر كـ NULL في حقل "الاسم" ، أريد إدخال اسم للطريق ويجب أن يتلقى حقل "التعديل" عصريتاريخ / وقت ified مثل "2016-05-08 15:16:00".

لقد جربت بالفعل بعض الخيارات وفشلت.
انا بحاجة الى مساعدة للبدء من البداية.

  1. أقوم بإنشاء حقل جديد ، نوع التاريخ / الوقت ، ولكن يبقى مع القيمة NULL بعد التحرير ، في حقل "الاسم" ، أو الميزة نفسها.
  2. لقد استخدمت أيضًا ، التعبير الآن () ، لكنه يظل بقيمة NULL بعد أن قمت بالتحرير.

ملحوظة: التاريخ الذي شوهد هناك ، 2016-04-14 هي القيمة الأولى التي تم إنشاؤها باستخدام "حاسبة الحقل".


محتويات

في لغات البرمجة ذات نوع البيانات المنطقية المضمنة ، مثل Pascal و Java ، عادةً ما يتم تعريف عوامل المقارنة مثل & gt و لإرجاع قيمة منطقية. يمكن تعريف الأوامر الشرطية والتكرارية لاختبار التعبيرات ذات القيمة المنطقية.

قد لا تزال اللغات التي لا تحتوي على نوع بيانات منطقية واضحة ، مثل C90 و Lisp ، تمثل قيم الحقيقة من خلال نوع بيانات آخر. يستخدم Common Lisp قائمة فارغة للخطأ ، وأي قيمة أخرى للصواب. تستخدم لغة البرمجة C نوعًا صحيحًا ، حيث يتم توصيل التعبيرات العلائقية مثل i & gt j والتعبيرات المنطقية بواسطة & amp & amp و || يتم تعريفها على أنها تحتوي على القيمة 1 إذا كانت صحيحة و 0 إذا كانت خطأ ، في حين أن أجزاء الاختبار الخاصة بـ if ، while ، for ، إلخ ، تعامل أي قيمة غير صفرية على أنها صحيحة. [1] [2] في الواقع ، يمكن اعتبار المتغير المنطقي (وتطبيقه) متغيرًا رقميًا برقم ثنائي واحد (بت) ، والذي يمكنه تخزين قيمتين فقط. غالبًا ما يتم تمثيل تطبيق Booleans في أجهزة الكمبيوتر ككلمة كاملة ، وليس قليلاً ، وهذا يرجع عادةً إلى الطرق التي تنقل بها أجهزة الكمبيوتر كتل المعلومات.

تتمتع معظم لغات البرمجة ، حتى تلك التي لا تحتوي على نوع منطقي صريح ، بدعم العمليات الجبرية المنطقية مثل الاقتران (AND ، & amp ، *) ، الفصل (OR ، | ، +) ، التكافؤ (EQV ، = ، ==) ، حصري أو / non-equence (XOR، NEQV، ^،! =) والنفي (NOT،

في بعض اللغات ، مثل Ruby و Smalltalk و Alice حقيقية و خاطئة تنتمي القيم إلى فئات منفصلة ، أي True و False على التوالي ، لذلك لا يوجد منطقي واحد يكتب.

في SQL ، التي تستخدم منطقًا ثلاثي القيم لإجراء مقارنات صريحة نظرًا لمعالجتها الخاصة لـ Nulls ، يتم تعريف نوع البيانات المنطقية (المقدمة في SQL: 1999) أيضًا لتشمل أكثر من قيمتين للحقيقة ، بحيث يمكن لـ SQL قيمة منطقية يمكن تخزين جميع القيم المنطقية الناتجة عن تقييم المسندات في SQL. يمكن أن يقتصر عمود من النوع المنطقي على TRUE و FALSE فقط.

واحدة من أقدم لغات البرمجة لتقديم لغة صريحة قيمة منطقية نوع البيانات هو ALGOL 60 (1960) مع القيم حقيقية و خاطئة والعوامل المنطقية المشار إليها بالرموز '∧ ' (and)، '∨ ' (or)، '⊃ ' (ضمنيًا) ، '≡ '(التكافؤ) و' ¬ '(not). نظرًا لحدود جهاز الإدخال ومجموعة الأحرف على العديد من أجهزة الكمبيوتر في ذلك الوقت ، فقد استخدم معظم المجمعين تمثيلات بديلة للعديد من المشغلين ، مثل AND أو "AND".

هذا النهج مع قيمة منطقية كنوع بيانات مضمن (إما بدائي أو محدد مسبقًا) تم اعتماده من قبل العديد من لغات البرمجة اللاحقة ، مثل Simula 67 (1967) ، ALGOL 68 (1970) ، [3] Pascal (1970) ، Ada (1980) ، Java (1995) ، و C # (2000) ، من بين أمور أخرى.

لا يحتوي الإصدار الأول من FORTRAN (1957) وخليفته FORTRAN II (1958) على قيم أو عمليات منطقية حتى عبارة IF الشرطية تأخذ تعبيرًا حسابيًا وتتفرع إلى واحد من ثلاثة مواقع وفقًا لعلامتها انظر IF الحسابي. ومع ذلك ، يتبع FORTRAN IV (1962) مثال ALGOL 60 من خلال توفير نوع بيانات منطقية (منطقي) ، وحرفية الحقيقة (.TRUE. و. FALSE.) ، وعوامل المقارنة الرقمية ذات القيمة المنطقية (.EQ. ، .GT. ، إلخ) والعوامل المنطقية (.NOT. و. و. و. أو.). في عبارات FORMAT ، يتم توفير واصف تنسيق محدد ('L') لتحليل القيم المنطقية أو تنسيقها. [4]

لم يكن للغة Lisp (1958) نوع بيانات منطقي مدمج. بدلاً من ذلك ، تفترض البنى الشرطية مثل الشرط أن القيمة المنطقية خاطئة يتم تمثيله بالقائمة الفارغة () ، والتي يتم تعريفها على أنها مماثلة للذرة الخاصة nil أو NIL بينما يتم تفسير أي تعبير s آخر على أنه حقيقية. للراحة ، فإن معظم اللهجات الحديثة للثغرات تحدد مسبقًا الذرة t ليكون لها قيمة t ، بحيث يمكن استخدام t كتدوين ذاكري لـ حقيقية.

هذا النهج (يمكن استخدام أي قيمة كقيمة منطقية) في معظم لهجات Lisp (Common Lisp و Scheme و Emacs Lisp) ، وتم اعتماد نماذج مماثلة من قبل العديد من لغات البرمجة النصية ، حتى تلك التي تحتوي على نوع Boolean مميز أو قيم منطقية على الرغم من القيم التي يتم تفسيرها على أنها خاطئة وهي حقيقية تختلف من لغة إلى أخرى. في المخطط ، على سبيل المثال ، ملف خاطئة القيمة هي ذرة مميزة عن القائمة الفارغة ، لذلك يتم تفسير الأخيرة على أنها حقيقية. من ناحية أخرى ، يوفر Common Lisp أيضًا النوع المنطقي المخصص ، المشتق كتخصص للرمز. [5]

قدمت لغة باسكال (1970) مفهوم الأنواع المعدودة التي يعرفها المبرمج. ثم تم توفير نوع بيانات منطقية مضمن كنوع معدود مسبقًا مع القيمتين FALSE و TRUE. حسب التعريف ، يتم تطبيق جميع المقارنات والعمليات المنطقية والعبارات الشرطية و / أو إنتاج القيم المنطقية. بخلاف ذلك ، يحتوي النوع المنطقي على جميع التسهيلات المتاحة للأنواع التي تم تعدادها بشكل عام ، مثل الطلب والاستخدام كمؤشرات. في المقابل ، لا يزال التحويل بين القيم المنطقية والأعداد الصحيحة (أو أي أنواع أخرى) يتطلب اختبارات صريحة أو استدعاءات وظيفية ، كما هو الحال في ALGOL 60. هذا النهج (Boolean هو نوع معدود) من قبل معظم اللغات اللاحقة التي تعددت الأنواع ، مثل Modula و Ada و Haskell.

لم تقدم التطبيقات الأولية للغة C (1972) نوعًا منطقيًا ، وحتى يومنا هذا يتم تمثيل القيم المنطقية بشكل عام بواسطة الأعداد الصحيحة (int) في برامج C. يتم تعريف عوامل المقارنة (& gt ، == ، إلخ.) لإرجاع نتيجة عدد صحيح بعلامة (int) ، إما 0 (للخطأ) أو 1 (للصواب). تفترض العوامل المنطقية (& amp & amp ، || ،! ، إلخ) وعبارات اختبار الحالة (if ، while) أن الصفر خطأ وأن جميع القيم الأخرى صحيحة.

بعد إضافة الأنواع (التعدادات) المعددة إلى إصدار المعهد الوطني الأمريكي للمعايير C ، ANSI C (1989) ، اعتاد العديد من مبرمجي C على تحديد أنواع منطقية خاصة بهم على هذا النحو ، لأسباب تتعلق بالقراءة. ومع ذلك ، فإن الأنواع المعدودة تعادل الأعداد الصحيحة وفقًا لمعايير اللغة ، لذا فإن الهوية الفعالة بين القيم المنطقية والأعداد الصحيحة لا تزال صالحة لبرامج لغة سي.

يوفر المعيار C (منذ C99) نوعًا منطقيًا يسمى _Bool. من خلال تضمين العنوان stdbool.h ، يمكن للمرء استخدام منطقي الاسم الأكثر بديهية والثوابت صواب وخطأ. تضمن اللغة أن أي قيمتين حقيقيتين ستتم مقارنتهما بالتساوي (وهو ما كان من المستحيل تحقيقه قبل إدخال النوع). لا تزال القيم المنطقية تتصرف كأعداد صحيحة ، ويمكن تخزينها في متغيرات عدد صحيح ، واستخدامها في أي مكان تكون فيه الأعداد الصحيحة صالحة ، بما في ذلك في الفهرسة والحساب والتحليل والتنسيق. هذا النهج (القيم المنطقية هي مجرد أعداد صحيحة) في جميع الإصدارات اللاحقة من C. لاحظ أن هذا لا يعني أنه يمكن تخزين أي قيمة عدد صحيح في متغير منطقي.

يحتوي C ++ على نوع بيانات منطقي منفصل ، ولكن مع تحويلات تلقائية من القيم العددية والمؤشر التي تشبه إلى حد كبير تلك الخاصة بـ C. تم اعتماد هذا الأسلوب أيضًا من قبل العديد من اللغات اللاحقة ، خاصةً من قبل بعض لغات البرمجة النصية مثل AWK.

يحتوي Objective-C أيضًا على نوع بيانات Boolean منفصل BOOL ، مع القيم المحتملة هي YES أو NO ، مكافئات true و false على التوالي. [6] أيضًا ، في برامج التحويل البرمجي Objective-C التي تدعم C99 ، يمكن استخدام نوع C _Bool ، نظرًا لأن Objective-C عبارة عن مجموعة شاملة من C.

في Java ، يمكن أن تكون قيمة نوع البيانات المنطقية إما صحيحة أو خاطئة. [7]

ليس لدى Perl نوع بيانات منطقي. بدلاً من ذلك ، يمكن أن تتصرف أي قيمة على أنها قيمة منطقية في سياق منطقي (شرط عبارة if أو while ، وسيطة & amp & amp أو || ، وما إلى ذلك). الرقم 0 ، والسلاسل "0" و "" ، والقائمة الفارغة () ، والقيمة الخاصة undef يتم تقييمها على خطأ. [8] يتم تقييم كل شيء آخر على أنه صحيح.

يحتوي Lua على نوع بيانات منطقي ، ولكن يمكن أيضًا أن تتصرف القيم غير المنطقية مثل القيم المنطقية. يتم تقييم nil غير ذي القيمة إلى خطأ ، بينما يتم تقييم كل قيمة نوع بيانات أخرى إلى true. يتضمن ذلك السلسلة الفارغة "" والرقم 0 ، والتي غالبًا ما تعتبر صحيحة في اللغات الأخرى.

لا يحتوي Tcl على نوع منطقي منفصل. كما هو الحال في C ، يتم استخدام الأعداد الصحيحة 0 (خطأ) و 1 (صحيح - في الواقع أي عدد صحيح غير صفري). [9]

سيظهر ما ورد أعلاه "V هو 1 أو صحيح" لأن التعبير يساوي 1.

ما ورد أعلاه سوف يعرض خطأ ، كمتغير الخامس لا يمكن تقييمه على أنه 0 أو 1.

بايثون ، من الإصدار 2.3 وما بعده ، لديها نوع منطقي وهو فئة فرعية من int ، نوع العدد الصحيح القياسي. [10] له قيمتان محتملتان: صواب وخطأ ، وهما إصدارات خاصة من 1 و 0 على التوالي وتتصرف على هذا النحو في السياقات الحسابية. أيضًا ، تعتبر القيمة الرقمية للصفر (عدد صحيح أو كسري) والقيمة الخالية (بلا) والسلسلة الفارغة والحاويات الفارغة (القوائم والمجموعات وما إلى ذلك) Boolean false جميع القيم الأخرى تعتبر Boolean true بشكل افتراضي. [11] يمكن للفئات تحديد كيفية معالجة مثيلاتها في سياق منطقي من خلال الطريقة الخاصة __nonzero__ (Python 2) أو __Bool__ (Python 3). بالنسبة للحاويات ، يتم استخدام __len__ (طريقة خاصة لتحديد طول الحاويات) إذا لم يتم تحديد طريقة التحويل المنطقية الصريحة.

في روبي ، على النقيض من ذلك ، لا يوجد سوى شيء (القيمة الفارغة لروبي) وكائن خاطئ خاص خاطئة كل شيء آخر (بما في ذلك العدد الصحيح 0 والمصفوفات الفارغة) هو حقيقية.

في JavaScript ، تسمى أحيانًا السلسلة الفارغة ("") ، و null ، و undefined ، و NaN ، و +0 ، و −0 ، و false [12] زور (منها مكمل صدق) للتمييز بين القيم المنطقية التي تم فحصها بدقة والتي تم التحقق منها بشكل صارم. [13] على عكس بايثون ، تعتبر الحاويات الفارغة (المصفوفات ، الخرائط ، المجموعات) صحيحة. تستخدم لغات مثل PHP أيضًا هذا الأسلوب.

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

تظهر القيم المنطقية في SQL عند الحاجة إلى شرط ، مثل عبارة WHERE ، في شكل مسند يتم إنتاجه باستخدام عوامل تشغيل مثل عوامل المقارنة ، عامل IN ، IS (NOT) NULL إلخ. ومع ذلك ، بصرف النظر عن TRUE و FALSE ، فإن هؤلاء المشغلين يمكن أن ينتج أيضًا حالة ثالثة ، تسمى UNKNOWN ، عند إجراء المقارنة مع NULL.

يختلف علاج القيم المنطقية بين أنظمة SQL.

على سبيل المثال ، في Microsoft SQL Server ، القيمة المنطقية غير مدعومة على الإطلاق ، لا كنوع بيانات مستقل ولا يمكن تمثيلها كعدد صحيح. يُظهر رسالة الخطأ "تعبير من نوع غير منطقي محدد في سياق يُتوقع فيه شرط" إذا تم استخدام العمود مباشرةً في جملة WHERE ، على سبيل المثال حدد من t Where a ، بينما عبارة مثل عمود SELECT ليست فارغة من t ينتج عنها خطأ في بناء الجملة. يتم استخدام نوع بيانات BIT ، الذي يمكنه فقط تخزين الأعداد الصحيحة 0 و 1 بصرف النظر عن NULL ، كحل بديل لتخزين القيم المنطقية ، ولكن يجب استخدام الحلول البديلة مثل UPDATE t SET flag = IIF (col IS NOT NULL، 1، 0) WHERE flag = 0 للتحويل بين العدد الصحيح والتعبير المنطقي.

PostgreSQL لها نوع BOOLEAN مميز كما في المعيار ، [14] والذي يسمح بتخزين المسندات مباشرة في عمود BOOLEAN ، ويسمح باستخدام عمود BOOLEAN مباشرة كمسند في جملة WHERE.

في MySQL ، يتم التعامل مع BOOLEAN كاسم مستعار لـ TINYINT (1) [15] TRUE هي نفسها مثل العدد الصحيح 1 و FALSE هي نفسها العدد الصحيح 0. [16] أي عدد صحيح غير صفري يكون صحيحًا في الظروف.

قدم معيار SQL92 عوامل تشغيل IS (NOT) TRUE و IS (NOT) FALSE و IS (NOT) UNKNOWN التي تقيم المسند ، والتي سبقت إدخال النوع المنطقي في SQL: 1999.

قدم معيار SQL: 1999 نوع بيانات BOOLEAN كميزة اختيارية (T031). عند تقييده بقيد NOT NULL ، يتصرف SQL BOOLEAN مثل Booleans في لغات أخرى ، والتي يمكنها تخزين قيم TRUE و FALSE فقط. ومع ذلك ، إذا كان لاغياً ، وهو الإعداد الافتراضي مثل جميع أنواع بيانات SQL الأخرى ، فيمكن أن يكون له قيمة فارغة خاصة أيضًا. على الرغم من أن معيار SQL يعرّف ثلاثة أنواع حرفية لنوع BOOLEAN - TRUE و FALSE و UNKNOWN - إلا أنه ينص أيضًا على أن NULL BOOLEAN و UNKNOWN "يمكن استخدامهما بالتبادل لتعني نفس الشيء تمامًا". [17] [18] وقد تسبب هذا في بعض الجدل لأن موضوعات التعريف غير معروفة لقواعد مقارنة المساواة لـ NULL. بتعبير أدق غير معروف = غير معروف ليس صحيحًا ولكنه غير معروف / فارغ.[19] اعتبارًا من عام 2012 ، هناك عدد قليل من أنظمة SQL الرئيسية التي تطبق ميزة T031. [20] فايربيرد و PostgreSQL استثناءات ملحوظة ، على الرغم من أن PostgreSQL لا تنفذ أي استخدام حرفي NULL غير معروف بدلاً من ذلك. [21]

لا يحتوي Microsoft Access ، الذي يستخدم محرك قاعدة بيانات Microsoft Jet ، [22] أيضًا على نوع بيانات منطقي. على غرار MS SQL Server ، يستخدم نوع بيانات BIT. [23] يُعرف في Access بنوع البيانات "نعم / لا" [24] والذي يمكن أن يحتوي على قيمتين نعم (صواب) أو لا (خطأ). يمكن أيضًا تمثيل نوع بيانات BIT في Access عدديًا ، True تساوي -1 والخطأ 0. [25] وهذا يختلف عن MS SQL Server بطريقتين ، على الرغم من أن كلاهما من منتجات Microsoft:

  1. يمثل Access TRUE كـ -1 ، بينما يمثل 1 في SQL Server
  2. لا يدعم Access الحالة الثلاثية الفارغة التي يدعمها SQL Server

يحتوي برنامج Tableau على نوع بيانات BOOLEAN. [26] القيمة الحرفية للقيمة المنطقية هي True أو False. [27]

تقوم الدالة Tableau INT () بتحويل قيمة منطقية إلى رقم ، وإرجاع 1 لـ True و 0 لـ False. [28]


علوم المعلومات

تعليمات المؤلف

روابط مفيدة

تحقق من الورقة المقدمة

مسار الورق المقبول

بمجرد بدء إنتاج مقالتك ، يمكنك تتبع حالة مقالتك عبر تتبع مقالتك المقبولة.

  • الاقتباس: 12.1الاقتباس:
    2020: 12.1
    يقيس CiteScore متوسط ​​الاقتباسات المتلقاة لكل مستند تمت مراجعته من قِبل النظراء منشور في هذا العنوان. تستند قيم CiteScore إلى عدد الاقتباسات في نطاق من أربع سنوات (على سبيل المثال 2017-20) إلى المستندات التي راجعها النظراء (المقالات والمراجعات وأوراق المؤتمرات وأوراق البيانات وفصول الكتب) المنشورة في نفس السنوات التقويمية الأربع ، مقسومة على العدد من هذه الوثائق في السنوات الأربع نفسها (على سبيل المثال 2017 - 20): بيانات المصدر Scopus ، 2021
  • عامل التأثير: 5.910عامل التأثير:
    2019: 5.910
    يقيس عامل التأثير متوسط ​​عدد الاستشهادات الواردة في عام معين من خلال الأوراق المنشورة في المجلة خلال العامين السابقين.
    تقارير الاقتباس من المجلة (Clarivate Analytics، 2020)
  • عامل التأثير لمدة 5 سنوات: 5.563عامل التأثير لمدة خمس سنوات:
    2019: 5.563
    لحساب عامل التأثير لمدة خمس سنوات ، يتم احتساب الاستشهادات في عام 2019 إلى السنوات الخمس السابقة ومقسمة على عناصر المصدر المنشورة في السنوات الخمس السابقة.
    تقارير الاقتباس من المجلة (Clarivate Analytics، 2020)
  • التأثير الطبيعي للمصدر لكل ورقة (SNIP): 2.585التأثير الطبيعي للمصدر لكل ورقة (SNIP):
    2020: 2.585
    يقيس SNIP تأثير الاقتباس السياقي من خلال ترجيح الاقتباسات بناءً على العدد الإجمالي للاقتباسات في حقل الموضوع.
  • تصنيف مجلة SCImago (SJR): 1.524تصنيف مجلة SCImago (SJR):
    2020: 1.524
    SJR هو مقياس هيبة يعتمد على فكرة أن ليست كل الاستشهادات متطابقة. تستخدم SJR خوارزمية مشابهة لترتيب صفحة Google ، فهي توفر مقياسًا كميًا ونوعيًا لتأثير المجلة.
  • عرض المزيد في Journal Insights

  • 6٪ نساء
  • 78٪ رجل
  • 0٪ غير ثنائي أو متنوع بين الجنسين
  • 16٪ يفضلون عدم الإفصاح
  • 13٪ نساء
  • 72٪ رجل
  • 0٪ غير ثنائي أو متنوع بين الجنسين
  • 15٪ يفضلون عدم الإفصاح

مجلة دولية

علوم المعلومات سوف تنشر نتائج البحوث الأصلية والمبتكرة والإبداعية. سيتم نشر عدد أقل من البرامج التعليمية ومساهمات المسح في الوقت المناسب من وقت لآخر.

تم تصميم المجلة لخدمة الباحثين والمطورين والمديرين والمخططين الاستراتيجيين وطلاب الدراسات العليا وغيرهم.

علوم المعلومات سوف تنشر نتائج البحوث الأصلية والمبتكرة والإبداعية. سيتم نشر عدد أقل من البرامج التعليمية ومساهمات المسح في الوقت المناسب من وقت لآخر.

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

تنشر المجلة مقالات محكمة عالية الجودة. يؤكد على تغطية متوازنة لكل من النظرية والتطبيق. إنه يقر تمامًا ويعزز بشكل واضح نطاقًا واسعًا من تخصص علوم المعلومات.

أسس علم المعلومات:
نظرية المعلومات ، اللغويات الرياضية ، نظرية الأوتوماتا ، العلوم المعرفية ، نظريات السلوك النوعي ، الذكاء الاصطناعي ، الذكاء الحسابي ، الحوسبة اللينة ، السيميائية ، علم الأحياء الحاسوبي والمعلوماتية الحيوية.

تطبيقات وتكنولوجيا المعلومات:
الأنظمة الذكية ، والخوارزميات الجينية والنمذجة ، والمنطق الضبابي والاستدلال التقريبي ، والشبكات العصبية الاصطناعية ، وأنظمة دعم الخبراء والقرار ، والتعلم والحوسبة التطورية ، وأنظمة دعم القرار والخبراء ، والتعلم والحوسبة التطورية ، والقياسات الحيوية ، والحوسبة النانوية الجزيئية ، والتكيف الذاتي ، والتكيف الذاتي - النظم التنظيمية ، وهندسة البيانات ، ودمج البيانات ، والمعلومات والمعرفة ، والتحكم الإشرافي التكيفي ، وأنظمة الأحداث المنفصلة ، والتقنيات الرمزية / الرقمية والإحصائية ، والتصورات والتعرف على الأنماط ، وتصميم الخوارزميات ، وتصميم البرمجيات ، وأنظمة الكمبيوتر ، وتقييمات الهندسة المعمارية ، والأدوات ، واجهة الإنسان والحاسوب وشبكات الاتصال الحاسوبية والنمذجة والحوسبة بالكلمات

التطبيقات:
التصنيع والأتمتة والروبوتات المتنقلة ، والواقع الافتراضي ، وأنظمة معالجة الصور والرؤية الحاسوبية ، وشبكات الضوئيات ، وعلم الجينوم والمعلوماتية الحيوية ، ورسم خرائط الدماغ ، وتصميم اللغة ومحرك البحث ، وواجهة آلية سهلة الاستخدام ، وضغط البيانات وتجريد النص وتلخيصه ، والواقع الافتراضي ، نمذجة المالية والاقتصاد والتحسين


1 إجابة 1

1. البق

هناك حلقة لا نهائية في الحل:

بالطبع الإدخال "AB" غير صالح ، لكنني أتوقع الحصول على خطأ نحوي بدلاً من حلقة لا نهائية.

تؤدي المدخلات الأخرى التي تحتوي على أخطاء في بناء الجملة إلى استثناءات يصعب فهمها. على سبيل المثال:

تنجح بعض المدخلات غير الصحيحة ولكنها تؤدي إلى نتائج لا معنى لها:

عند مصادفة إدخال غير صالح ، من الجيد رفع خطأ نحوي مع شرح المشكلة.

2. نهج بديل

لن أراجع الكود بأي تفاصيل ، لأن الأسلوب المتبع هنا (استبدال السلسلة المتكرر) بطيء وهش ويصعب إخراج رسائل خطأ جيدة منه.

لذا بدلاً من ذلك ، سأقوم بشرح الطريقة القياسية لمعالجة هذا النوع من المشاكل. الفكرة هي الجمع بين ثلاث مراحل معالجة:

الترميز. في هذه المرحلة ، يتم تحويل سلسلة الإدخال إلى سلسلة من الرموز المميزة. على سبيل المثال ، بالنظر إلى هذا الإدخال:

قد يصدر الرمز المميز هذا التسلسل من الرموز:

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

تقييم التعبير. تأخذ هذه المرحلة شجرة تحليل للتعبير ، جنبًا إلى جنب مع بيئة (بنية بيانات تعيين المتغيرات لقيمها) ، وإرجاع قيمة التعبير.

هناك عدة أسباب وجيهة لحل المشكلة باستخدام هذا النهج:

إنه النهج القياسي ، لذلك سيفهم المبرمجون الآخرون بسهولة كيفية عمله.

إنها فعالة: يجب أن تمر كل مرحلة على المدخلات الخاصة بها مرة واحدة بالضبط ، وبالتالي تجنب استبدال السلسلة المتكررة للشفرة في المنشور.

إن تقسيم العمل إلى خطوات ذات مدخلات ومخرجات محددة بوضوح يجعل الاختبار أسهل.

يمتد النهج إلى تطبيقات أكثر تعقيدًا ، مثل ترجمة لغات البرمجة.

3. الترميز

غالبًا ما يتم تنفيذ الترميز باستخدام آلة الحالة المحدودة ، ولكن غالبًا ما يكون من الملائم استخدام تعبير عادي.

4. الاعراب

قبل أن تتمكن من كتابة المحلل اللغوي ، تحتاج إلى تكوين قواعد نحوية رسمية. ربما يكون هذا هو أصعب جزء في الأمر برمته. ها هي القواعد التي سأستخدمها ، مكتوبة بصيغة Backus – Naur:

متغير :: | "ب" | … | "Z" | "أ" | "ب" | . | "ض"

المصطلح :: = "متغير" | ثابت〉 | "(" فصل〉 ")"

UnaryExpr〉 :: UnaryExpr〉 | <مصطلح>

"التضمين" :: = "UnaryExpr〉 ((" → "|" ↔ ")) التضمين)؟

〈ارتباط :: = تأثير ("∧" 〈ارتباط)؟

〈فصل :: = ارتباط ("∨" فصل)؟

من أجل إنشاء شجرة التحليل ، سنحتاج إلى هياكل بيانات لكل نوع من العقدة في الشجرة ، والتي يسهل تعريفها باستخدام المجموعات.

هناك العديد من الأساليب المختلفة لكتابة المحلل اللغوي. يمكنني استخدام مولد محلل مثل pyparsing ، الذي يبني المحلل اللغوي من تمثيل القواعد الرسمية ، لكنني أعتقد أنه من الأكثر توضيحًا أن تكتب محلل النسب العودي يدويًا.

سنبدأ ببعض الثوابت العالمية:

لاحظ أنني استخدمت الدوال المضمنة عامل تشغيل eq ، عامل تشغيل و_ ، عامل تشغيل. or_ ، عامل تشغيل .not_ ، بدلاً من biconditional ، and_func ، or_func ، و negate على التوالي.

الآن لمحلل النسب العودية:

5. التقييم

يمكن إجراء تقييم شجرة التحليل عن طريق التقييم المتكرر للأشجار الفرعية ثم دمج النتائج:

6. جدول الحقيقة

يجب أن يكون واضحًا الآن كيفية بناء جدول الحقيقة للتعبير باستخدام النهج الجديد:

استدعاء تحليل لتحليل التعبير ، والحصول على شجرة تحليل.

احسب مجموعة المتغيرات في الشجرة. (ستتبع هذه الخطوة نفس نوع نمط التنفيذ كما ورد في التقييم أعلاه).

كرر الصفوف في جدول الحقيقة ، على سبيل المثال باستخدام itertools.product.

لكل صف ، أنشئ قاموسًا يعيّن كل متغير لقيمته في الصف ، ثم استدعِ التقييم للحصول على نتيجة الصف.


محتويات

تعود جذور كلمة "خوارزمية" إلى لاتينية النصباء ، مما يشير إلى أصله الجغرافي ، من اسم عالم الرياضيات الفارسي محمد بن موسى الخوارزمي إلى algorismus. [19] [20] كان الخوارزمي (الخوارزمي الفارسي المعرّب حوالي 780-850) عالمًا في الرياضيات والفلك والجغرافيا وباحثًا في بيت الحكمة في بغداد ، [13] ويعني اسمه "موطن خوارزم". منطقة كانت جزءًا من إيران الكبرى وهي الآن في أوزبكستان. [21] [22] حوالي عام 825 ، كتب الخوارزمي رسالة باللغة العربية عن نظام الترقيم الهندوسي والعربي ، والتي تُرجمت إلى اللاتينية خلال القرن الثاني عشر. المخطوطة تبدأ بالعبارة ديكسيت الجوريزمي ("هكذا تكلم الخوارزمي") حيث كانت "الجوريزمي" هي الترجمة اللاتينية لاسم الخوارزمي في المترجم. [23] كان الخوارزمي عالم الرياضيات الأكثر قراءة على نطاق واسع في أوروبا في أواخر العصور الوسطى ، وذلك في المقام الأول من خلال كتاب آخر له ، وهو علم الجبر. [24] في أواخر القرون الوسطى اللاتينية ، algorismus، "algorism" الإنجليزية ، تحريف اسمه ، يعني ببساطة "نظام الأرقام العشري". [25] في القرن الخامس عشر ، وتحت تأثير الكلمة اليونانية ἀριθμός (arithmos)، 'عدد' (راجع "حسابي") ، تم تغيير الكلمة اللاتينية إلى الخوارزمية، وشهد المصطلح الإنجليزي المقابل "الخوارزمية" لأول مرة في القرن السابع عشر ، حيث تم إدخال المعنى الحديث في القرن التاسع عشر. [26]

في اللغة الإنجليزية ، تم استخدامه لأول مرة في حوالي عام 1230 ثم بواسطة تشوسر في عام 1391. وقد تبنت الإنجليزية المصطلح الفرنسي ، ولكن لم تتخذ "الخوارزمية" المعنى الموجود في اللغة الإنجليزية الحديثة حتى أواخر القرن التاسع عشر. [27]

استخدام مبكر آخر للكلمة من عام 1240 ، في دليل بعنوان كارمن دي Algorismo ألحان الكسندر دي فيليديو. يبدأ بـ:

Haec algorismus ars praesens dicitur، in qua / Talibus Indorum fruimur bis quinque figuris.

Algorism هو الفن الذي نستخدم به في الوقت الحاضر تلك الشخصيات الهندية ، والتي يبلغ عددها اثنين في خمسة.

تتكون القصيدة من بضع مئات من الأسطر وتلخص فن الحساب باستخدام الزهر الهندي الجديد (تالي إندوروم) ، أو الأرقام الهندوسية. [28]

يمكن أن يكون التعريف غير الرسمي "مجموعة من القواعد التي تحدد بدقة تسلسل العمليات" ، [29] [ بحاجة إلى اقتباس للتحقق ] والتي ستشمل جميع برامج الكمبيوتر (بما في ذلك البرامج التي لا تقوم بحسابات رقمية) ، و (على سبيل المثال) أي إجراء بيروقراطي محدد [30] أو وصفة كتاب الطبخ. [31]

بشكل عام ، يعد البرنامج خوارزمية فقط إذا توقف في النهاية [32] - على الرغم من أن الحلقات اللانهائية قد تكون مرغوبة في بعض الأحيان.

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

يقدم Boolos، Jeffrey & amp 1974، 1999 معنى غير رسمي لكلمة "خوارزمية" في الاقتباس التالي:

لا يمكن لأي إنسان أن يكتب بسرعة كافية ، أو طويلة بما فيه الكفاية ، أو صغيرة بما فيه الكفاية † (and "أصغر وأصغر بلا حدود ... ستحاول الكتابة على الجزيئات ، على الذرات ، على الإلكترونات") لإدراج جميع الأعضاء في عدد لانهائي من خلال كتابة أسمائهم ، واحدة تلو الأخرى ، في بعض الرموز. لكن يمكن للبشر أن يفعلوا شيئًا مفيدًا بنفس القدر ، في حالة مجموعات معينة لا حصر لها: يمكنهم العطاء تعليمات صريحة لتحديد نالعضو العاشر في المجموعة، للمحدود التعسفي ن. يجب إعطاء مثل هذه التعليمات بشكل صريح تمامًا ، بالشكل الذي يمكن أن تتبعهم آلة حوسبة، أو بواسطة أ الإنسان القادر على تنفيذ عمليات أساسية فقط على الرموز. [33]

"المجموعة اللانهائية بشكل معدود" هي المجموعة التي يمكن وضع عناصرها في تطابق واحد لواحد مع الأعداد الصحيحة. وهكذا يقول بولوس وجيفري أن الخوارزمية تتضمن تعليمات لعملية "تخلق" أعدادًا صحيحة من الناتج اعتباطيا عدد صحيح أو أعداد صحيحة "الإدخال" يمكن أن تكون كبيرة بشكل تعسفي من الناحية النظرية. على سبيل المثال ، يمكن أن تكون الخوارزمية معادلة جبرية مثل ص = م + ن (على سبيل المثال ، "متغيرا إدخال" تعسفيان م و ن التي تنتج مخرجات ذ) ، ولكن محاولات العديد من المؤلفين لتعريف الفكرة تشير إلى أن الكلمة تعني أكثر من ذلك بكثير ، شيء بترتيب (على سبيل المثال الإضافي):

تعليمات دقيقة (بلغة يفهمها "الكمبيوتر") [34] لعملية سريعة وفعالة و "جيدة" [35] تحدد "حركات" "الكمبيوتر" (آلة أو إنسان ، مزودة بالأدوات اللازمة داخليًا تحتوي على معلومات وقدرات) [36] لإيجاد وفك تشفير ومعالجة الأعداد الصحيحة / الرموز التعسفية م و ن، حرف او رمز + و = ... و "بشكل فعال" [37] ينتجان ، في وقت "معقول" ، [38] عددًا صحيحًا للمخرجات ذ في مكان محدد وبتنسيق محدد.

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

الخوارزميات ضرورية للطريقة التي تعالج بها أجهزة الكمبيوتر البيانات. تحتوي العديد من برامج الكمبيوتر على خوارزميات توضح بالتفصيل الإرشادات المحددة التي يجب أن يقوم بها الكمبيوتر - بترتيب معين - لتنفيذ مهمة محددة ، مثل حساب رواتب الموظفين أو طباعة بطاقات تقارير الطلاب. وبالتالي ، يمكن اعتبار الخوارزمية أي سلسلة من العمليات التي يمكن محاكاتها بواسطة نظام Turing-Complete. المؤلفون الذين يؤكدون هذه الأطروحة هم مينسكي (1967) ، سافاج (1987) وجورفيتش (2000):

مينسكي: "لكننا سنؤكد أيضًا ، مع تورينج ... أن أي إجراء يمكن أن يُطلق عليه" بشكل طبيعي "فعالية ، يمكن في الواقع تحقيقه بواسطة آلة (بسيطة). على الرغم من أن هذا قد يبدو متطرفًا ، فإن الحجج ... يصعب دحضها ". [39]

غورفيتش: "... حجة تورينج غير الرسمية لصالح أطروحته تبرر أطروحة أقوى: يمكن محاكاة كل خوارزمية بواسطة آلة تورينج ... وفقًا لسافاج [1987] ، الخوارزمية هي عملية حسابية تحددها آلة تورينج". [40]

يمكن لآلات تورينج تحديد العمليات الحسابية التي لا تنتهي. تتطلب التعريفات غير الرسمية للخوارزميات عمومًا أن تنتهي الخوارزمية دائمًا. يجعل هذا المطلب مهمة تقرير ما إذا كان الإجراء الرسمي عبارة عن خوارزمية مستحيلة في الحالة العامة - بسبب النظرية الرئيسية لنظرية الحوسبة المعروفة باسم مشكلة التوقف.

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

بالنسبة لبعض هذه العمليات الحسابية ، يجب تحديد الخوارزمية بدقة: تحديد طريقة تطبيقها في جميع الظروف المحتملة التي يمكن أن تنشأ. هذا يعني أنه يجب التعامل مع أي خطوات شرطية بشكل منهجي ، ويجب أن تكون معايير كل حالة واضحة (وقابلة للحساب) لكل حالة على حدة.

نظرًا لأن الخوارزمية عبارة عن قائمة دقيقة من الخطوات الدقيقة ، فإن ترتيب الحساب دائمًا ما يكون حاسمًا لعمل الخوارزمية. يُفترض عادةً أن يتم سرد التعليمات بشكل صريح ، ويتم وصفها على أنها تبدأ من "أعلى" وتنتقل من "نزولاً إلى أسفل" - وهي فكرة تم وصفها بشكل أكثر تدفق السيطرة.

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

للحصول على بعض المفاهيم البديلة لما يشكل خوارزمية ، انظر البرمجة الوظيفية والبرمجة المنطقية.

التعبير عن الخوارزميات تحرير

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

هناك مجموعة متنوعة من التمثيلات الممكنة ويمكن للمرء أن يعبر عن برنامج آلة تورينج كسلسلة من جداول الآلة (انظر آلة الحالة المحدودة ، وجدول انتقال الحالة وجدول التحكم لمزيد من المعلومات) ، مثل مخططات انسيابية ومخططات دراكون (انظر الرسم التخطيطي للحالة) لمزيد من المعلومات) ، أو كشكل من أشكال كود الآلة البدائية أو رمز التجميع المسمى "مجموعات من المضاعفات الرباعية" (انظر آلة تورينج للمزيد).

يمكن تصنيف تمثيلات الخوارزميات إلى ثلاثة مستويات مقبولة لوصف آلة تورينج ، على النحو التالي: [41]

1 وصف رفيع المستوى "... نثر لوصف خوارزمية ، متجاهلاً تفاصيل التنفيذ. في هذا المستوى ، لا نحتاج إلى ذكر كيفية إدارة الآلة لشريطها أو رأسها." 2 وصف التنفيذ "... النثر المستخدم لتحديد الطريقة التي تستخدم بها آلة تورينج رأسها والطريقة التي تخزن بها البيانات على شريطها. في هذا المستوى ، لا نعطي تفاصيل عن الحالات أو وظيفة الانتقال." 3 الوصف الرسمي يعطي "المستوى الأدنى" الأكثر تفصيلاً "جدول الحالة" لآلة تورينج.

للحصول على مثال عن الخوارزمية البسيطة "إضافة m + n" الموصوفة في المستويات الثلاثة جميعها ، راجع الخوارزمية # أمثلة.

يشير تصميم الخوارزمية إلى طريقة أو عملية رياضية لحل المشكلات والخوارزميات الهندسية. يعد تصميم الخوارزميات جزءًا من العديد من نظريات الحلول لأبحاث العمليات ، مثل البرمجة الديناميكية وفرق تسد. تقنيات تصميم وتنفيذ تصميمات الخوارزمية تسمى أيضًا أنماط تصميم الخوارزمية ، [42] مع أمثلة تشمل نمط طريقة القالب ونمط الزخرفة.

أحد أهم جوانب تصميم الخوارزمية هو كفاءة الموارد (وقت التشغيل ، استخدام الذاكرة) ، حيث يتم استخدام تدوين O الكبير لوصف على سبيل المثال. نمو وقت تشغيل الخوارزمية كلما زاد حجم مدخلاتها.

خطوات نموذجية في تطوير الخوارزميات:

  1. تعريف المشكلة
  2. تطوير نموذج
  3. مواصفات الخوارزمية
  4. تصميم خوارزمية
  5. التحقق من صحة الخوارزمية
  6. تحليل الخوارزمية
  7. تنفيذ الخوارزمية
  8. اختبار البرنامج
  9. إعداد الوثائق [التوضيح المطلوب]

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

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

برامج "أنيقة" (مضغوطة) برامج "جيدة" (سريعة) : يظهر مفهوم "البساطة والأناقة" بشكل غير رسمي في Knuth وبالتحديد في Chaitin:

كنوث: "... نريد حسن الخوارزميات بمعنى جمالي محدد بشكل فضفاض. معيار واحد ... هو طول الوقت المستغرق لتنفيذ الخوارزمية…. المعايير الأخرى هي قابلية الخوارزمية للتكيف مع أجهزة الكمبيوتر ، وبساطتها وأناقتها ، إلخ. "[43] Chaitin:" ... البرنامج "أنيق" ، أعني أنه أصغر برنامج ممكن لإنتاج المخرجات التي يقوم بها "[ 44]

يقدم Chaitin تعريفه بـ: "سأوضح أنك لا تستطيع إثبات أن البرنامج" أنيق "- مثل هذا الدليل سيحل مشكلة التوقف (المرجع نفسه).

الخوارزمية مقابل الوظيفة القابلة للحساب بواسطة خوارزمية: لوظيفة معينة قد توجد خوارزميات متعددة. هذا صحيح ، حتى بدون توسيع مجموعة التعليمات المتاحة المتاحة للمبرمج. يلاحظ روجرز أنه "من المهم. التمييز بين مفهوم الخوارزمية، أي الإجراء ومفهوم وظيفة قابلة للحساب بواسطة الخوارزمية، أي رسم الخرائط الناتجة عن الإجراء. قد يكون للوظيفة نفسها عدة خوارزميات مختلفة ". [45]

لسوء الحظ ، قد يكون هناك مفاضلة بين الجودة (السرعة) والأناقة (الاكتناز) - قد يستغرق البرنامج الأنيق خطوات أكثر لإكمال عملية حسابية أكثر من برنامج واحد أقل أناقة. يظهر أدناه مثال يستخدم خوارزمية إقليدس.

أجهزة الكمبيوتر (والمحاسبون) ، ونماذج الحساب: الكمبيوتر (أو "الكمبيوتر" البشري [46]) هو نوع مقيد من الآلات ، "جهاز ميكانيكي حتمي منفصل" [47] يتبع تعليماته بشكل أعمى. [48] ​​نماذج ميلزاك ولامبك البدائية [49] اختصرت هذه الفكرة إلى أربعة عناصر: (1) منفصلة ، ومميزة المواقع، (2) منفصلة ، لا يمكن تمييزها عدادات [50] (3) وكيل ، و (4) قائمة بالتعليمات فعال بالنسبة لقدرة الوكيل. [51]

يصف مينسكي تباينًا أكثر ملاءمة لنموذج "العداد" لامبيك في "أسس بسيطة جدًا للحساب". [52] تعمل آلة مينسكي بالتتابع من خلال تعليماتها الخمسة (أو الستة ، اعتمادًا على كيفية حساب المرء) ما لم يتغير تدفق البرنامج خارج التسلسل إذا كان هناك شرط IF-THEN GOTO أو GOTO غير المشروط. إلى جانب HALT ، تشتمل آلة مينسكي على ثلاثة تكليف (الاستبدال ، الاستبدال) [53] العمليات: صفر (على سبيل المثال ، تم استبدال محتويات الموقع بـ 0: L ← 0) ، SUCCESSOR (على سبيل المثال L ← L + 1) ، و DECREMENT (على سبيل المثال L ← L - 1). [54] نادرًا ما يتعين على المبرمج كتابة "رمز" بمجموعة تعليمات محدودة كهذه. لكن مينسكي أظهر (كما يفعل ميلزاك ولامبك) أن آلته تورينج كاملة بأربعة جنرالات فقط أنواع التعليمات: GOTO المشروط ، GOTO غير المشروط ، التنازل / الاستبدال / الاستبدال ، و HALT. ومع ذلك ، هناك بعض تعليمات التخصيص المختلفة (مثل DECREMENT ، INCREMENT ، و ZERO / CLEAR / EMPTY لآلة مينسكي) مطلوبة أيضًا من أجل اكتمال تورينج ، فإن مواصفاتها الدقيقة متروكة إلى حد ما للمصمم. GOTO غير المشروط هو راحة يمكن بناؤها عن طريق تهيئة موقع مخصص إلى الصفر ، على سبيل المثال التعليمات "Z ← 0" بعد ذلك التعليمات إذا كانت Z = 0 ثم GOTO xxx غير مشروطة.

محاكاة الخوارزمية: لغة الكمبيوتر (computor): ينصح Knuth القارئ بأن "أفضل طريقة لتعلم الخوارزمية هي تجربتها.. خذ على الفور القلم والورقة واعمل من خلال مثال". [55] ولكن ماذا عن محاكاة أو تنفيذ الشيء الحقيقي؟ يجب على المبرمج ترجمة الخوارزمية إلى لغة يستطيع المحاكي / الكمبيوتر / الكمبيوتر على نحو فعال نفذ - اعدم. يعطي Stone مثالاً على ذلك: عند حساب جذور المعادلة التربيعية ، يجب أن يعرف الحاسب كيفية أخذ الجذر التربيعي. إذا لم يفعلوا ذلك ، فلكي تكون الخوارزمية فعالة ، يجب أن توفر مجموعة من القواعد لاستخراج الجذر التربيعي. [56]

هذا يعني أن المبرمج يجب أن يعرف "لغة" فعالة بالنسبة لعامل الحوسبة الهدف (الكمبيوتر / الكمبيوتر).

لكن ما النموذج الذي يجب استخدامه في المحاكاة؟ يلاحظ فان إيمدي بواس "حتى لو أسسنا نظرية التعقيد على آلات مجردة بدلاً من الآلات الخرسانية ، فإن التعسف في اختيار النموذج لا يزال قائماً. وفي هذه المرحلة ، فإن فكرة محاكاة يدخل ". [57] عندما يتم قياس السرعة ، فإن مجموعة التعليمات مهمة. على سبيل المثال ، البرنامج الفرعي في خوارزمية إقليدس لحساب الباقي سينفذ بشكل أسرع إذا كان لدى المبرمج تعليمات" المعامل "المتاحة بدلاً من مجرد الطرح (أو أسوأ : فقط "إنقاص" مينسكي).

البرمجة المهيكلة ، الهياكل الأساسية: وفقًا لأطروحة الكنيسة - تورينج ، يمكن حساب أي خوارزمية بواسطة نموذج معروف بأنه تورينج كامل ، ووفقًا لمظاهرات مينسكي ، يتطلب تورينج الاكتمال أربعة أنواع فقط من التعليمات - GOTO المشروط ، GOTO غير المشروط ، التخصيص ، HALT. لاحظ Kemeny و Kurtz أنه في حين أن الاستخدام "غير المنضبط" لـ GOTOs غير المشروط و IF-THEN الشرطي يمكن أن يؤدي إلى "رمز معكرونة" ، يمكن للمبرمج كتابة برامج منظمة باستخدام هذه التعليمات فقط من ناحية أخرى "من الممكن أيضًا ، وليس من الصعب للغاية كتابة برامج سيئة التنظيم بلغة منظمة ". [58] يعزز Tausworthe الهياكل الأساسية الثلاثة لـ Böhm-Jacopini: [59] SEQUENCE ، IF-THEN-ELSE ، و WHILE-DO ، مع اثنين آخرين: DO-WHILE و CASE. [60] فائدة إضافية للبرنامج المنظم هي أنه يفسح المجال لإثباتات الصحة باستخدام الاستقراء الرياضي. [61]

رموز المخطط الانسيابي المتعارف عليه [62] : يوفر المساعد الرسومي المسمى مخطط التدفق ، طريقة لوصف وتوثيق خوارزمية (وبرنامج كمبيوتر واحد). مثل تدفق برنامج آلة مينسكي ، يبدأ مخطط التدفق دائمًا في أعلى الصفحة ويمضي إلى أسفل. رموزه الأساسية هي أربعة فقط: السهم الموجه الذي يوضح تدفق البرنامج ، والمستطيل (SEQUENCE ، GOTO) ، والماس (IF-THEN-ELSE) ، والنقطة (OR-tie). تتكون الهياكل الكنسية Böhm – Jacopini من هذه الأشكال البدائية. يمكن للبنى الفرعية أن "تتداخل" في المستطيلات ، ولكن فقط إذا حدث خروج واحد من البنية الفوقية. يوضح الرسم التخطيطي الرموز واستخدامها لبناء الهياكل الأساسية.

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

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

مستوى الوصف المرتفع:

  1. إذا لم تكن هناك أرقام في المجموعة ، فلا يوجد أعلى رقم.
  2. افترض أن الرقم الأول في المجموعة هو أكبر رقم في المجموعة.
  3. لكل رقم متبقي في المجموعة: إذا كان هذا الرقم أكبر من أكبر رقم حالي ، فاعتبر هذا الرقم هو أكبر رقم في المجموعة.
  4. في حالة عدم وجود أرقام متبقية في المجموعة لتكرارها مرة أخرى ، ضع في اعتبارك أن أكبر رقم حالي هو أكبر عدد في المجموعة.

(شبه) الوصف الرسمي: ما يلي مكتوب بالنثر ولكنه أقرب إلى اللغة عالية المستوى لبرنامج الكمبيوتر ، ما يلي هو الترميز الأكثر رسمية للخوارزمية في الشفرة الزائفة أو الشفرة المبسطة:

  • "←" يدل على التنازل. على سبيل المثال، "أكبرالعنصر"يعني أن قيمة أكبر التغييرات على قيمة العنصر.
  • "إرجاع"إنهاء الخوارزمية وإخراج القيمة التالية.

تحرير خوارزمية إقليدس

تظهر خوارزمية إقليدس لحساب القاسم المشترك الأكبر (GCD) لرقمين على أنها الاقتراح الثاني في الكتاب السابع ("نظرية الأعداد الأولية") من كتابه عناصر. [63] يطرح إقليدس المشكلة على النحو التالي: "إعطاء عددين غير أوليين لبعضهما البعض ، لإيجاد أكبر مقياس مشترك بينهما". يعرّف "عددًا [ليكون] عددًا متعددًا مكونًا من وحدات": رقم عد ، عدد صحيح موجب لا يشمل الصفر. "القياس" هو وضع طول قياس أقصر س على التوالي (ف مرات) بطول أطول ل حتى الجزء المتبقي ص أقل من الطول الأقصر س. [64] في الكلمات الحديثة ، الباقي ص = لف×س, ف كونه حاصل القسمة ، أو الباقي ص هو "المعامل" ، الجزء الصحيح - الكسري المتبقي بعد القسمة. [65]

لكي تنجح طريقة إقليدس ، يجب أن تفي أطوال البداية بمتطلبين: (1) يجب ألا تكون الأطوال صفراً ، و (2) يجب أن يكون الطرح "مناسبًا" ، أي يجب أن يضمن الاختبار طرح الرقم الأصغر من الرقمين من الأكبر (أو يمكن أن يتساوى الاثنان بحيث ينتج عن الطرح صفر).

يضيف دليل إقليدس الأصلي متطلبًا ثالثًا: يجب ألا يكون الطولان أوليًا لبعضهما البعض. نص إقليدس على ذلك حتى يتمكن من بناء دليل على أن المقياس المشترك للرقمين هو في الواقع أعظم. [66] في حين أن خوارزمية نيكوماخوس هي نفس خوارزمية إقليدس ، عندما تكون الأرقام أولية لبعضها البعض ، فإنها تنتج الرقم "1" للقياس المشترك. لذا ، على وجه الدقة ، ما يلي هو في الحقيقة خوارزمية نيكوماخوس.

لغة الكمبيوتر لتحرير خوارزمية إقليدس

فقط القليل من التعليمات أنواع مطلوب لتنفيذ خوارزمية إقليدس - بعض الاختبارات المنطقية (GOTO الشرطي) ، و GOTO غير المشروط ، والتعيين (الاستبدال) ، والطرح.

  • أ موقعك يرمز له بالحرف (الحروف) الكبيرة ، على سبيل المثال S ، A ، إلخ.
  • يتم كتابة الكمية (العدد) المتغيرة في موقع ما بحرف (أحرف) صغيرة و (عادةً) مرتبطة باسم الموقع. على سبيل المثال ، قد يحتوي الموقع L في البداية على الرقم ل = 3009.

برنامج غير أنيق لتحرير خوارزمية إقليدس

تم تأطير الخوارزمية التالية كنسخة Knuth المكونة من أربع خطوات من Euclid's و Nicomachus '، ولكن بدلاً من استخدام القسمة للعثور على الباقي ، فإنها تستخدم عمليات طرح متتالية من الطول الأقصر س من الطول المتبقي ص حتى ص اقل من س. الوصف عالي المستوى ، الموضح بخط عريض ، مقتبس من Knuth 1973: 2-4:

E0: [ضمان صس.]

E1: [بحث عن الباقي]: حتى الطول المتبقي ص في R أقل من الطول الأقصر س في S ، اطرح بشكل متكرر رقم القياس س في S من الطول المتبقي ص في R.

E2: [هل الباقي صفر؟]: إما (1) كان القياس الأخير دقيقًا ، والباقي في R هو صفر ، ويمكن للبرنامج أن يتوقف ، أو (2) يجب أن تستمر الخوارزمية: آخر قياس ترك الباقي في R أقل من قياس الرقم في S.

E3: [تبادل س و ص]: جوزة خوارزمية إقليدس. استخدم الباقي ص لقياس ما كان في السابق عددًا أصغر س يعمل L كموقع مؤقت.

برنامج أنيق لتحرير خوارزمية إقليدس

يتطلب الإصدار التالي من خوارزمية Euclid ستة تعليمات أساسية فقط للقيام بما هو مطلوب ثلاثة عشر للقيام به من خلال "Inelegant" الأسوأ ، و "Inelegant" يتطلب المزيد أنواع من التعليمات. [ يوضح ] يمكن العثور على مخطط "أنيق" في الجزء العلوي من هذه المقالة. في اللغة الأساسية (غير المهيكلة) ، يتم ترقيم الخطوات ، والتعليمات LET [] = [] هي تعليمات المهمة التي يرمز إليها ←.

كيف تعمل "أنيقة": بدلاً من "حلقة Euclid" الخارجية ، يتم تبديل "Elegant" ذهابًا وإيابًا بين "حلقتين مشتركتين" ، وحلقة A & gt B تحسب A ← A - B ، وحلقة B ≤ A التي تحسب B ← B - أ هذا يعمل لأنه ، عندما يكون الحد الأدنى M أقل من أو يساوي S (الفرق = Minuend - Subtrahend) ، يمكن أن يصبح minuend س (طول القياس الجديد) والمطروح يمكن أن يصبحا الجديد ص (الطول المراد قياسه) بعبارة أخرى "معنى" الطرح ينعكس.

يمكن استخدام الإصدار التالي مع لغات البرمجة من عائلة C:

اختبار تحرير خوارزميات إقليدس

هل تقوم الخوارزمية بما يريدها مؤلفها؟ عادةً ما تعطي بعض حالات الاختبار بعض الثقة في الوظيفة الأساسية. لكن الاختبارات ليست كافية. بالنسبة لحالات الاختبار ، يستخدم أحد المصادر [67] 3009 و 884. اقترح كنوث 40902 ، 24140. حالة أخرى مثيرة للاهتمام هي العددين الأوليين نسبيًا 14157 و 5950.

لكن "الحالات الاستثنائية" [68] يجب تحديدها واختبارها. هل سيعمل "Inelegant" بشكل صحيح عندما R & gt S، S & gt R، R = S؟ كما سبق لـ "Elegant": B & gt A و A & gt B و A = B؟ (نعم للكل). ماذا يحدث عندما يكون أحد الأعداد صفرًا وكلا العددين يساوي صفرًا؟ (يحسب "Inelegant" إلى الأبد في جميع الحالات "Elegant" يحسب إلى الأبد عندما تكون A = 0.) ماذا يحدث إذا نفي يتم إدخال الأرقام؟ الأعداد الكسرية؟ إذا كانت أرقام الإدخال ، أي مجال الوظيفة المحسوبة بواسطة الخوارزمية / البرنامج ، هي تضمين الأعداد الصحيحة الموجبة فقط بما في ذلك الصفر ، فإن الإخفاقات عند الصفر تشير إلى أن الخوارزمية (والبرنامج الذي ينشئها) هي وظيفة جزئية بدلاً من وظيفة كاملة. فشل ملحوظ بسبب الاستثناءات هو فشل صاروخ Ariane 5 Flight 501 (4 يونيو 1996).

إثبات صحة البرنامج باستخدام الاستقراء الرياضي: يوضح Knuth تطبيق الاستقراء الرياضي على نسخة "موسعة" من خوارزمية إقليدس ، ويقترح "طريقة عامة قابلة للتطبيق لإثبات صحة أي خوارزمية". [69] يقترح Tausworthe أن مقياس تعقيد البرنامج يكون بطول إثبات صحته. [70]

قياس وتحسين خوارزميات إقليدس تحرير

الأناقة (الاكتناز) مقابل الخير (السرعة): مع ستة تعليمات أساسية فقط ، يكون "Elegant" هو الفائز الواضح ، مقارنة بـ "Inelegant" في ثلاثة عشر تعليمات. ومع ذلك ، "غير أنيق" هو أسرع (تصل إلى HALT في خطوات أقل). يشير تحليل الخوارزمية [71] إلى سبب ذلك: "الأنيق" يفعل اثنين الاختبارات الشرطية في كل حلقة طرح ، بينما "Inelegant" تفعل واحدة فقط. نظرًا لأن الخوارزمية (عادةً) تتطلب العديد من الحلقات ، في المتوسط يضيع الكثير من الوقت في عمل "B = 0؟" الاختبار المطلوب فقط بعد حساب الباقي.

هل يمكن تحسين الخوارزميات؟: بمجرد أن يحكم المبرمج على برنامج "ملائم" و "فعال" - أي أنه يحسب الوظيفة التي يقصدها مؤلفه - ثم يصبح السؤال ، هل يمكن تحسينه؟

يمكن تحسين تماسك "Inelegant" بإلغاء خمس خطوات. لكن Chaitin أثبت أن ضغط الخوارزمية لا يمكن أن تتم آليته بواسطة خوارزمية معممة [72] بدلاً من ذلك ، يمكن القيام به فقط من خلال البحث الشامل (أمثلة يمكن العثور عليها في Busy beaver) والتجربة والخطأ والذكاء والبصيرة وتطبيق الاستدلال الاستقرائي ، إلخ. لاحظ أن الخطوات 4 و 5 و 6 تتكرر في الخطوات 11 و 12 و 13. تقدم المقارنة مع "أنيقة" تلميحًا إلى أنه يمكن التخلص من هذه الخطوات ، جنبًا إلى جنب مع الخطوتين 2 و 3. هذا يقلل من عدد التعليمات الأساسية من ثلاثة عشر إلى ثمانية ، مما يجعلها "أكثر أناقة" من "أنيقة" ، في تسع خطوات.

يمكن تحسين سرعة "Elegant" عن طريق تحريك "B = 0؟" اختبار خارج حلقتين الطرح. يتطلب هذا التغيير إضافة ثلاثة تعليمات (B = 0 ؟، A = 0 ؟، GOTO). الآن "أنيقة" تحسب أرقام الأمثلة بشكل أسرع سواء كان هذا هو الحال دائمًا لأي من A و B و R و S سيتطلب تحليلًا تفصيليًا.

غالبًا ما يكون من المهم معرفة مقدار مورد معين (مثل الوقت أو التخزين) المطلوب نظريًا لخوارزمية معينة. تم تطوير طرق لتحليل الخوارزميات للحصول على مثل هذه الإجابات الكمية (التقديرات) على سبيل المثال ، خوارزمية الفرز أعلاه لها متطلبات زمنية لـ O (ن) ، باستخدام تدوين O الكبير مع ن بطول القائمة.في جميع الأوقات ، تحتاج الخوارزمية فقط إلى تذكر قيمتين: أكبر رقم تم العثور عليه حتى الآن ، وموقعه الحالي في قائمة الإدخال. لذلك ، يقال أن لديها متطلبات مساحة يا (1)، إذا لم يتم حساب المساحة المطلوبة لتخزين أرقام الإدخال ، أو O (ن) إذا تم احتسابها.

قد تكمل الخوارزميات المختلفة نفس المهمة بمجموعة مختلفة من التعليمات في وقت أو مساحة أو "جهد" أقل أو أكثر من غيرها. على سبيل المثال ، تتفوق خوارزمية البحث الثنائي (بتكلفة O (log n)) على البحث المتسلسل (التكلفة O (n)) عند استخدامها لعمليات بحث الجدول في القوائم أو المصفوفات التي تم فرزها.

تحرير رسمي مقابل تجريبي

يعد تحليل ودراسة الخوارزميات أحد تخصصات علوم الكمبيوتر ، وغالبًا ما يتم ممارسته بشكل تجريدي دون استخدام لغة برمجة معينة أو تنفيذ. في هذا المعنى ، يشبه تحليل الخوارزمية التخصصات الرياضية الأخرى من حيث أنه يركز على الخصائص الأساسية للخوارزمية وليس على تفاصيل أي تنفيذ معين. عادة ما يتم استخدام الكود الكاذب للتحليل لأنه التمثيل الأبسط والأكثر عمومية. ومع ذلك ، في النهاية ، يتم تنفيذ معظم الخوارزميات عادةً على منصات أجهزة / برامج معينة ويتم في النهاية وضع كفاءتها الحسابية على المحك باستخدام كود حقيقي. لحل مشكلة "لمرة واحدة" ، قد لا يكون لفعالية خوارزمية معينة عواقب وخيمة (ما لم يكن n كبيرًا للغاية) ولكن بالنسبة للخوارزميات المصممة للاستخدام العلمي التفاعلي السريع أو التجاري أو طويل الأمد ، قد يكون الأمر بالغ الأهمية. يؤدي التحجيم من n صغير إلى n كبير إلى كشف خوارزميات غير فعالة تكون حميدة بخلاف ذلك.

يعد الاختبار التجريبي مفيدًا لأنه قد يكشف عن التفاعلات غير المتوقعة التي تؤثر على الأداء. يمكن استخدام المعايير للمقارنة قبل / بعد التحسينات المحتملة على الخوارزمية بعد تحسين البرنامج. لا يمكن للاختبارات التجريبية أن تحل محل التحليل الرسمي ، ومع ذلك ، فهي ليست تافهة في الأداء بطريقة عادلة. [73]

تحرير كفاءة التنفيذ

لتوضيح التحسينات المحتملة الممكنة حتى في الخوارزميات الراسخة ، يمكن لابتكار هام حديث ، يتعلق بخوارزميات FFT (المستخدمة بكثرة في مجال معالجة الصور) ، تقليل وقت المعالجة حتى 1000 مرة لتطبيقات مثل التصوير الطبي. [74] بشكل عام ، تعتمد تحسينات السرعة على الخصائص الخاصة للمشكلة ، والتي تكون شائعة جدًا في التطبيقات العملية. [75] تمكّن عمليات التسريع بهذا الحجم الأجهزة الحاسوبية التي تستخدم معالجة الصور على نطاق واسع (مثل الكاميرات الرقمية والمعدات الطبية) من استهلاك طاقة أقل.

هناك طرق مختلفة لتصنيف الخوارزميات ، ولكل منها مزاياها الخاصة.

بالتنفيذ تحرير

طريقة واحدة لتصنيف الخوارزميات هي من خلال وسائل التنفيذ.

حسب نموذج التصميم تحرير

طريقة أخرى لتصنيف الخوارزميات هي من خلال منهجية التصميم أو النموذج. هناك عدد معين من النماذج ، كل منها يختلف عن الآخر. علاوة على ذلك ، تتضمن كل فئة من هذه الفئات أنواعًا مختلفة من الخوارزميات. بعض النماذج الشائعة هي:

    إرجاع إجابة صحيحة باحتمالية عالية. على سبيل المثال RP هي فئة فرعية من هذه التي تعمل في وقت كثير الحدود. تُرجع دائمًا الإجابة الصحيحة ، لكن وقت تشغيلها مرتبط باحتمالية فقط ، على سبيل المثال ZPP.

مشاكل التحسين تحرير

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

البرمجة الخطية عند البحث عن الحلول المثلى لوظيفة خطية مرتبطة بقيود المساواة الخطية وعدم المساواة ، يمكن استخدام قيود المشكلة مباشرة في إنتاج الحلول المثلى. هناك خوارزميات يمكنها حل أي مشكلة في هذه الفئة ، مثل خوارزمية simplex الشائعة. [80] تتضمن المشكلات التي يمكن حلها بالبرمجة الخطية مشكلة التدفق الأقصى للرسوم البيانية الموجهة. إذا كانت هناك مشكلة تتطلب بالإضافة إلى ذلك أن واحد أو أكثر من المجهول يجب أن يكون عددًا صحيحًا ، فسيتم تصنيفها في برمجة عدد صحيح. يمكن لخوارزمية البرمجة الخطية أن تحل مثل هذه المشكلة إذا أمكن إثبات أن جميع القيود المفروضة على القيم الصحيحة سطحية ، أي أن الحلول تفي بهذه القيود على أي حال. في الحالة العامة ، يتم استخدام خوارزمية متخصصة أو خوارزمية تجد حلولًا تقريبية ، اعتمادًا على صعوبة المشكلة. البرمجة الديناميكية عندما تُظهر مشكلة بنية فرعية مثالية - بمعنى أنه يمكن بناء الحل الأمثل لمشكلة ما من الحلول المثلى للمشكلات الفرعية - وتداخل المشكلات الفرعية ، مما يعني استخدام المشكلات الفرعية نفسها لحل العديد من حالات المشكلات المختلفة ، يُطلق على نهج أسرع البرمجة الديناميكية يتجنب إعادة حساب الحلول التي تم حسابها بالفعل. على سبيل المثال ، خوارزمية Floyd-Warshall ، يمكن العثور على أقصر مسار لهدف من قمة في رسم بياني مرجح باستخدام أقصر مسار إلى الهدف من جميع الرؤوس المجاورة. البرمجة الديناميكية والحفظ يسيران معًا. يتمثل الاختلاف الرئيسي بين البرمجة الديناميكية و "فرق تسد" في أن المشكلات الفرعية مستقلة إلى حد ما في "فرق تسد" ، بينما تتداخل المشكلات الفرعية في البرمجة الديناميكية. يكمن الاختلاف بين البرمجة الديناميكية والتكرار المباشر في التخزين المؤقت أو حفظ المكالمات المتكررة. عندما تكون المشاكل الفرعية مستقلة ولا يوجد تكرار ، فإن الحفظ لا يساعد بالتالي البرمجة الديناميكية ليست حلاً لجميع المشاكل المعقدة. باستخدام الحفظ أو الاحتفاظ بجدول للمشكلات الفرعية التي تم حلها بالفعل ، تقلل البرمجة الديناميكية من الطبيعة الأسية للعديد من المشكلات إلى التعقيد متعدد الحدود. الطريقة الجشعة تشبه الخوارزمية الجشعة خوارزمية البرمجة الديناميكية من حيث أنها تعمل عن طريق فحص الهياكل الأساسية ، في هذه الحالة ليس للمشكلة ولكن لحل معين. تبدأ مثل هذه الخوارزميات ببعض الحلول ، والتي يمكن تقديمها أو تم إنشاؤها بطريقة ما ، وتحسينها عن طريق إجراء تعديلات صغيرة. بالنسبة لبعض المشكلات ، يمكنهم العثور على الحل الأمثل بينما يتوقف البعض الآخر عند المستوى المحلي ، أي عند الحلول التي لا يمكن تحسينها بواسطة الخوارزمية ولكنها ليست مثالية. الاستخدام الأكثر شيوعًا للخوارزميات الجشعة هو العثور على الحد الأدنى من الشجرة الممتدة حيث يكون إيجاد الحل الأمثل ممكنًا بهذه الطريقة. Huffman Tree و Kruskal و Prim و Sollin هي خوارزميات جشعة يمكنها حل مشكلة التحسين هذه. الطريقة التجريبية في مشاكل التحسين ، يمكن استخدام خوارزميات الكشف عن مجريات الأمور لإيجاد حل قريب من الحل الأمثل في الحالات التي يكون فيها إيجاد الحل الأمثل غير عملي. تعمل هذه الخوارزميات من خلال الاقتراب أكثر فأكثر من الحل الأمثل أثناء تقدمها. من حيث المبدأ ، إذا تم تشغيله لفترة غير محدودة من الوقت ، فسيجدون الحل الأمثل. ميزتهم هي أنه يمكنهم إيجاد حل قريب جدًا من الحل الأمثل في وقت قصير نسبيًا. تتضمن هذه الخوارزميات البحث المحلي ، والبحث المحظور ، والتليين المحاكى ، والخوارزميات الجينية. بعضها ، مثل التلدين المحاكى ، خوارزميات غير حتمية بينما البعض الآخر ، مثل بحث tabu ، حتمي. عندما يتم معرفة الحد من خطأ الحل غير الأمثل ، يتم تصنيف الخوارزمية أيضًا على أنها خوارزمية تقريبية.

حسب مجال الدراسة Edit

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

حسب التعقيد تحرير

يمكن تصنيف الخوارزميات حسب مقدار الوقت الذي تحتاجه لإكماله مقارنة بحجم إدخالها:

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

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

يمكن أن تعني صفة "مستمر" عند تطبيقها على كلمة "خوارزمية":

  • خوارزمية تعمل على البيانات التي تمثل كميات مستمرة ، على الرغم من أن هذه البيانات يتم تمثيلها بتقديرات منفصلة - تتم دراسة هذه الخوارزميات في التحليل العددي أو
  • خوارزمية في شكل معادلة تفاضلية تعمل باستمرار على البيانات ، وتعمل على جهاز كمبيوتر تمثيلي. [81]

الخوارزميات ، في حد ذاتها ، ليست عادة قابلة للحماية ببراءة اختراع. في الولايات المتحدة ، لا يشكل الادعاء الذي يتكون فقط من التلاعب البسيط بالمفاهيم المجردة أو الأرقام أو الإشارات "عمليات" (USPTO 2006) ، وبالتالي لا يمكن الحصول على براءة اختراع الخوارزميات (كما في Gottschalk ضد Benson). ومع ذلك ، فإن التطبيقات العملية للخوارزميات تكون في بعض الأحيان قابلة للحماية ببراءة. على سبيل المثال ، في Diamond v. Diehr ، تم اعتبار تطبيق خوارزمية ردود الفعل البسيطة للمساعدة في معالجة المطاط الصناعي حاصلًا على براءة اختراع. تعد براءات الاختراع الخاصة بالبرمجيات مثيرة للجدل إلى حد كبير ، وهناك انتقادات شديدة لبراءات الاختراع التي تنطوي على الخوارزميات ، وخاصة خوارزميات ضغط البيانات ، مثل براءة اختراع Unisys LZW.

بالإضافة إلى ذلك ، فإن بعض خوارزميات التشفير لها قيود على التصدير (انظر تصدير التشفير).

تحرير الشرق الأدنى القديم

تم العثور على أقدم دليل على الخوارزميات في الرياضيات البابلية لبلاد ما بين النهرين القديمة (العراق الحديث). وصف لوح طيني سومري عثر عليه في شروباك بالقرب من بغداد ويرجع تاريخه إلى حوالي 2500 قبل الميلاد ، خوارزمية التقسيم الأولى. [12] خلال عهد أسرة حمورابي حوالي 1800-1600 قبل الميلاد ، وصفت الألواح الطينية البابلية خوارزميات لحساب الصيغ. [82] كما تم استخدام الخوارزميات في علم الفلك البابلي. تصف الألواح الطينية البابلية الإجراءات الحسابية وتوظفها لحساب وقت ومكان الأحداث الفلكية المهمة. [83]

تم العثور على خوارزميات الحساب أيضًا في الرياضيات المصرية القديمة ، والتي يعود تاريخها إلى بردية Rhind الرياضية حوالي 1550 قبل الميلاد. [12] تم استخدام الخوارزميات لاحقًا في الرياضيات الهلنستية القديمة. مثالان هما منخل إراتوستينس ، الذي تم وصفه في مقدمة في الحساب بواسطة Nicomachus ، [84] [14]: الفصل 9.2 والخوارزمية الإقليدية ، والتي تم وصفها لأول مرة في عناصر إقليدس (ج 300 قبل الميلاد). [14]: الفصل 9.1

رموز منفصلة ومميزة تحرير

علامات الفرز: لتتبع قطعانهم وأكياسهم من الحبوب وأموالهم ، استخدم القدماء الفرز: تراكم الأحجار أو العلامات المخدوشة على العصي أو عمل رموز منفصلة في الطين. من خلال الاستخدام البابلي والمصري للعلامات والرموز ، تطورت الأرقام الرومانية والمعداد في النهاية (Dilson ، ص 16-41). تظهر علامات العد بشكل بارز في حساب نظام العد الأحادي المستخدم في حسابات آلة تورينج وحسابات آلة تورينج اللاحقة.

التلاعب بالرموز كـ "مواضع" للأرقام: تحرير الجبر

كتب محمد بن موسى الخوارزمي عالم رياضيات فارسي الجبر في القرن التاسع. اشتق المصطلحان "ألجوريسم" و "الخوارزمية" من اسم الخوارزمي ، بينما اشتق مصطلح "الجبر" من الكتاب. الجبر. في أوروبا ، تم استخدام كلمة "الخوارزمية" في الأصل للإشارة إلى مجموعات القواعد والتقنيات التي استخدمها الخوارزمي لحل المعادلات الجبرية ، قبل أن يتم تعميمها لاحقًا للإشارة إلى أي مجموعة من القواعد أو التقنيات. [85] بلغ هذا ذروته في نهاية المطاف في فكرة لايبنيز لمعدل حساب التفاضل والتكامل (حوالي 1680):

قبل قرن ونصف من وقته ، اقترح لايبنيز جبرًا للمنطق ، وهو جبر من شأنه أن يحدد قواعد معالجة المفاهيم المنطقية بالطريقة التي يحدد بها الجبر العادي قواعد معالجة الأرقام. [86]

تحرير خوارزميات التشفير

تم تطوير أول خوارزمية تشفير لفك تشفير الشفرة بواسطة الكندي ، عالم رياضيات عربي من القرن التاسع ، في مخطوطة عن فك رموز رسائل التشفير. قدم أول وصف لتحليل الشفرات عن طريق تحليل التردد ، وهو أقدم خوارزمية لفصل الشفرات. [15]

اختراعات ميكانيكية مع حالات منفصلة

الساعة: ينسب بولتر الفضل إلى اختراع الساعة التي تعمل بالوزن باعتباره "الاختراع الرئيسي [لأوروبا في العصور الوسطى]" ، على وجه الخصوص ، ميزان حافة [87] الذي يزودنا بعلامة وعلامة الساعة الميكانيكية. أدت "الآلة الأوتوماتيكية الدقيقة" [88] على الفور إلى "آلات ميكانيكية" بداية من القرن الثالث عشر وأخيراً إلى "آلات حسابية" - محرك الفرق والمحركات التحليلية لتشارلز باباج والكونتيسة أدا لوفليس ، منتصف القرن التاسع عشر. [89] يرجع الفضل إلى Lovelace في الإنشاء الأول لخوارزمية مخصصة للمعالجة على الكمبيوتر - محرك باباج التحليلي ، الجهاز الأول يعتبر كمبيوترًا حقيقيًا كاملًا من Turing بدلاً من مجرد آلة حاسبة - ويسمى أحيانًا "مبرمج التاريخ الأول" نتيجة لذلك ، على الرغم من أن التطبيق الكامل لجهاز باباج الثاني لن يتحقق إلا بعد عقود من حياتها.

الآلات المنطقية 1870 - "العداد المنطقي" و "الآلة المنطقية" لستانلي جيفونز: كانت المشكلة التقنية هي تقليل المعادلات المنطقية عند تقديمها في شكل مشابه لما يعرف الآن باسم خرائط Karnaugh. يصف Jevons (1880) أولاً "العداد" البسيط من "زلات الخشب المزودة بدبابيس ، والمصنعة بحيث يمكن انتقاء أي جزء أو فئة من المجموعات [المنطقية] ميكانيكيًا. ولكن في الآونة الأخيرة ، قمت بتقليل النظام إلى شكلًا ميكانيكيًا تمامًا ، وبالتالي فقد جسّد كل عملية الاستدلال غير المباشرة فيما يمكن تسميته a آلة منطقية"جاءت آليته مزودة" ببعض القضبان الخشبية المتحركة "و" يوجد 21 مفتاحًا عند القدم مثل تلك الموجودة في البيانو [إلخ]. باستخدام هذه الآلة يمكنه تحليل "القياس المنطقي أو أي حجة منطقية بسيطة أخرى".

عرض هذه الآلة عام 1870 أمام زملاء الجمعية الملكية. [91] منطق آخر جون فين ، مع ذلك ، في عام 1881 المنطق الرمزي، لفت انتباهي إلى هذا الجهد: "ليس لدي تقدير كبير لاهتمام أو أهمية ما يسمى أحيانًا بالآلات المنطقية. لا يبدو لي أن أي أدوات حيلة معروفة حاليًا أو من المحتمل اكتشافها تستحق حقًا الاسم من الآلات المنطقية "انظر المزيد في توصيفات الخوارزمية. ولكن حتى لا يتم التفوق عليه ، قدم هو أيضًا "خطة مشابهة إلى حد ما ، كما فهمت ، للبروفيسور جيفون طبلية تاج . [و] [أ] الكسب ، المقابل للآلة المنطقية للبروفيسور جيفونز ، يمكن وصف الاختلاف التالي. أفضل أن أسميها مجرد آلة رسم تخطيطي منطقي. لكني أفترض أنها يمكن أن تفعل كل ما يمكن توقعه بعقلانية من أي آلة منطقية ". [92]

نول جاكار ، بطاقات ثقب هوليريث ، تلغراف وهاتف - التتابع الكهروميكانيكي: يشير Bell and Newell (1971) إلى أن Jacquard loom (1801) ، مقدمة لبطاقات Hollerith (البطاقات المثقبة ، 1887) ، و "تقنيات تبديل الهاتف" كانت جذور شجرة أدت إلى تطوير أجهزة الكمبيوتر الأولى. [93] بحلول منتصف القرن التاسع عشر ، كان التلغراف ، وهو مقدمة الهاتف ، مستخدمًا في جميع أنحاء العالم ، وكان ترميزه المنفصل والمميز للحروف على أنه "نقاط وشرطات" صوتًا شائعًا. بحلول أواخر القرن التاسع عشر ، كان شريط الشريط (حوالي 1870) قيد الاستخدام ، كما كان استخدام بطاقات هوليريث في تعداد الولايات المتحدة لعام 1890. ثم جاءت الطابعة عن بعد (حوالي 1910) باستخدام الورق المثقوب لرمز Baudot على الشريط.

شبكات تحويل الهاتف من المرحلات الكهروميكانيكية (اخترع 1835) كان وراء عمل جورج ستيبيتز (1937) ، مخترع جهاز الإضافة الرقمية. أثناء عمله في مختبرات بيل ، لاحظ الاستخدام "المرهق" للآلات الحاسبة الميكانيكية مع التروس. "ذهب إلى منزله ذات مساء في عام 1937 وهو يعتزم اختبار فكرته. عندما انتهت عملية الإصلاح ، كان Stibitz قد أنشأ جهاز إضافة ثنائي ".

يلاحظ ديفيس (2000) الأهمية الخاصة للتتابع الكهروميكانيكي (مع "حالتيه الثنائيتين" افتح و مغلق):

فقط مع تطوير الآلات الحاسبة الكهروميكانيكية باستخدام المرحلات الكهربائية ، بدءًا من الثلاثينيات ، تم بناء الآلات بالنطاق الذي تصوره باباج ".

الرياضيات خلال القرن التاسع عشر حتى منتصف القرن العشرين

الرموز والقواعد: في تتابع سريع ، اختزلت رياضيات جورج بول (1847 ، 1854) وجوتلوب فريج (1879) وجوزيبي بينو (1888-1889) الحساب إلى سلسلة من الرموز التي تتلاعب بها القواعد. بينو مبادئ الحساب ، مقدمة بطريقة جديدة (1888) كانت "المحاولة الأولى لإضفاء البديهية على الرياضيات بلغة رمزية". [96]

لكن Heijenoort يعطي Frege (1879) هذا الشهرة: Frege هو "ربما أهم عمل منفرد كتب على الإطلاق في المنطق.. حيث نرى" "لغة معادلة" ، أي لغة الأحرف، لغة مكتوبة برموز خاصة ، "للفكر الخالص" ، أي خالية من الزخارف البلاغية. مبني من رموز محددة يتم التلاعب بها وفقًا لقواعد محددة ". [97] تم تبسيط عمل فريجه وتضخيمه من قبل ألفريد نورث وايتهيد وبرتراند راسل في كتابهم Principia Mathematica (1910-1913).

المفارقات: في الوقت نفسه ، ظهر عدد من المفارقات المزعجة في الأدبيات ، ولا سيما مفارقة بورالي فورتي (1897) ، ومفارقة راسل (1902–03) ، ومفارقة ريتشارد. [98] أدت الاعتبارات الناتجة إلى بحث كيرت جودل (1931) - حيث يستشهد على وجه التحديد بمفارقة الكذاب - التي تقلل تمامًا من قواعد التكرار إلى أرقام.

حساب فعال: في محاولة لحل مشكلة Entscheidungsproblem التي حددها هيلبرت بدقة في عام 1928 ، شرع علماء الرياضيات أولاً في تحديد المقصود بـ "الطريقة الفعالة" أو "الحساب الفعال" أو "الحساب الفعال" (أي الحساب الذي سينجح). في تعاقب سريع ظهر ما يلي: ألونزو تشيرش وستيفن كلاين وجي بي روسر حساب التفاضل والتكامل [99] تعريف دقيق لـ "العودية العامة" من عمل جودل بناءً على اقتراحات جاك هيربراند (راجع محاضرات برينستون لجودل عام 1934) والتبسيط اللاحق بواسطة Kleene.[100] دليل الكنيسة [101] على أن Entscheidungsproblem كان غير قابل للحل ، تعريف Emil Post للإمكانية الحسابية الفعالة كعامل يتبع بلا تفكير قائمة بالتعليمات للتحرك يسارًا أو يمينًا من خلال سلسلة من الغرف وأثناء وجود علامة أو مسح ورقة أو ملاحظة الورقة واتخاذ قرار بنعم - لا بشأن التعليمات التالية. [102] دليل آلان تورينج على أن Entscheidungsproblem كان غير قابل للحل عن طريق استخدام "آليته" [103] - في تأثير مماثل تقريبًا لـ "صياغة" Post ، تعريف J.Barkley Rosser لـ "الطريقة الفعالة" في شروط "آلة". [104] اقتراح كلاين تمهيدًا لـ "أطروحة الكنيسة" التي أطلق عليها "الرسالة الأولى" ، [105] وبعد ذلك ببضع سنوات أعاد كلاين تسمية أطروحته "أطروحة الكنيسة" [106] ويقترح "أطروحة تورينج". [107]

Emil Post (1936) و Alan Turing (1936–37 ، 1939) تحرير

وصف Emil Post (1936) تصرفات "الكمبيوتر" (الإنسان) على النحو التالي:

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

ستكون مساحة رمزه

"تسلسل لانهائي ثنائي الاتجاه من المساحات أو المربعات. إن حل المشكلة أو العامل هو التحرك والعمل في مساحة الرمز هذه ، والقدرة على التواجد والعمل في مربع واحد فقط في كل مرة. يجب الاعتراف بالمربع ولكن هناك شرطان محتملان ، على سبيل المثال ، أن تكون فارغًا أو غير محدد ، وبداخله علامة واحدة ، قل ضربة رأسية. "يجب تحديد مربع واحد وتسمى نقطة البداية. . يجب إعطاء مشكلة معينة في شكل رمزي من خلال عدد محدود من المربعات [أي INPUT] التي يتم تمييزها بضربة. وبالمثل ، يجب إعطاء الإجابة [أي الإخراج] بشكل رمزي من خلال هذا التكوين للمربعات المميزة. "تُنشئ مجموعة من الاتجاهات التي تنطبق على مشكلة عامة عملية حتمية عند تطبيقها على كل مشكلة محددة. ولا تنتهي هذه العملية إلا عندما يتعلق الأمر باتجاه النوع (C) [أي STOP]". [108] شاهد المزيد في آلة Post – Turing

سبق عمل آلان تورينج [109] عمل ستيبيتز (1937) ومن غير المعروف ما إذا كان ستيبيتز على علم بعمل تورينج. اعتقد كاتب سيرة تورينج أن استخدام تورينج لنموذج يشبه الآلة الكاتبة مشتق من اهتمام الشباب: "كان آلان يحلم باختراع آلات كاتبة عندما كان صبيًا ، كان لدى السيدة تورينج آلة كاتبة ، وكان من الممكن أن يبدأ بسؤال نفسه ما هو المقصود بالاتصال بـ آلة كاتبة "ميكانيكية" ". [110] نظرًا لانتشار كود مورس والتلغراف ، وآلات أشرطة التسجيل ، وآلات الكتابة عن بعد ، فإننا [ من الذى؟ ] قد تخمن أن جميعها كانت مؤثرات.

يبدأ تورينج — الذي يُطلق عليه الآن نموذج الحساب الخاص به بآلة تورينج — ، كما فعل بوست ، بتحليل جهاز كمبيوتر بشري يختصره إلى مجموعة بسيطة من الحركات الأساسية و "الحالات الذهنية". لكنه يواصل خطوة إلى الأمام ويخلق آلة كنموذج لحساب الأرقام. [111]

"تتم الحوسبة عادةً عن طريق كتابة رموز معينة على الورق. قد نفترض أن هذه الورقة مقسمة إلى مربعات مثل كتاب الحساب للطفل. أفترض بعد ذلك أن الحساب يتم على ورق أحادي البعد ، أي على شريط مقسم إلى مربعات سوف أفترض أيضًا أن عدد الرموز التي يمكن طباعتها هو عدد محدود. "يتم تحديد سلوك الكمبيوتر في أي لحظة من خلال الرموز التي يراقبها ، و" حالته الذهنية "في تلك اللحظة. قد نفترض أن هناك B مرتبطًا بعدد الرموز أو المربعات التي يمكن للكمبيوتر مراقبتها في لحظة واحدة. إذا رغب في مراقبة المزيد ، فعليه استخدام الملاحظات المتتالية. سوف نفترض أيضًا أن عدد الحالات الذهنية التي يجب أخذها في الاعتبار هو عدد محدود. "دعونا نتخيل أن العمليات التي يقوم بها الكمبيوتر سيتم تقسيمها إلى" عمليات بسيطة "بدائية للغاية بحيث يصعب تخيل تقسيمها بشكل أكبر." [112]

ينتج عن تخفيض تورينج ما يلي:

"يجب أن تتضمن العمليات البسيطة بالتالي:" (أ) تغييرات الرمز في أحد المربعات المرصودة "(ب) التغييرات في أحد المربعات التي تمت ملاحظتها إلى مربع آخر داخل مربعات L لإحدى المربعات التي تمت ملاحظتها سابقًا.

"قد تكون بعض هذه التغييرات تستدعي بالضرورة تغييرًا في الحالة الذهنية. ولذلك ، يجب اعتبار العملية الفردية الأكثر عمومية واحدة مما يلي:

"(أ) تغيير محتمل (أ) للرمز مع تغيير محتمل للحالة الذهنية." (ب) تغيير محتمل (ب) للمربعات المرصودة ، جنبًا إلى جنب مع تغيير محتمل للحالة الذهنية "" يمكننا الآن بناء آلة للقيام بعمل هذا الكمبيوتر ". [112]

بعد بضع سنوات ، وسع تورينج تحليله (الأطروحة ، التعريف) بهذا التعبير القوي عنه:

"يُقال إن الوظيفة" قابلة للحساب بشكل فعال "إذا كان من الممكن العثور على قيمها من خلال عملية ميكانيكية بحتة. وعلى الرغم من أنه من السهل إلى حد ما الحصول على فهم بديهي لهذه الفكرة ، فمن المستحسن مع ذلك الحصول على تعريف رياضي أكثر تحديدًا معبرًا . [يناقش تاريخ التعريف إلى حد كبير كما هو مذكور أعلاه فيما يتعلق بـ Gödel و Herbrand و Kleene و Church و Turing و Post]. قد نأخذ هذا البيان حرفيًا ، فهمًا من خلال عملية ميكانيكية بحتة يمكن تنفيذها بواسطة آلة. من الممكن إعطاء وصف رياضي ، في شكل طبيعي معين ، لهياكل هذه الآلات. يؤدي تطوير هذه الأفكار إلى تعريف المؤلف لوظيفة قابلة للحساب ، وإلى تحديد القدرة الحسابية † مع فعالية القابلية للحساب. "† سنستخدم تعبير" دالة قابلة للحساب "ليعني دالة يمكن حسابها بواسطة آلة ، ونترك عبارة" قابلة للحساب بشكل فعال "تشير إلى الفكرة البديهية بدون جزء تحديد هوية مع أي واحد من هذه التعريفات ". [113]

JB Rosser (1939) و SC Kleene (1943) تحرير

عرّف جيه باركلي روسر "طريقة [رياضية] فعالة" بالطريقة التالية (تمت إضافة الخط المائل):

يتم استخدام "الطريقة الفعالة" هنا بمعنى خاص إلى حد ما للطريقة التي يتم تحديد كل خطوة منها بدقة والتي من المؤكد أنها ستنتج الإجابة في عدد محدود من الخطوات. بهذا المعنى الخاص ، تم إعطاء ثلاثة تعريفات دقيقة مختلفة حتى الآن. [حاشيته رقم 5 انظر المناقشة أدناه مباشرة]. أبسط من هذه الحالات (بسبب Post و Turing) يقول بشكل أساسي أن توجد طريقة فعالة لحل مجموعات معينة من المشكلات إذا كان بإمكان المرء بناء آلة ستحل بعد ذلك أي مشكلة في المجموعة دون تدخل بشري بعد إدخال السؤال و (لاحقًا) قراءة الإجابة. جميع التعريفات الثلاثة متكافئة ، لذلك لا يهم أي منها يتم استخدامه. علاوة على ذلك ، فإن حقيقة أن الثلاثة متساوون هي حجة قوية جدًا لصحة أي شخص ". (روسر 1939: 225-226)

تشير حاشية روسر رقم 5 إلى عمل (1) تشرش وكلين وتعريفهما لقابلية تعريف λ ، ولا سيما استخدام الكنيسة لها في كتابه. مشكلة غير قابلة للحل في نظرية الأعداد الأولية (1936) (2) هيربراند وجودل واستخدامهما للتكرار على وجه الخصوص استخدام جوديل في ورقته الشهيرة حول الاقتراحات غير القابلة للتقرير رسميًا الخاصة بـ Principia Mathematica والأنظمة ذات الصلة 1 (1931) و (3) Post (1936) و Turing (1936-1937) في نماذجهما الآلية للحساب.

عرّف ستيفن كلين بأنه "أطروحته الأولى" المعروفة الآن باسم أطروحة الكنيسة - تورينغ. لكنه فعل ذلك في السياق التالي (بخط عريض في الأصل):

"12. نظريات الخوارزمية. عند إعداد نظرية خوارزمية كاملة ، ما نقوم به هو وصف إجراء ، يمكن تنفيذه لكل مجموعة من قيم المتغيرات المستقلة ، والتي تنتهي بالضرورة الإجراء وبهذه الطريقة يمكننا من النتيجة قراءة إجابة محددة ، "نعم" أو "لا" للسؤال "هل القيمة الأصلية صحيحة؟" (Kleene 1943: 273)

التاريخ بعد عام 1950 تحرير

تم توجيه عدد من الجهود نحو مزيد من التنقيح لتعريف "الخوارزمية" ، والنشاط مستمر بسبب القضايا المحيطة ، على وجه الخصوص ، بأسس الرياضيات (خاصة أطروحة الكنيسة - تورينج) وفلسفة العقل (خاصة الحجج حول الذكاء الاصطناعي). لمزيد من المعلومات ، انظر توصيفات الخوارزمية.


يجب أن تكون digitalWrite (ledPin1 = HIGH) كتابة رقمية (ledPin1 ، عالية)

PS if ((x = LOW) & amp & amp (y = LOW) & amp & amp (z = LOW)) يجب أن تكون if ((x == LOW) & amp & amp (y == LOW) & amp & amp (z == LOW)). = للتعيين ، == للمقارنة.

بصرف النظر عن مسألة الحاجة إلى == بدلاً من = أنت لست أبدًا قراءة تلك الدبابيس. في الحقيقة أنت تقارن الدبوس أعداد (التي لن تتغير أبدًا) ، وليس البيانات الموجودة على تلك الدبابيس.

هذا خطأ أيضًا ، لقد فوجئت أنه تم تجميعه:

عندما أستخدم الكتابة الرقمية ، أحصل على رمز خطأ يفيد بوجود عدد قليل جدًا من الحجج. . أنا فقط لا أعرف لماذا لا يزال برنامج المحاكاة لا يضيء LED

أوه ، لقد فعلت ليس تجميع. لا عجب أن المصابيح لم تعمل.

إليك نصيحة صغيرة لك (لا علاقة لها بمشكلتك ، إنها مجرد طريقة برمجة جيدة). سيؤدي ذلك إلى تقليل حجم البرنامج بشكل كبير.

لديك ثلاثة متغيرات الحالة المنطقية ، وأنت تقارن حالة جميع التوليفات - أي 8 مجموعات. إذا أخذت كل قيمة منطقية على أنها 1 بت من قيمة بين 0 و 7 - هذه هي القيم (كثنائي) 000 ، 001 ، 010 ، 011 ، 100 ، 101 ، 110 ، و 111 - عندها يمكنك استخدام طرق أبسط بكثير للتحكم المصابيح الخاصة بك.

على سبيل المثال ، هذا الكود (غير المختبَر) سيحول ثلاث قراءات رقمية إلى رقم واحد بين 0 و 7:

x هي البتة الأقل دلالة ، و z هي البتة الأكثر دلالة. لذلك ستكون القيمة الآن قيمة بين 0 و 7 تمثل حالة تلك الدبابيس الثلاثة.

يمكنك الآن استخدام متغير القيمة هذا لتحديد الدبوس الذي تريد تشغيله. إليك خدعة أخرى: قم بتخزين دبابيس LED كمصفوفة. هذا يعني أنه بدلاً من استخدام ledPin1 و ledPin2 وما إلى ذلك ، لديك فقط قائمة بأرقام التعريف الشخصي المعروفة باسم ledPin [x]:

يمكنك الآن استخدام حلقة for للتكرار خلال تلك القائمة وتشغيل مؤشر LED الذي تريده:

في الواقع ، يمكن ضغط ذلك بشكل أكبر ، نظرًا لأن HIGH و LOW هما أساسًا قيم حقيقية (HIGH هي 1 ، أو true ، و LOW تساوي 0 ، أو خطأ):

لذلك يمكن أن يبدو برنامجك بالكامل كما يلي:

يوفر قدرًا هائلاً من الكتابة وينتهي أيضًا باستخدام ذاكرة فلاش أقل بكثير.


أخيرًا ، بالنسبة إلى كتّاب الحزم (ليس مؤلفو المستندات حقًا): يوفر expl3 كجزء من LaTeX3 وحدات منطقية يمكن استخدامها بكل أنواع الطرق المثيرة للاهتمام. للاستخدام الأساسي ، تبدو كالتالي:

يمكنك استخدام المنطق المنطقي على النحو التالي:

كل شيء قابل للتوسيع ويتم استخدام التقييم البطيء لتجنب إجراء الاختبارات التي لا تحتاج إلى الفحص.

يمكنك أيضًا دمج المتغيرات المنطقية أعلاه مع الدوال الشرطية مثل cs_if_eq_p: NN ("هل تسلسلان تحكم متساويان؟") والتي يمكن اختبارها بنفس الطريقة تمامًا:

يظهر التداخل بين etoolbox و expl3 هنا إلى حد ما ، وأعتقد أن الفرق بين الاثنين هو الفصل بين مؤلفي المستندات (لـ etoolbox) وكتّاب الحزم (لـ expl3). لكنها مسألة ذوق بحتة ، عندما يتعلق الأمر بها.


شاهد الفيديو: QGIS-GRASS: Raster distance functions