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

25  تعليق

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

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

هل أنت معي؟ سأوضح لك بمثال…

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

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

إذن الخوارزميات هي للتبسيط والتسهيل وإختصار الوقت. كما ذكرتُ لك و احفظ هذا عن ظهر قلب (الخوارزميات من أجل التبسيط).

ما هو دور الخوارزميات حتى تنال تلك الأهمية؟!!

هل تعلم أن لها أثر كبير في سرعة تطور مجال البرمجيات و إحداث طفره كبيرة فيه؟

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

و أقربُ مثال لهذا التقدُّم هو الصراف الآلي، هل تذكر تلك الصُّفوف الطويلة من أجل صرف مبلغ بسيط؟!!

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

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

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

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

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

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

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

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

لماذا؟

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

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

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

خلاصات

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

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

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

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

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

هل ترى نوعاً آخر من العلاقة بين البرمجة والخوارزميات؟ علّق أدناه


قد يعجبك أيضا

ما رأيك؟ اترك تعليقاً أدناه


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

  2. أحسنت وبارك الله فيك

    انا مهتم بعلم cnc و تحتاج إلى تصاميم g cood

    شرحك واضح ومفيد وهو تحسين اي شي مهما كان صحيح

    باادق التفاصيل

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      رابط ملف

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

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

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

{"email":"البريد الالكتروني غير صحيح","url":"رابط الموقع غير صحيح","required":"بعض الحقول المطلوبة لم تتم تعبئتها"}

نجاح!

تنبيه!

خطأ!