القائمة الرئيسية

الصفحات

ماهي الخوارزميات ؟ و لماذا يجب دراسة الخوارزميات في البرمجة

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

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

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

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

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

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

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

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

سميت بهذا الإسم نسبة لمبتكرها العالم المسلم أبو جعفر محمد بن موسى الخوارزمي الذي عاش في بغداد في القرن التاسع الميلادي و تحديدا (780م - 847م) في زمن الخلافة العباسية في حكم المأمون , و يعد أول من وضع علم الجبر وهو مؤلف كتاب الجبر و المقابلة .

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

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

التسلسل 

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

الإختيار 

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

التكرار 

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

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

الخوارزميات في البرمجة 

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

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

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

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

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

كيفية كتابة خوارزمية 

ذكرنا سابقا أنه هناك من يخلط بين البرمجة كمفهوم يتعلق بإيجاد بالتحليل و حل المشاكل و لغة البرمجة كأداة ووسيلة لكتابة البرامج
كذلك الأمر بالنسبة للخوارزميات هناك من يخلط بين الخوارزميات كعلم واسع يتعلق بالخطوات نفسها و أنواع الخوارزميات  وإعتبارات مهمة مثل الزمن و الخزن و مايتعلق بالذاكرة و التعامل و بين تمثيل الخوارزمية الذي يعتبر في الواقع جزء بسيط جدا و نقطة في بحر الخوارزميات .
سنشرح طريقتين مختلفتين لتمثيل الخوارزميات و هي :
pseudo code
flowchart

أولا : شرح pseudo code


شرح pseudocode

و يمكن أن نسميه الكود الزائف و يستخدم لكتابة و تنفيد وتحليل البرنامج بشكل يسهل تحويله إلى لغة البرمجة فيما بعد و يتميز بالمرونة في حل المشكلات و كذلك الوضوح بحيث يجب مراعاة عدة نقاط مهمة أثناء الكتابة مثل :
البداية بـ ( إبدأ ) و إنهاء الخوارزمية بـ ( توقف ) .
نستخدم الكلمة ( إقرأ ) للإدخال و ( أكتب ) للإخراج .
إستعمال رموز العمليات الحسابية (+ , * , - , / ) و كذلك = و يوجد فرق بين = و == فالأولى تعني نسب قيمة لمتغير و تدعى 
assignment و الثانية تعني أن القيمتان متساويتان . 
تعريف المتغيرات و إستخدام البيانات المنسوبة إليها بشكل يبين وظيفتها في الحل .

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

ثانيا : شرح flowchart 

شرح flowchart

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

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

تعليقات

تعليق واحد
إرسال تعليق
  1. If you're trying to lose kilograms then you absolutely need to jump on this totally brand new tailor-made keto plan.

    To produce this service, licensed nutritionists, personal trainers, and chefs joined together to produce keto meal plans that are effective, decent, economically-efficient, and satisfying.

    From their first launch in early 2019, 1000's of people have already completely transformed their body and well-being with the benefits a great keto plan can give.

    Speaking of benefits; clicking this link, you'll discover 8 scientifically-certified ones offered by the keto plan.

    ردحذف

إرسال تعليق