خوارزمية

في الرياضيات وعلوم الكمبيوتر ، الخوارزمية AL-gə-ridh-əm هي مواصفات لا لبس فيها لكيفية حل فئة من المشاكل. يمكن الخوارزميات إجراء الحسابات ومعالجة البيانات ومهام التفكير الآلي.

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

يوجد مفهوم الخوارزمية لعدة قرون ، ويمكن إرجاع هذا المفهوم إلى علماء الرياضيات اليونانيين ، مثل غربال إيراتوستينس وخوارزمية إقليدس ؛ خوارزمية المصطلح نفسه مستمد من عالم الرياضيات في القرن التاسع محمد بن موسى الخوارزمي ، “Algoritmi” اللاتيني. بدأ إضفاء طابع جزئي على ما يمكن أن يصبح المفهوم الحديث للخوارزمية بمحاولات حل مشكلة الاقتراب (“مشكلة القرار”) التي طرحها ديفيد هيلبرت في عام 1928. تم تأطير التصورات اللاحقة كمحاولات لتحديد “القدرة الفعلية على الحساب” أو “الطريقة الفعالة”. . تضمنت تلك التعديليات الوظائف التعودية لجودل هربراند كلين 1930 و 1934 و 1935 ، وحساب لامدا في 1936 ، و Emil Post’s صياغة 1 لعام 1936 ، وآلات تورينج ألان تورينج 1936–197 و 1939.

بسط و علل
كلمة “خوارزمية” لها جذورها في تدجين اسم محمد بن موسى الخوارزمي في خطوة أولى إلى algorismus. الخوارزمي (الفارسي: خوارزمی ، ج. 780-850) كان عالمًا فارسيًا في الرياضيات وفلكيًا وجغرافيًا وباحثًا في بيت الحكمة ببغداد ، ويعني اسمه “مواطنًا من خوارزم” ، وهي منطقة كانت جزءًا من إيران الكبرى وهي الآن في أوزبكستان.

حوالي 825 ، كتب الخوارزمي أطروحة اللغة العربية على نظام الأرقام الهندوسية العربية ، والتي ترجمت إلى اللاتينية خلال القرن الثاني عشر تحت عنوان Algoritmi de numero Indorum. هذا العنوان يعني “Algoritmi على أعداد الهنود” ، حيث “Algoritmi” كان لاتيني المترجم لاسم الخوارزمي. كان الخوارزمي أقرأ عالم الرياضيات على نطاق واسع في أوروبا في أواخر العصور الوسطى ، في المقام الأول من خلال آخر من كتبه ، الجبر. في أواخر القرون الوسطى اللاتينية ، algorismus ، “algorism” الإنجليزية ، والفساد من اسمه ، يعني ببساطة “نظام الأرقام العشرية”. في القرن الخامس عشر ، تحت تأثير الكلمة اليونانية ἀριθμός ‘number’ (cf. ‘arithmetic’) ، تم تغيير الكلمة اللاتينية إلى خوارزمية ، و “خوارزمية” المصطلح الإنجليزي المطابق تم إثباته لأول مرة في القرن السابع عشر. تم إدخال المعنى الحديث في القرن التاسع عشر.

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

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

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

التي تترجم على النحو التالي:

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

القصيدة عبارة عن بضع مئات من الخطوط الطويلة وتلخص فن الحساب بأسلوب جديد من النرد الهندي ، أو الطالب الفلبيني ، أو الأرقام الهندوسية.

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

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

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

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

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

تعليمات دقيقة (بلغة يفهمها “الكمبيوتر”) لعملية سريعة وفعالة “جيدة” تحدد “التحركات” الخاصة بـ “الكمبيوتر” (آلة أو بشرية ، مزودة بالمعلومات والقدرات الضرورية الداخلية) للعثور على ، ثم فك تشفير ، ثم معالجة الأعداد الصحيحة للإعدادات / الرموز التعسفية m و n ، والرموز + و = … و “فعال” ، في وقت “معقول” ، والإخراج الصحيح y في مكان محدد وبتنسيق محدد.
يستخدم مفهوم الخوارزمية أيضًا لتحديد مفهوم قابلية التأشير. هذه الفكرة أساسية لتفسير كيف تنشأ الأنظمة الرسمية من مجموعة صغيرة من البديهيات والقواعد. في المنطق ، لا يمكن قياس الوقت الذي تتطلبه الخوارزمية ، لأنه لا يرتبط على ما يبدو ببعدنا المادي المعتاد. من هذه الشكوك ، التي تميز العمل المستمر ، ينبع عدم توافر تعريف الخوارزمية التي تلائم كل من الخرسانة (بمعنى ما) والاستخدام المجرد للمصطلح.

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

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

Gurevich: “… حجة تورينج غير الرسمية لصالح أطروحته تبرر فرضية أقوى: يمكن محاكاة كل خوارزمية بواسطة آلة Turing … وفقًا لـ Savage [1987] ، الخوارزمية هي عملية حسابية محددة بواسطة آلة Turing” .

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

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

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

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

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

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

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

يمكن تصنيف تصورات الخوارزميات إلى ثلاثة مستويات مقبولة لوصف آلة تورينج:

1 وصف رفيع المستوى
“… نثر لوصف خوارزمية ، تجاهل تفاصيل التنفيذ. في هذا المستوى ، لا نحتاج إلى ذكر كيفية إدارة الآلة لشريطها أو رأسها.”
2 وصف التنفيذ
“… يستخدم النثر في تعريف الطريقة التي تستخدم بها آلة تورينج رأسها والطريقة التي تخزن بها البيانات على شريطها. وعلى هذا المستوى لا نعطي تفاصيل عن الحالات أو وظيفة الانتقال”.
3 وصف رسمي
الأكثر تفصيلاً ، “أدنى مستوى” ، يعطي “جدول الحالة” لجهاز Turing.
للحصول على مثال عن الخوارزمية البسيطة “إضافة m + n” الموضحة في المستويات الثلاثة ، راجع # خوارزمية # أمثلة.

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

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

برامج “أنيقة” (مدمجة) ، برامج “جيدة” (سريعة): يظهر مفهوم “البساطة والأناقة” بشكل غير رسمي في كنوث وعلى وجه التحديد في شيتين:

Knuth: “… نريد خوارزميات جيدة في بعض الحس الجمالي المعرّف بشكل فضفاض. معيار واحد … هو طول الوقت الذي يستغرقه أداء الخوارزمية.. معايير أخرى هي القدرة على التكيف من الخوارزمية إلى أجهزة الكمبيوتر وبساطتها وأناقتها وما إلى ذلك ”
شايتن: “… برنامج” أنيق “، أعني أنه أصغر برنامج ممكن لإنتاج المخرجات التي يقوم بها”
يقوم Chaitin بتحضير تعريفه مع: “سوف أظهر أنك لا تستطيع إثبات أن البرنامج” أنيق “- مثل هذا الإثبات سيحل مشكلة التوقف (المرجع السابق).

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

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

أجهزة الكمبيوتر (والحواسيب) ، نماذج الحوسبة: الكمبيوتر (أو “الحاسوب”) هو نوع مقيَّد من الآلات ، “جهاز ميكانيكي حتماني منفصل” يتبع تعليماته بشكل أعمى. خفضت نماذج ميلزاك ولامبيك البدائية هذه الفكرة إلى أربعة عناصر: (1) المواقع المنفصلة المتميزة ، (2) العدادات المنفصلة ، التي لا يمكن تمييزها (3) وكيل ، و (4) قائمة من التعليمات التي تكون فعالة بالنسبة لقدرة وكيل.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

القوة الغاشمة أو بحث شامل
هذه هي الطريقة الساذجة لمحاولة كل الحلول الممكنة لمعرفة أيهما أفضل.

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

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

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

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

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

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

الطريقة الجشعة
تشبه خوارزمية الجشع خوارزمية البرمجة الديناميكية من حيث أنها تعمل من خلال فحص البنية التحتية ، وفي هذه الحالة لا تكون مشكلة ما ولكن من حل معين. تبدأ هذه الخوارزميات ببعض الحلول ، والتي يمكن إعطاؤها أو تم بناؤها بطريقة ما ، وتحسينها عن طريق إجراء تعديلات صغيرة. بالنسبة لبعض المشاكل ، يمكنهم العثور على الحل الأمثل بينما يتوقفون عن الآخرين في Optima المحلي ، أي في الحلول التي لا يمكن تحسينها عن طريق الخوارزمية ولكنها ليست الأمثل. الاستخدام الأكثر شيوعًا للخوارزميات الجشعة هو العثور على الحد الأدنى من الشجرة الممتدة حيث يمكن العثور على الحل الأمثل باستخدام هذه الطريقة. Huffman Tree، Kruskal، Prim، Sollin هي خوارزميات جشعة يمكنها حل مشكلة التحسين هذه.

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

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

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

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

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

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

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