تسجيل الدخول

الخوارزميات

حذف الصورة؟

سيؤدي هذا إلى نقل الصورة إلى سلة المهملات.

التعريف

مجموعة من الأوامر والتعليمات المنظمة لحلّ المشكلات وإنجاز المهمّات 

مجالات الاستخدام

الحسابات الرياضية، تنظيم البيانات ومعالجتها، النظم الحاسوبية، التطبيقات الرقمية، الذكاء الاصطناعي

الأصل التاريخي للمصطلح

يرجع مصطلح "الخوارزمية" إلى اسم العالم محمد بن موسى الخوارزمي



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

لقياس أداء الخوارزمية يُستخدَم التعقيد الزمني (Time Complexity) والتعقيد المكاني(Space Complexity)، إذ تُقاس كميّتا الوقت ومساحة الذاكرة التي تتطلّبها الخوارزمية لتنفيذ جميع خطواتها. تؤدّي الخوارزميات دورًا حيويًّا في تطوير البرمجيات وتحسين أداء المهمّات، وتشكل أساسًا للعديد من التطبيقات الحديثة مثل المعالجة الآلية للغة الطبيعية، والتعرّف على الصور، والقيادة الذاتية، وأنظمة التوصية.

تاريخ الخوارزميات

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

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

تُعدّ حضارة سومر من أقدم الحضارات التي وفّرت شواهد مكتوبة على ممارسات خوارزمية. ففي مدينة شروباك (Shuruppak) عُثر على ألواح طينية تعود إلى نحو 2500 قبل الميلاد. تتضمن هذه الألواح مسائل تتعلق بتقاسم الحبوب وتوزيع الموارد، وتُعد من أقدم الأمثلة المعروفة على القسمة السومرية. استخدم السومريون نظامًا عدديًا جمعيًا يعتمد على رموز خاصّة للقيم 1 و10 و60 ومضاعفاتها، وكان النظام ذا طابع عشري وستيني (Denary and Sexagesimal) دون أن يكون نظامًا موضعيًا. وقد نُفّذت العمليات الحسابية عبر خطوات منتظمة ومتكررة، وهو ما يعكس وجود تفكير خوارزمي مبكر.[2]

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

وفي مصر القديمة، استُخدم نظام عددي عشري جمعي، وتمّ تمثيل الكسور على هيئة كسور أحادية. وتُعدّ بردية ريند (Rhind Mathematical Papyrus)، التي تعود إلى نحو 1650 قبل الميلاد، المصدر الرئيس لفهم الخوارزميات المصرية. اعتمد المصريون في الضرب على التضعيف (Duplation)، وفي القسمة على التنصيف (Mediation)، كما استخدموا طريقة المساعدات الحمراء (Method of Auxiliary Reds) لتوحيد المقامات. وقد أُعيدت معظم العمليات الحسابية المعقدة إلى هاتين العمليتين الأساسيتين.[4]

كذلك ظهرت في الصين القديمة خوارزميات عددية منظمة في نصوص مثل كتاب "الفصول التسعة"، حيث استُخدمت إجراءات محددة لحل مسائل عملية تتعلق بالمساحات والضرائب والتجارة[5]. كما استُخدمت أدوات حسابية مثل المعداد الصيني (Chinese Abacus)، الذي أتاح تنفيذ العمليات الحسابية بطريقة منهجية قابلة للتكرار[6].

وفي الرياضيات اليونانية، بدأت الخوارزميات تأخذ طابعًا أكثر تجريدًا. ويُعد خوارزمية إقليدس (Euclid’s Algorithm) لإيجاد القاسم المشترك الأكبر مثالًا بارزًا على خوارزمية تعتمد على التكرار (Iteration) وتنتهي بالضرورة بعد عدد محدود من الخطوات[7]. كما طُوّرت طرائق تقريبية لحساب محيط الدائرة وقيمة ، ولا سيما من خلال أعمال أرخميدس، حيث استُخدمت عمليات متتابعة تقترب تدريجيًا من القيمة المطلوبة[8].

ثم شهد العصر الإسلامي تحولًا حاسمًا في تاريخ الخوارزميات. ففي القرن الثالث للهجرة (التاسع الميلادي) برزت أعمال محمد بن موسى الخوارزمي (164-232 هـ/781-847م)، وكان من أوائل العلماء الذين أسهموا في تطوير المفاهيم الرياضية والحسابية في العصر العباسي[9]. وقد وضع الخوارزمي منذ ذلك العصر أسسًا منهجية للحساب والجبر في كتابه الجبر والمقابلة. وعند ترجمة مؤلفاته في الحساب إلى اللاتينية في القرن الثاني عشر، كُتب اسمه بصيغ مثل الغوريسمس Algorisms والغوريسموس Algorismus والغوريثموس Algorithmus، حيث استُخدمت للدلالة على طرائق الحساب باستخدام الأرقام المكتوبة، ولا سيّما النظام العشري الموضعي، تمييزًا لها عن الحساب باستخدام لوح العدّ (abacus). ومن هنا نشأ التمييز بين الغوريستس (Algorists)، الذين استخدموا هذه الطرائق، والبسيستس (Abacists)، الذين اعتمدوا على أدوات العدّ التقليدية[10].

مع مرور الزمن، اتّسع استعمال المصطلح ليشير إلى طرائق الحساب بوجه عام. ومن خلال هذا التحوّل التدريجي في الاستعمال، استقرّ الشكل اللغوي الغوريثم algorithm ليحمل معنى الإجراء الحسابي المنظم، قبل أن يُقيَّد في العصر الحديث بشرط الانتهائية[11].

ومع تطور الرياضيات التطبيقية، ظهرت خوارزميات عددية متقدمة مثل طريقة نيوتن (Newton’s Method) لإيجاد جذور المعادلات، وطرائق التقريب المتتالي (Successive Approximations)، والاستيفاء (Interpolation)، والتكامل العددي (Numerical Quadrature)، وحلّ المعادلات التفاضلية (Differential Equations Algorithms)، وأصبحت الخوارزميات في هذه المرحلة جوهر التحليل العددي (Numerical Analysis).[12]

في القرن العشرين، انتقل مفهوم الخوارزمية إلى مستوى أكثر تجريدًا مع تطور المنطق الرياضي ونظرية الحوسبة. ظهرت مفاهيم مثل الدوال العودية (Recursive Functions) والقابلية للحساب (Computability)، ونماذج نظرية مثل آلة تورنغ (Turing Machine) وآلة بوست (Post’s Machine). وأصبح يُنظر إلى الخوارزمية بوصفها إجراءً محدد الخطوات، قابلًا للتنفيذ آليًا، وينتهي بعد عدد منتهٍ من العمليات[13].

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

[الشكل 1]

حذف الصورة؟

سيؤدي هذا إلى نقل الصورة إلى سلة المهملات.


كيفية عمل الخوارزميات

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

 تصميم الخوارزميات وكفاءتها وتنفيذها

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

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

  • صِحّة الخوارزمية (Correctness): وتعني أن تُنتِج الخوارزمية، انطلاقًا من المُدخلات المحددة، المُخرجات الصحيحة المطلوبة، بما يدلّ على سلامة تصميمها المنطقي.
  • البساطة (Simplicity): يعني أن تكون الخوارزمية بسيطة وواضحة، بما يسهل فهمها وتحليلها وصيانتها.
  • الكفاءة (Efficiency): تشير إلى قدرة الخوارزمية على إنجاز مهمتها في أقل وقت ممكن وبأقل استهلاك ممكن لموارد الآلة، مثل الذاكرة والمعالج.
  • الأمثلية (Optimality): تعني السعي إلى إيجاد الحلّ الأكثر كفاءة ضمن القيود المفروضة على المشكلة.
  • القدرة على التكيّف (Adaptability): وتعني إمكانية تطبيق الخوارزمية على مشكلات متقاربة مع إجراء تعديلات محدودة.

ولا يقتصر تصميم الخوارزمية على اختيار الخطوات المناسبة فحسب، بل يشمل أيضًا اختيار نموذج التصميم الخوارزمي الملائم لبنية المشكلة. فقد تُصنَّف الخوارزميات وفق نماذج التصميم {{نماذج التصميم(Design Paradigms): أساليب عامّة لتنظيم الحلول الخوارزمية وتوصيف بنيتها، بما يساعد على اختيار النهج الأنسب لحلّ المشكلة.}} المعتمدة في بنائها.

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

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

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

بعد الانتهاء من تصميم الخوارزمية وتحليلها، تأتي مرحلة التنفيذ. تُنفذ الخوارزميات بلغات برمجة {{لغة برمجة: أداة للتواصل مع الحاسوب وإعطائه التعليمات لتنفيذ مهمات محددة. تختلف لغات البرمجة في قواعدها واستخداماتها بحسب نوع التطبيقات.}} مختلفة، ما يُمكِّن أجهزة الحاسوب من تنفيذها وتحقيق النتائج المرجوّة.

 قياس أداء الخوارزمية

يمكن قياس أداء الخوارزمية من خلال بعدين رئيسيين، هما التعقيد الزمني والتعقيد المكاني[14]. يُستخدم هذان المعياران لتقدير كفاءة الخوارزمية من حيث الزمن المستغرق والموارد المستخدمة أثناء التنفيذ.

التعقيد الزمني

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

التعقيد المكاني

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

تُستخدَم الذاكرة في الخوارزمية أثناء تنفيذها لأغراض متعددة، من بينها:

  • تخزين المُدخلات والبيانات المؤقّتة.
  • حفظ القيم المتغيّرة والثابتة.
  • الاحتفاظ بمسار استدعاءات الوظائف أثناء التنفيذ.

يُحسَب التعقيد المكاني عادةً من خلال الجمع بين حجم المُدخلات والمساحة الإضافية اللازمة للتنفيذ، وفق العلاقة الآتية:

التعقيد المكاني = المساحة المساعدة + حجم المُدخلات

المراجع

العربية

الديومجي، عبد الإله. "قصة الخوارزميات". مؤسسة الفكر العربي. 16/4/2021. في:

https://acr.ps/1L9F392

الأجنبية

Chabert, Jean-Luc, ed. A History of Algorithms: From the Pebble to the Microchip. Berlin, Heidelberg: Springer, 1999. https://doi.org/10.1007/978-3-642-18192-4.

Kuo, Way, and Ming J. Zuo. Optimal Reliability Modeling: Principles and Applications. Hoboken, NJ: John Wiley & Sons, 2003.

Sedgewick, Robert. Algorithms in C. Massachusetts: Addison-Wesley Publishing Company, 1990.

[1] Jean-Luc Chabert, ed., A History of Algorithms: From the Pebble to the Microchip (Berlin, Heidelberg: Springer, 1999), p. 1, https:10.1007/978-3-642-18192-4.

[2] Ibid, pp.7-8.

[3] Ibid, pp. 11-12.

[4] Ibid, p. 16.

[5] Ibid, pp. 91-96

[6] Ibid, pp.35-37

[7] Ibid, p. 4.

[8] Ibid, pp. 139-166.

[9] عبد الإله الديومجي، "قصة الخوارزميات"، مؤسسة الفكر العربي، 16/4/2021، شوهد في 30/9/2024، في:

https://acr.ps/1L9F392

[10] Chabert, pp.2-3.

[11] Ibid, p. 2.

[12] Ibid, p. 5.

[13] Ibid, pp. 455-480

[14] Way Kuo & Ming J. Zuo. Optimal Reliability Modeling: Principles and Applications (Hoboken, NJ: John Wiley & Sons, 2003).


المحتويات

الهوامش