كشف سر العلاقة بين البرمجة و الخوارزميات

هل تساءلت يوماً عن السر الذي جعل أغلب المبرمجين المحترفين لهم علاقة قوية بعلم الخوارزميات؟ و هل سألت نفسك هذا السؤال : أنا مبرمج لماذا اتعلم الخوارزميات؟ كُن معي اليوم حتى تعرف هذا السر الكبير.

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

لحساب معادلة ما مثلا Y=x2/2x تبدأ الخوارزمية بحساب المقام أولا و تتأكد أنهُ لا يساوي الصفر (تسمى خطوة إتخاذ قرار) ثم تحسب ضعف العنصر (x)، ثم تحسب مربع العنصر (x) ثم بعد ذلك تقوم بحساب ناتج القسمة. الخطوات السابقة بإمكانك إعتبارها خوارزمية بسيطة لحل المعادلة أعلاه، هذا يعني أننا (بسطنا) حساب المعادلة فقط ولم نعدل في المعادلة في حد ذاتها، أليس كذلك؟ إذن الخوارزميات هي للتبسيط والتسهيل وإختصار الوقت. كما ذكرتُ لك و احفظ هذا عن ظهر قلب (الخوارزميات من أجل التبسيط).المبرمج و الخوارزميات

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

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

إستخدام أشكال الخوارزميات لعمل مخطط إنسيابي:

  • begin نستخدم هذا الشكل في بداية ونهاية الخوارزمية.
  • output نعلم بالتأكيد في أي مشكلة هناك أمور تُساعدك على الحل ونتفق أن نسميها مدخلات للخوارزمية والحل الناتج بعد استخدام الخوارزمية يسمى مُخرجات. كلا المدخلات والمخرجات تكتب في شكل متوازي الاضلاع.
  • process إذا كانت خُطوات الحل الخاصة بك تتطلب بعض العمليات الحسابية او بعض العميات الأُخرى التي تريد تنفيذها فيجب ان تضعها داخل شكل المستطيل.
  • choiceإذا واجهتك خطوة تتطلب إتخاذاً للقرار استخدم هذا الشكل لتمثيل ذلك القرار حيث السهمين في الجوانب يبينان مسار كل قرار.
  • continueتوجد بعض المسائل الكبيرة تتطلب خطوات حل كثيرة جداً. يُمكنك إستخدام شكل الدائرة لربط الخُطوات مع بعضها البعض .

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

كما تُستخدم الخوارزميات لتسهيل العمليات المعقدة و إختصار الزمن، فيجب عليك إختيار الخوارزمية بحيث تُسهّل عليك العمل وتستهلك وقتاً أقل.

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

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

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

لا تفوت قراءة التدوينات التخصصية في الخوارزميات

هكذا طُفتُ معك في سر العلاقة بين الخوارزميات و البرمجة، تلك العلاقة التي لم و لن تنتهي و تظل كل يوم في إتقادٍ و حرارة زائدة. هل عرفت الآن قوة العلاقة؟

سامي محمد آدم

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

مقالات ذات صلة

18 رأي على “كشف سر العلاقة بين البرمجة و الخوارزميات”

  1. صراحة موضوع أغناني بمعلومة كنت أحتاجها ولله الحمد بفضل الله ثم بفضلكم نلت جوابها
    جزاكم الله خير ووفقكم الى مافيه نفع للشباب

  2. نشكركم على تعاونكم الفعال في خدمة طلاب البرمجة ,,,
    حقيقتاً موضوعاتكم جميله جداً ,,,,
    وتمنياتي لكم التوفيق إن شاء الله

  3. انا باحث رياضيات لست مختص بالبرمجة ولكنى اقوم ببحث يسهل من عملية فك تشفير RSA و توليد اعداد اولية .

    حاليا انا فى مرحلة اختبار المعادلات على اعداد كبيرة و نظرا لعدم خبرتى فى مجال البرمجة لا استطيع القيام باختبار عملى خلاصة الكلام اننى اختبر رقم 100 خانة المفروض انى لدى قيم ل t محصورة داخل فترة من الاعداد السالبة و المطلوب تجربة كل القيم بهذه الفترة لايجاد T التى تحقق n^2+36t^2+12nt-4n-20t يكون عددا مربعا له جذر صحيح مع العلم ان قيمة n معلومة و هى قيمة ثابتة فأرجو مساعدتى فى الامر و من يعلم قد نقوم بفك عدد RSA-1024

    1. مرحباً محمود،

      تشرفتُ بزيارتك للمدونة و أتمنى لك التوفيق في حل RSA-1024.

      – ما فهمتُه هو أنك ستوفر عددا من الأرقام تتكون من 100 خانة.
      – ترغب بتجربة هذه الأرقام على المعادلة المذكورة لإيجاد الذي يوافق ناتجه عدد له جذر تربيعي.

      أعددتُ لك ملف إكسل يحتوي على معادلتك و بإمكانك إدخال قيمة n و قيم مختلفة لـ t.

      في كل صف ستجد إما true أو false لتوضح هل الجذر التربيعي لناتج المعادلة عدد صحيح أم لا.

      رابط ملف

      مع أمنياتي لك بالتوفيق

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

    1. وعليكم السلام ورحمة الله وبركاته،

      عرض الرسومات و التحدث عنها قد يكون من الطرق القوية في إيصال الفكرة يا مرام. ولكن هذه ليست الطريقة الوحيدة. بإمكانك إتباعها قطعاً.

      فيما يخص الرسومات بإمكانك إستخدام Flow chart كطريقة عرض متعارف عليها لتمثيل الخوارزميات.

  5. شكرا على الرد السريع ..
    ماهي الطرق الاخرى لايصال الفكرة للخوارزميات ؟؟
    وجزاك الله خير على ماتفعله ^_^

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

    1. مرحباً بك أخي عامر،

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

      الخوارزميات علم رائع وفكري، ليس بسيطاً أبداً. وإنما بحرٌ تحتاج إلى أن تتعلم منه ما يعينك على أداء مهامك. أما [مدخلات ثم معالجة ثم مخرجات] هي مفهوم “الخوارزمية” بمعنى خطوات معالجة مشكلة محددة.

      أتمنى لك التوفيق في عالم البرمجة.

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

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *