تعلم الخوارزميات - شرح لـ الخوارزميات - Algorithms

تعلم الخوارزميات - Algorithms في البرمجة، من خلال شرح لـ ما هي الخوارزميات؟ وما هو الهدف من تعلم الخوارزميات؟ وما هي طرق / خطوات كتابة الخوارزمية أو ما يعرف بـ (خطوات حل المشكلة - Problem Solving)

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

ما هو الهدف من تعلم الخوارزميات؟

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

ولذلك هناك قاعدة أساسية يجب عليك إتباعها أثناء تصميم أي خوارزمية وهي

فكِر مثل الكمبيوتر

ما هي الخوارزميات - Algorithms؟

تعرف أيضا بـ حل المشكلات - Problem Solving، ومن خلال هذا المسمى يمكنك تعريف الخوارزميات بأنها مجموعة من الخطوات التي يتم تطبيقها على مجموعة من البيانات المتاحة والتي تعرف بـ المدخلات - Inputs، لتحصل منها على نتيجة (حل المشكلة) وهو ما يعرف بـ المخرجات - Output، وهذه الخطوات ببساطة هي الخوارزمية، والشكل التالي يوضح الفكرة أكثر

مقدمة عن الخوارزميات - Algorithms design

ما هي طرق / خطوات كتابة الخوارزمية؟

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

إكتب خوارزمية للحصول على المتوسط الحسابي لرقمين وقم بطباعة النتيجة

1. تعريف المشكلة - Problem Definition

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

في هذه الخطوة عادة ما يتم إنشاء جدول بالبيانات - Data Table، بحيث يحتوي هذا الجدول على تصنيفين رئيسيين وهم متغيرات المدخلات - Input Variables، متغيرات النتيجة - Output Variables.

وبتطبيق هذه الخطوة على المثال، نحصل على جدول البيانات التالي

المدخلات

X الرقم الأول

Y الرقم الثاني

المخرجات

average المتوسط الحسابي للرقمين

2. تصميم / كتابة الخوارزمية - Writing an Algorithm

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

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

الطريقة الكتابية - شبيهة الكود - Pseudo Code

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

Start

Read: X, Y

sum = X + Y

average = sum / 2

Write: average

End

إبدأ

إقرأ المدخلات: X, Y

sum = X + Y

average = sum / 2

إطبع المتغير: average

النهاية

المخطط الإنسيابي - خريطة التدفق - Program Flowchart

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

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

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

المخطط الإنسيابي - خريطة التدفق - flowchart - لـ خوارزمية المتوسط الحسابي لرقمين

3. تتبع / مراجعة الخوارزمية - Tracing the Algorithm

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

  1. إدخال البيانات بحيث يصبح المتغير X يساوي الرقم 7، والمتغير Y يساوي الرقم 3
  2. حساب حاصل جمع الرقمين X و Y وتخزين نتيجة الجمع في المتغير sum، لتصبح قيمته تساوي الرقم 10
  3. حساب قيمة المتوسط الحسابي وذلك بقسمة قيمة المتغير sum على العدد 2 وهو مجموع البيانات التي تم إدخالها، ثم تخزين النتيجة في المتغير average، والتي سوف تصبح 5 وهو حاصل قسمة الرقم 10 على الرقم 2
  4. طباعة قيمة المتغير average
  5. إنهاء البرنامج

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

4. تحويل الخوارزمية إلى برنامج للحاسوب - Writing Code

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

HTML, JavaScript

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Algorithms</title>
</head>
<body>
<script type="text/javascript">
// Read the Value of X
var X = prompt("The value of X ?", 0);
// Read the Value of Y
var Y = prompt("The value of Y ?", 0);
// Convert X and Y to Numeric Data Type,
// and Calculate the sum of X and Y
var sum = +X + +Y;
// Calculate the Average of X and Y
var average = sum / 2;
// Print the Value of Average to the User
alert("The average of X:" + X + " and Y:" + Y + " is " + average);
</script>
</body>
</html>

الخلاصة

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