إتفقت معك في هذه التدوينة أن معرفتك بالخوارزميات وطريقة عملها فقط ليس كافياً لتكون متميزا في مجال البرمجة، فيجب عليك معرفة الخوارزمية التي تتناسب مع المشكلة التي تواجهك، بحيث تختصر لك الوقت والمجهود، لكن كيف تعرف الخوارزمية التي تناسبك من غيرها ؟ الإجابة : عن طريق تحليل الخوارزمية. فستسألني، كيف أحلل الخوارزمية؟!!
قبل الإجابة على هذا السؤال لنتعرف أولاً على المفاهيم التالية :
أُسس إختيار و كتابة الخوارزمية :
عندما ترغب بكتابة خوارزمية لحل مشكلة ما أو ان تختار خوارزمية من بين عده خوارزميات هنالك أسس يجب أن تتبعها ومن هذه الأسس:
1- البساطة : أي يجب عليك إختيار أو كتابة خوارزمية بسيطة وواضحة ويمكن فهمها ، وكلما كانت الخوارزمية بسيطة وسهلة الفهم كان من السهل تحويلها لبرنامج بلغة البرمجة التي تريدها.
2- العمومية : إذاً ماذا نعني بأن تكون الخوارزمية عمومية؟ العمومية تعني أن الخوارزمية تعمل في نطاق واسع، و لمزيد من التحديد لمعنى نطاق واسع ؟ سأجيب عنك بمثال : إذا أنشأت خوارزمية لجمع رقمين صحيحين فإن العمومية هنا أن نجعل الخوارزمية تقبل وتجمع أي عدد حقيقي و ليس الأعداد الحقيقية فقط.
3- الكفاءة : وهذا الأساس هو الأهم وهذا ما يجيبنا على سؤال كيف أعرف أن هذه هي الخوارزمية تتناسب مع مشكلتي ؟ تكون الخوارزمية مناسبة للمشكلة المعينة إذا كانت تحل هذه المشكلة بكفاءة عالية.
كثيراً ما تسمع من المسوقين و منتجي البرامج و المعلنين أن هذا البرنامج يعمل بكفاءة عالية، و كل من يقتني منتجاً يرغب في منتج يعمل بكفاءة عالية، و لكن هل هي كلمة تُطلق كصفة غير قابلة للقياس مثل جميل و جذاب أم أنها قابلة للقياس؟ قابلة للقياس طبعاً و بإمكانك أن تخبر أحدهم أن برنامجك ذو كفاءة متوسطة أو قليلة. إذاً ما هي الكفاءة وما هي مقاييس الكفاءة ؟ ومتى تكون الخوارزمية أكفأ من غيرها في حل المشكلة؟ لنتحدث أولا عن الأهم فالمهم.
مقاييس الكفاءة :
يوجد مقياسان للكفاءة وهما سعة التخزين والوقت.نقول أن الخوارزمية ذات كفاءة عالية إذا كانت لا تستهلك ذاكرة كبيرة ولا تستهلك وقتاً طويلاً للتنفيذ .
لكن اليوم مسألة التخزين هذه لا تشكل مشكلة كبيرة تحط من كفاءة الخوارزمية لتوفر مساحات التخزين وبسعات كبيرة بعتاد الحاسب ، المشكلة الحقيقة هي التي تتعلق بالوقت فكلما كانت الخوارزمية تأخذ وقتاً أطول في التنفيذ كانت كفاءتها منخفضة .
بعد معرفة هذه المصطلحات هيا لنعود لنجيب على السؤال الذي طرحناه إبتداءً، كيف أحلل الخوارزمية؟ و للإجابة جزءان يجب أن تعرفهمها : ما هو تحليل الخوارزميات ثم كيف تُحلل الخوارزمية.
تحليل الخوارزمية :
نقصد به تحديد أو حساب الموارد التي تحتاجها الخوارزمية للتنفيذ . الموارد التي نتحدث عنها هنا هي الموارد التي تستغلها الخوارزمية من عتاد الحاسب حتى تكمل التنفيذ مثل ذاكرة التخزين ووقت تنفيذ. لكن ما يهم هو حساب زمن التنفيذ.
كيف تحلل الخوارزمية :
أو كيف تحسب زمن التنفيذ، بإعتبار الكمبيوتر هو النموذج الذي ستعمل عليه الخوارزمية إذا كانت الخوارزمية التي إخترتها أو قمت بإنشائها تحتوي على عمليات رياضية مثل الجمع ، الطرح ، القسمة والضرب فإن هذه العمليات تأخذ وقت ثابتا يمكنك ان ترمز له بالحرف ت ، وكذلك عمليات النسخ والتحميل والحفظ تأخذ وقتا ثابتا وكذلك يمكن أن ترمز له بالحرف ت ، و إذا أردت تحريك عنصر معين في مصفوفة حجمها ن لتضعه في مكانه الصحيح في الترتيب فإنه يأخذ زمناً خطياً ن وهكذا .
حتى هذه اللحظة وضحتُ لك مفاهيم نظرية مهمة جداً بتحليل الخوارزميات، إذا رغبت أن تجري عملياً تحليلات لبعض الخوارزميات و ترى كيف يُجرى التحليل تابعنا على مدونة علوم.