بدأت تعلم البرمجة منذ فترة قريبى ومررت على الخوارزميات مؤخرا، لا أنكر أنها أفادتني بطريقة التفكير بشكل عام، لكن هل هي مهمة لاتباعها بكل عملية برمجية، ألا يمكنني المتابعة بدونها، باختصار ما أهميتها للبرمجة؟
ما هي أهمية الخوارزميات في البرمجة؟
من أهم الأمور في البرمجة بشكل عملي الخوارزميات وهياكل البيانات Data Structures، خصوصُا إن كنت ستعمل على مشروع ضخم ويستعمله الآلاف من المستخديمن معًا.
فكرة الخوارزمية هي حل مشكلة ما من خلال مجموعة من الخطوات المنظمة التي يتم تنفيذها بشكل متتابع، ويمكننا أن نعتبر أن أي حل منظم لأي مشكلة مُحددة يُعتبر خوارزمية. وبما أنك تقوم ببرمجة تطبيقات أو برامج فأنت تقوم بحل مشكلة ما، وبالتالي تستخدم الخوارزميات بالفعل.
بالتأكيد لإنتاج مشروع عملي (قابل للإستعمال من قبل المستخدمين العاديين)، نواجهة مجموعة من العقبات، مثل كيفية تخزين عدد كبير من المستخدمين والبحث بينهم بشكل سريع أو كيفية حماية بيانات كل مستخدم، وتشفير كلمات المرور بشكل آمن وسريع في نفس الوقت.
ويمكننا التفكير في مثال عملي مثل الذي تستعمله خرائط جوجل لتحديد إن كان طريق ما مزدحمًا الآن أم لا، من خلال معرفة عدد الهواتف الحالية في هذا الطريق، فإن كان عدد الهواتف كبير، فهذا يعني أن هناك الكثير من المستخدمين وبالتالي فإن الطريق مزدحم، هنا الخورزمية تساعد في حل هذه المشكلة من خلال حساب عدد المستخدمين ومساحة الطريق وكثافة عدد المستخدمين ... إلخ، بينما تساعد هياكل البيانات في تنظيم بيانات كل مستخدم والبحث بينهم بشكل سريع (عدد مستخدمين خرائط جوجل أكثر من 154 مليون مستخدم شهريًا) فإن لم نستعمل هياكل البيانات فسوف تستغرق هذه العلمية الكثير من الوقت لإتمامها.
توجد في موسوعة حسوب قسم كامل لشرح ما هي الخوارزميات وأشهر الخوارزميات بشكل مفصل:
فكرة الخوارزمية هي حل مشكلة ما من خلال مجموعة من الخطوات المنظمة التي يتم تنفيذها بشكل متتابع، ويمكننا أن نعتبر أن أي حل منظم لأي مشكلة مُحددة يُعتبر خوارزمية
ألا يمكننا استخدام الخوارزمات لمنع المشاكل من الأساس؟ يعني لو افترضنا أننا بصدد صُنع روبوت أليس من الأفضل أن نضع الخوارزمات بشكل صحيح منذ البداية بحيث نمنع حدوث أيّ مشكلة في المستقبل، وعلى أسوأ الظروف لو لم تنجح أيّ خوارزمية منهم بإمكاننا تعديلها وإصلاحها.
هذا الأمر ليس متاحًا في كثير من الأحيان، فالبشر يخطئون بشكل طبيعي، لذلك قد تحتوي الخوارزمية نفسها على أخطاء، ويجب إصلاحها بعد ذلك عند إكتشاف الخطأ، أيضًا يوجد مشاكل في حد ذاته لا يمكن توقعها بسهولة أو تحدث خارج قدرة البشر على التحكم بها.
على سبيل المثال قد يتم إنشاء منتدى بسيط للنقاش بين المستخدمين، ولكن إذا زاد عدد المستخدمين بشكل ضخم يصبح الموقع بطيء نوعًا، لذلك يجب إعادة حل هذه المشكلة من خلال إستخدام خوارزميات أفضل في التعامل مع عدد كبير من البيانات وهياكل بيانات منظمة أكثر. وقد نتسأل لماذا لم نقم من البداية بإستخدام هذه الخوارزميات وهياكل البيانات لكي لا تظهر المشكلة من الأساس، ولكن ليس دائمًا إستخدام يكون هذا الأمر متاحًا لأن مثل هذه الخوارزميات تستهلك قدر أكبر من قدرة الحاسوب التشغيلية وتكلفة أكبر لتشغيلها، وقد تحتاج إلى ظروف معينة لكي تعمل بشكل مثالي.
ولكن ليس دائمًا إستخدام يكون هذا الأمر متاحًا لأن مثل هذه الخوارزميات تستهلك قدر أكبر من قدرة الحاسوب التشغيلية وتكلفة أكبر لتشغيلها، وقد تحتاج إلى ظروف معينة لكي تعمل بشكل مثالي.
ولكن فيما بعد سنضطر لإضافتها لحل المشكلة وستظل تلك المشاكل قائمة أيضًا "تستهلك قدر أكبر من قدرة الحاسوب التشغيلية وتكلفة أكبر لتشغيلها، وقد تحتاج إلى ظروف معينة لكي تعمل بشكل مثالي" إذن ماذا سنفعل حينها لتجنب تلك العقبات.
الخوارزمية بمفهومها البسيط هي ليست إلا مجموعة من الخطوات المنطقية اللازمة لإنهاء مهمة ما. فهي اللبنات الأساسية للمنطق الذي يتم من وراءه وصف الشيفرات البرمجية فهي ما تقودك نحو طرق مثلى optimal أو شبه مثلى near-optimal لحل المشكلات.
قد تجد انك تمارس الخوارزميات دون أن تتعلمها أساسا، ولكن لا يعني هذا ان تعلمها غير واجب. فهي ستختصر عليك الكثير، وبدل تعلم البرمجة بالطريقة الصعبة هي ستجعل عملية التعلم والتطبيق والممارسة أسهل نسبيا وأكثر تنظيما ومنهجية.
، لا أنكر أنها أفادتني بطريقة التفكير بشكل عام
يعد التفكير الخوارزمي ، أو القدرة على تحديد خطوات واضحة لحل مشكلة ما ، أمرًا بالغ الأهمية في العديد من المجالات المختلفة. حتى لو لم نكن مدركين لذلك ، فإننا نستخدم الخوارزميات والتفكير الحسابي طوال الوقت. وهذه الطريقة في التفكير تسمح للطلاب بتفكيك المشكلات ووضع تصور للحلول من حيث الخطوات المنفصلة. تتطلب القدرة على فهم وتنفيذ الخوارزمية من الطلاب ممارسة التفكير المنظم وقدرات التفكير.
ألا يمكنني المتابعة بدونها
لا. الخوارزمية هي طريقة لكيفية قيام الكمبيوتر بأداء مهمة ما. لذلك لا يمكنك عمل خوارزميات بدون تعلم البرمجة. بمجرد أن تتعلمها ، يمكنك إنشاء الخوارزميات الخاصة بك لكيفية عمل برنامجك.
ألا يمكنني المتابعة بدونها لا؟
اختلف معكي يا نجلاء فالخوارزميات تساعد كثيرا في البرمجة والعمل بشكل اكثر مرونة واكثر تطورا ومنطقية، بل يمكن البدء في البرمجة والعمل بها بدون الإلمام بالخوارزميات ولهذا الإمكانية متاحة لكل من يريد تعلم البرمجة دون ربطها بالخوارزميات فهي عامل مساعد وقوي جدا في بناء البرمجيات، ولاكن يمكن بناء البرمجيات باي شكل اخر تقليدي، بالطبع مع فارق الاختلاف الأداء والكفاءة.
بالإضافة إلى ما ذكرة الاصدقاء من مشاركات قيمة أحب أن أضيف في هذا الصدد الي اهمية الخوارزميات ففي البرمجة توجد طرق مختلفة لحل مشكلة ما، ومع ذلك فإن كفاءة الأساليب المتاحة تختلف، فبعض الطرق مناسبة تمامًا لتقديم إجابات أكثر دقة من غيرها، وتستخدم الخوارزميات لإيجاد أفضل طريقة ممكنة لحل مشكلة ما؛ وبذلك يقومون بتحسين كفاءة البرنامج.
ويجدر بي الاشارة علي سبيل الذكر لا الحصر اهمية إستخدام الخوارزميات في البرمجة، كما يلي:
- لتحسين كفاءة وجودة البرمجيات.
- التفكير المنطقي في حل المشاكلات البرمحية.
- الاستغلال الأمثل لموارد وإمكانيات الحاسوب.
- تساعد الخوارزميات علي فهم ألية عمل الحاسوب وكيف يفكر وهذا يساعد علي بناء البرمجيات بشكل منطقي سليم.
وأضيف إلى كلامك أيضًا يا مصطفى، عوامل جودة الخوارزميات ..
من حيث أهمية تحديد المُدخلات والمخرجات للخوارزميات بدقة. واضحة.
وأن تكون فعاليتها أكثر من حيث :
الوقت الزمني للتنفيذ والمساحة بين الخوارزميات.
* طريقة كتابة للخوارزميات : لا ينبغي أن تتضمن رمز الكمبيوتر فيجب كتابتها بطريقة يمكن استخدامها في لغات البرمجة المختلفة.
تعتبر الخوارزميات أساس من أساسيات تعلم البرمجة؛ فهي عبارة عن خطوات عمل لحل مشكلة برمجية ما وليست كود برمجي كما يعتقد البعض.
وتعتمد الخوارزمية على مدخلات وهي البيانات والتي ستستخدمها لتصل إلى افضل لحل للمشكلة فتخرج بمخرجات وهي المعلومات.
فعلى سبيل المثال لدينا مشكلة او معادلة حسابية وهي
5×125= s
ونحتاج حل لهذه المشكلة او المعادلة الحسابية
بالطبع يوجد لكل مشكلة أكثر من حل ولكن نريد أفضل حل وبطريقة علمية وهنا يأتي دور الخوارزمية وستكون كالتالي:
لدينا بيانات وهي الرقمين 5 و 125 ونحتاج الحصول على حاصل ضربهما ويتم وضع المخرج في الرمز s
فتكون الخوارزمية كالتالي
5×5 + 5×20 + 5×100 وتساوي
25+100+500 وتساوي 625
وهكذا يكون المخرج s يساوي 625
وبالتالي تم وضع خوارزمية يمكن تطبيقها برمجياً عند كتابة الأكواد
طبعاً هذه الخوارزميات لن تؤثر على تعلمك للبرمجة ولكن ستؤثر على طريقة تفكيرك البرمجي وأسلوب كتابة الكود البرمجي وكيفية إيجاد الحلول البرمجية
أتمنى أن تكون الفكرة قد وصلت
الخوارزمية تستخدم لوضع فكرة الحل لتقديمها على شكل أوامر إلى الحاسوب على شكل ''إذا كان كذا فافعل كذا " ليعطي هو بدوره نتيجة منطقية صحيحة، وبالتالي لا يمكن البدء بتصميم برنامج جديد اذا لم يتواجد خطوات لتنفيذه. مثال بسيط على الخوارزمية: إذا أردنا تصميم برنامج يقوم بحساب معدل طالب ، نحن بحاجة الى مجموعة من الخطوات:
1- إدخال علامات الطالب في المواد الدراسية.
2- حساب مجموع درجات الطالب في جميع المواد الدراسية.
3- إيجاد المعدل أي قسمة المجموع على عدد المواد ، الخوارزمية تقوم بتحديد فيما إذا كان الطالب ناجح أم لا إذا كان المعدل أقل من 50 فالطالب راسب أما إذا كان أكبر من 50 فالطالب ناجح
سأوضح لك بعض من أشهر الخوارزميات في البرمجة لتبيين الأهمية :
- خوارزميات البحث Search Algorithms
كيف تعمل هذه الخوارزميات ؟
تقدم طريقة التفكير المنطقي للمساعدة عند البحث عن عنصر معين ضمن مجموعة عناصر ومن أشهر الأمثلة على خوارزميات البحث هي خوارزمية البحث الثنائي ، يتم ترتيب العناصر فيها على شكل مصفوفة بترتيب تصاعدي أو تنازلي، ثم يتم إدخال العنصر المراد البحث عنه ضمن المصفوفة ، ثم يتم تقسيم مجموعة العناصر الى قسمين ، وبعدها يتم وضع مؤشر في وسط المصفوفة، لتبدأ عملية المقارنة بدءاً من منتصف المصفوفة للبحث عن تطابق ، فإذّا كان العنصر الأوسط أقل من قيمة العنصر المراد البحث عنه يتم تجاهل القسم الأيمن الذي يحوي على مجموعة الاعداد الصغيرة ، ليبدأ عندها البحث ضمن الجزء الأيسر فقط . و يوجد الكثير الكثير من خوارزميات البحث.
- خوارزميات الترتيب Sort Algorithms
كيف تعمل هذه الخوارزميات ؟
تساعد هذه الخوارزمية على ترتيب مجموعة عناصر سواء ضمن ترتيب تصاعدي أو تنازلي أو بإحدى الطرق الخاصة. من أشهر الأمثلة على خوارزميات الترتيب هي ترتيب الفقاعات Sort Bubble Sort تعمل على رفع العنصر الأكبر كفقاعة الهواء التي ترتفع إلى أعلى وذلك بترتيب العناصر بتتابع، أي أننا نقوم بمقارنة العنصرين الأول والثاني، ونحتفظ بالعنصر الأكبر، ونبدل الأماكن إذا كانا غير مرتبين، ونقوم بهذه العملية إلى آخر عنصر، وبعد ذلك نعيد العمليات إلى المكان ما قبل الأخير وهكذا ثم نتوقف عندما لا نقوم بالتبديلات عند آخر عملية. أتذكر هذه الخوارزمية جيداً ،قمت بتطبيقها بلغة الأسمبلي من قبل .
بعد تشكيل هذه الخوارزميات نقوم بكتابتها باستخدام إحدى لغات البرمجة التي نرغب بها. طبعاً أن تصبح مبرمج لا يتطلب منك حفظ الخوارزميات ،لأنها بالنهاية هي عبارة عن طرق حل تستطيع العودة إليها ودراستها وفهمها عند الحاجة مع القدرة على تطوير إحدى أفكارها في حال تطلب الأمر ذلك ومن ثمّ تحويلها إلى أكواد برمجية باستخدام لغات البرمجة .
في ضوء التعريف المبسّط الذي ذكره الأصدقاء، يمكننا أن نعتبر الخواريزمية واحدة من الأشكال أو الصيغ التي تتكوّن من مجموغة خطوات كما أشاروا. لكن فكرة الخطوة هنا تتميّز بشيء لم نذكره أو نتطرق إليه بعد، حيث أن الخواريزمية أهميتها في البرمجة بشكل عام تتمثّل في أننا لا نعود مطلقًا لإعادة الأمر أو الخطّة أو خارطة الأوامر للحاسوب، فالخواريزمية من المرة الأولى التي تعمل فيها، فهي تستمر في العمل بالآلية نفسها إلى أن يتغير ذلك، لذلك فنحن لسنا في حاجة إلى أن نفعل ما نقدّمه من حل للمشكلة في كل مرة، بل إن مرة واحدة تكفي كي يتم تكرار العملية تبعًا لتسلسل الأوامر المنوطة به الخواريزمية في كل مرة.
ويحدّد الخبراء مجموعة للخصائص التي تمتاز بها الخواريزميات في البرمجة، وهي كالآتي:
- الدقة الفائقة.
- التفرّد، حيث الخواريزمية الواحدة فريدة من نوعها.
- لياقتها للمهمة أو المشكلة المنوطة بحلّها.
- تستقبل مدخلات.
- على أساس هذه المدخلات وعلى أساس عناصر الخواريزمية الرياضية تصنع المخرجات.
- لا تعتني الخواريزمية الواحدة بمدُخَل وحد، وإنما تعتني بأكثر من عنصر من النوع الواحد من المدخلات المخصصة لها.
في هذا الإطار، نصحني العديد من التقنيين بالتعامل مع أكاديمية حسوب في هذا الصدد، حيث أن المحتوى التقني عليها يمثّل قطاعًا كبيرًا مما نريد معرفته عن مثل هذه المجالات، وبه الكثير من الدورات التدريبية الأكثر تعمّقًا في هذا الصدد.
لا تعتني الخواريزمية الواحدة بمدُخَل وحد، وإنما تعتني بأكثر من عنصر من النوع الواحد من المدخلات المخصصة لها
حسب ما فهمت أن الخوارزمية هي حل لمشكلة، مثلا في الرياضيات كنا نحل معادلات بمجهول أو مجهولين هذه المعادلات يمكننا من خلالها بناء خواريزمية معينة أو الأمر مختلف عن المعادلات في الرياضيات، كذلك حسب علمي البرمجة لها علاقة وطيدة مع الرياضيات.
هل حتى في البرمجة الخوارزمية يمكن أن تقوم بحل أكثر من مشكلة أو يمكن بناء خوارزمية لحل مشكلة واحدة؟
حسب ما فهمت أن الخوارزمية هي حل لمشكلة، مثلا في الرياضيات كنا نحل معادلات بمجهول أو مجهولين هذه المعادلات يمكننا من خلالها بناء خواريزمية معينة أو الأمر مختلف عن المعادلات في الرياضيات، كذلك حسب علمي البرمجة لها علاقة وطيدة مع الرياضيات.
البرمجة ما هي إلا أداة لتطبيق الخوارزمية مثلها مثل أي علم آخر سواء رياضيات أو فيزياء أو غيره.
لكي اجعل لك الموضوع بسيط جدا
عندما تقوم حتي بانشاء أصغر التطبيقات مثلا to do list app بواسطه جافاسكريبت بشكل صحيح
أولا يجب التفكير في العملية علي الشكل التالي عند بدء التطبيق
**يتم احضار البيانات المخزنه مسبقا و إنشاء العناصر
**عند إدخال عنصر جديد يتم إضافة ذلك العنصر للبيانات
**بعد تخزين العنصر يتم عمل تحديث للعناصر التي تم إنشائها
ببساطه هذه تعتبر خوارزمية
لاكن الطريقة التي تستعملها لتخزين البيانات تسمي داتا ستراكشر مثلا الطريقة الانسب لتخزين البيانات لهذا المشروع سوف تكون map بلا شك
و اذا كنت سوف تقوم بتخزينها في قاعدة بيانات علائقية (sql) سوف يتم تخزين البيانات في جدول يتكون من ثلاث اعمده مثلا عمود لل id و عمود لل content و عمود آخر لل stutes
كما تري لا يمكن الاستغناء عن هياكل البيانات و الخوارزميات حتي في المشاريع متناهية البساطه
تعلم الخوارزميات هو مهم للعديد من الأسباب، بما في ذلك:
- تحسين الأداء: الخوارزميات هي أدوات تستخدم لحل المشاكل المعقدة بشكل أسرع وأدق، وتستطيع تحسين أداء النظم والبرامج.
- تحسين الكفاءة: الخوارزميات هي أدوات يمكن استخدامها لحل المشاكل بأداء أكثر كفاءة، وتستطيع تحسين كفاءة النظم والبرامج.
- التعاون مع الآلات: الخوارزميات هي أدوات تستخدم للتعاون مع الآلات وتحل المشاكل بشكل أسرع وأدق.
- تطوير الذكاء الصناعي: الخوارزميات هي أدوات تستخدم لتطوير الذكاء الصناعي وتحل المشاكل بشكل أسرع وأدق.
- التعلم والتطور: التعلم المستمر في مجال الخوارزميات يمكن أن يؤدي إلى تطور أدوات الخوارزميات وإطلاق خوارزميات جديدة وأكثر كفاءة.
- التعاون مع النظم الأخرى: الخوارزميات هي أدوات تستخدم للتعاون مع النظم الأخرى وتحل المشاكل بشكل أسرع وأدق.
التعليقات