سنتعرف فى هذا المقال على ما هى الخوارزميات فى البرمجة وماهى عوامل جودة الخوارزمية وامثلة عملية علي الخوارزميات وماهو الهدف من تعلم الخوارزميات.
محتوي المقال
ماهى الخوارزميات فى البرمجة
الخوارزمية هي مجموعة من الخطوات الرياضية والمنطقية والمتسلسلة اللازمة لحل مشكلة ما.
سميت على اسم العالم المسلم أبو جعفر محمد بن موسى الخوارزمي. الخوارزميات في البرمجة هي مجموعة من التعليمات التي تستخدم لحل مشكلة معينة. ويجب اتباع هذه التعليمات بترتيب معين ويمكن تمثيلها بطرق مختلفة، مثل المخططات الانسيابية أو اشباه الاكواد Pseudo Code.
لنفهم الخوارزميات فى البرمجة بشكل اعمق
لجعل جهاز الكمبيوتر يقوم بعمل اي وظيفة فإنك بحاجة إلى كتابة برنامج , ولكتابة هذا البرنامج فإنك بحاجة ان تخبر الكمبيوتر خطوة بخطوة ما الذى عليه القيام به , بعد ذلك يقوم الكمبيوتر بتنفيذ هذه الخطوات للوصول إلى الهدف النهائى المطوب .
الخطوات التى تعطيها للبرنامج لكى ينفذها الكمبيوتر يمكن ان تكتب بأكثر من طريقة وهنا يأتى دول الخوارزميات او Algorithms , فالخوارزميات هى مجموعة من الطرق والخطوات المستخدمة فى تنفيذ مهمة معينة , ولكى نفهم الموضوع أكثر إليك هذه الأمثلة .
بفرض انك تريد مقابلة صديق لك فى المطار وتوصيله من المطار إلى بيته فهناك العديد من الطرق (الخوارزميات) التى يمكن استخدامها لتنفيذ هذه المهمة .
عن طريق التاكسى :
- ايقاف التاكسى
- الدخول إلى التاكسى
- إعطاء السائق العنوان
عن طريق تأجير سيارة :
- الذهاب لمكان الحصول على السيارة
- تأجير السيارة
- التوجه نحو المطار
هذه الطرق (الخوارزميات) وغيرها من الطرق الاخر يمكنك استخدامها لتنفيذ الهدف النهائى وهو توصيل صديقك إلى المطار وكل الطرق تؤدى فى النهاية إلى نفس الهدف , ولكن كل منهم بطريقة مختلفة وبخطوات مختلفة بطبيعة الحل , فكل خوارزمية لها تكلفة Cost مختلفة , وكل منهما له زمن تنفيذ Time مختلف فالتكسى على سبيل المثال ربما اسرع طريقة ولكن فى المقابل ربما هو الاغلى .
هذا الكلام ينطبق على البرمجة فى الكمبيوتر فكل برنامج له طرق مختلفة لتنفيذ نفس المهمة وكل طريقة او Algorithm له مميزات وعيوب عند استخدامات معينة .
تعريف الخوارزميات فى البرمجة
يمكننا الآن تعريف الخوارزميات على انها مجموعة من الخطوات المصممة لاداء مهمة معينة , والتى يمكن ان تكون مهمة بسيطة مثل حاصل ضرب رقمين او مهمة معقدة مثل تشغيل ملف فيديو مضغوط ومحركات البحث مثل جوجل تستخدم خوارزميات معقدة لاظهار نتائج البحث المناسبة لك.
كيف تعمل خوارزمية جوجل Page Rank
وتهتم دارسة الخوازميات للكمبيوتر بعاملين هامين وهما Time complexity وهو الوقت الذى يقضيه الكمبيوتر فى تنفيذ الخوارزمية , والعامل الاخر هو Space complexity وهو كمية الذاكرة التى استخدمها البرنامج لتنفيذ الخوارزمية.
مثال على الخوارزميات فى البرمجة
الترتيب او Sorting على سبيل المثال من انواع الخوازميات فى الكمبيوتر التى تستخدم بكثرة لترتيب العناصر لذلك هناك الكثير من الخوارزميات وهذه اشهرها :
- Bin sort
- Merge sort
- Bubble sort
- Shell sort
- Quick sort
كل طريقة من الطرق السابقة مناسبة لحالة معينة فعلى سبيل المثال إذا كنت تريد ترتيب مليون عدد من النوع Integer فخوارزمية Bin Sort هى المناسبة لذلك , اما اذا اردت ترتيب مليون عنوان كتاب فربما خوارزمية Quick Sort , وعليك تحديد الخوارزمية الأنسب للمهمة عن طريق فهم نقاط القوة والضعف لك خوازمية فى مواقف مختلفة.
تصنيف الخوارزميات فى البرمجة
إليك بعض تصينفات الخوارزميات الأساسية:
- خوارزميات البحث Searching : وهى خوارزميات مسئولة عن البحث عن عنصر معين داخل مجموعة من العناصر مثل البحث الخطي (Linear search) البحث الثنائي و (Binary search).
- خوارزميات التصنيف Sorting : وهى خوارزميات مسئولة عن ترتيب مجموعة من العناصر مثل خوارزمية الترتيب الفقاعى (Bubble sort) وخوارزمية الترتيب بالإدارج (Insertion sort)
- خوارزميات Hashing : وهى الخوارزميات المسئولة عن تحويل البيانات من حجم متغير إلى حجم ثابت (عدد معين من الأحرف) على سبيل المثال خوارزمية MD5 وخوارزمية SHA-1.
عوامل جودة الخوارزمية
- يجب تحديد المدخلات والمخرجات للخوارزمية بدقة.
- يجب أن تكون كل خطوة في الخوارزمية واضحة.
- يجب أن تكون الخوارزميات أكثر فعالية من حيث زمن التنفيذ والمساحة من بين العديد من الخوارزميات المختلفة لحل مشكلة ما.
- لا ينبغي أن تتضمن الخوارزمية رمز الكمبيوتر. بدلاً من ذلك ، يجب كتابة الخوارزمية بطريقة يمكن استخدامها في لغات برمجة المختلفة.
فائدة تعلم الخوارزميات فى البرمجة
تعلم الخوارزميات اساسى لتعلم البرمجة وهذه بعض فوائد تعلم الخوارزميات
تقليل الزمن اللازم لتنفيذ الخوارزمية
يمكن ان يكون لنفس المهمة اكثر من حل ولكن الفرق قد يكون فى زمن تنفيذ كلًا منهم ولتوضيح اهمية الزمن فى تنفيذ البرنامج إليك المثال التالى :
لنتفترض اننا نريد برنامج لايجاد مجموع من 0 إلى 10 اس 11.
الحل الذى سياتى إلى ذهنك مباشرتًا هو كالتالى :
الحل بالاعلى ببساطة يفترض اننا سنمر على الاعداد من 0 إلى 10 اس 11 ونقوم بجمع كل رقم فى هذه الاعداد وتنفيذ الكود كالتالى
الحل لم ياخذ اي وقت ولكن دعنا نجرب تنفيذ البرنامج , والنتيجة ان البرنامج سياخذ الكثير من الوقت لينفذ هذا البرنامج البسيط , لنحاول تقدير الزمن اللازم لتنفيذ هذه الخوارزمية
وقت تشغيل الكود = عدد التعليمات * وقت تنفيذ كل وحدة
لنفترض ان عدد التعليمات هو X
x = 1 + (10^11 + 1) + (10^11) + 1 لاحظ ان علامة ^ تعنى اس
وبالتالى x = 2 * 10^11 + 3
لنتفترض ان جهاز الحاسوب الخاص بك يستطيع تنفيذ y = 10 ^8 امر فى الثانية -هذا بالطبع يختلف من جهاز لاخر على حسب قدرته.
بالتالى الوقت المستغرق لتشغيل الكود = x / y (أكبر من 16 دقيقة)
سيستغرق الكود حوالى 16 دقيقة ليتم تنفيذه ! كارثة أليس كذلك؟
بالطبع هذا مثال على خوارزمية سيئة ام الطريقة الصحيحة هى باستخدام الرياضية التالية :
المجموع = N * (N + 1) / 2
والتنفيذ كالتالى
هذا الكود يتطلب امر واحد لتنفيذه بغض النظر عن العدد الذى نريد جمعه.
المثال السابق يوضح لنا ان دراسة زمن تنفيذ الخوارزمية هو امر ضرورى ولا يمكن الاستغناء عنه.
قابلية التوسع
سبب اخر يجعل دراسة الخوارزميات امر ضرورى هو القابلية للتوسع Scalability وتعنى تكون الخوارزمية قابلة لمعالجة المشكلة التى تقوم بحلها ولكن مع زيادة حجم المشكلة.
لنتفترض اننا نريد ان ننشئ فصل دراسى ل 50 دارس ستقول حسنًا نأجر غرفة ونجلب بعض السابورات والاقلام وحلت المشكلة.
حسنًا لنفترض ان العدد زاد إلى 200 دارس فى هذه الحالة الحل مازل صالح ولكن مع زيادة الموارد ربما غرفة اوسع وجهاز عرض شرائح وحلت المشكلة.
لنتفترض ان العدد زاد إلى 1000 فى هذه الحالة يفشل الحل او يحتاج إلى الكثير من الموارد عندما يزداد حجم المشكلة بالتالى هذا الحل غير قابل للتوسع وله حدود.
لعلك تتسأل مع الحل القابل للتوسع اذًا؟
فكر فى مؤسسة مثل خان اكاديمى حيث يمكن لملايين الطلاب مشاهدة مقاطع الفيديو وقراءة الإجابات في نفس الوقت دون الحاجة إلى المزيد من الموارد. لذلك ، يمكن لهذا الحل أن يعالج المشاكل ذات الحجم الأكبر في ظل أزمة الموارد.
المحافظة على الذاكرة
الذاكرة من الموارد الحيوية التى نحتاج للمحافظة عليها عند كتابة اي خوارزمية , فنحاول كتابة الخوارزمية التى تشغل المساحة الاقل من الذاكرة.
فعلى سبيل المثال: أثناء تخزين البيانات عن الأشخاص ، يمكنك تقليل الذاكرة المستخدمة عن طريق تخزين أعمارهم فقط وليس تاريخ الميلاد. واذا احتجت إلى تاريخ الميلاد يمكنك دائمًا حسابه باستخدام العمر والتاريخ الحالي.
كلمة اخيرة
يتضمن تطوير البرامج تعلم تقنيات جديدة بشكل يومي. ويمكنك تعلم معظم هذه التقنيات أثناء استخدامها في أحد مشاريعك. ومع ذلك ، ليس هذا هو الحال مع الخوارزميات .
فالخوارزميات من الاشياء الاساسية التى يجب ان تدرسها وتتعلمه قبل الخوض فى رحلة تعلم البرمجة لانه إذا كنت لا تعرف الخوارزميات جيدًا ، فلن تتمكن من تحديد ما إذا كان بإمكانك تحسين الكود الذي تكتبه ام لا. فيجب أن تكون قد تعلمت الخوارزميات بشكل مسبق وأن تطبقهم حيثما كان ذلك ممكنًا فى برنامجك.
كان هذه المقالة عن ما هى الخوارزميات فى البرمجة والتى اتمنى ان اكون قد وفقت فى عرضها اذا كانت لديك اي تساؤلات او استفسارات او افكار تريد مشاركتها معنا فلا تردد فى مشاركتنا التعليقات بالاسفل.