أكثر من مادة نظرية ؟
مادة الخوارزميات تعد من المواد الأساسية لتخصصات تقنية المعلومات , بل وأصبحت تدرس بالمدارس , وبعد دراستها يخرج الكثير من الطلاب وحتى الذين يعملون في مجال البرمجة متسائلين عن جدوى هذا العلم في حياتهم المهنية كمهندسي برمجيات نظرا لما يقومون به عند كتابة الأكواد والحل المباشر دون تعقيد , فكل ما عليهم هو التفكير أثناء التنفيذ في الحل فإذا احتاج الأمر إلى جمل شرطية أو loop يتم كتابتها مباشرة لتحل المشكلة وينتهي الأمر بإنهاء المهام البرمجية
وفي حال أردت العمل كمهندس برمجيات في إحدى الشركات الكبرى مثل جوجل , فيسبوك , مايكروسوفت فثق تمام أنك تحتاج لمراجعة هذه المعلومة جيدا !
فهذه الشركات تبحث دائما بلا كلل ولا ملل عن تحسين خوارزمياتها لتوفر مصادر إستهلاكها (السعة) وتزيد السرعة (الوقت) , وبالتأكيد وحدها العقول من تستطيع كتابة أفضل الخوارزميات
كما أنه في حال ما أردنا بناء تطبيق على المدى البعيد , علينا دائما بالتفكير في أفضل الخوارزميات قبل تنفيذ الكود
مثال بسيط يوضح الفرق ..
عندما نحتاج لحساب مجموع رقم من 1 إلى الرقم مثل 4 -> 3 + 2 + 1 = 6
فإن أحد الحلول السريعة
int sum = 0 ;
int count = 1 ;
while ( count <= num )
{
sum += count ;
count++ ;
return sum;
}
بينما يمكننا الإستعاضة عنها بواسطة معادلة جاوس
{
return ( num * ( num + 1 ) ) / 2 ;
}
وهنا إختلاف واضح في مدى سرعة وتوفير المصادر , فالمثال الأول نحتاج عند جمعنا ل 100 لتكلفة 100 عملية أي أن تكلفة العمليات تساوي قيمة المدخل (O(n , بينما في حالة جاوس فهي تكلفة عملية واحدة (O(1 أي أستطيع تنفيذ 100 عملية من جاوس بمقابل عملية واحدة لجمع 100 في المثال الأول !
كيف بإمكاني التطبيق الفعلي للخوارزميات ؟
أولا : خطط قبل كتابة الكود
لاتباشر حل المشكلة وكأنك تجيد الحل , بل خطط لأن التخطيط يساعدك بشكل كبير على تحليل المشكلة ومحاولة تبسيطها , ومقارنتها بحلول اخرى
ثانيا : حدد نوع المشكلة
لحل المشكلة يجب أن تحدد أي نوع , ومعرفتك لأسس الخوارزميات يساعدك في معرفة وتحديد نوع المشكلة أو أقرب طريقة لحلها
ثالثا: البحث عن حل أو مايشابه
لابد أن هناك حل للمشكلة التي تريد حلها , وقد تطور حلها مرارا وتكرارا , ومطالعتك للحلول بشكل دائم يبقيك دائما على معرفه بأهم الحلول , فهناك جهد كبير لمؤلفين ومطورين يقومون بتصنيف المشكلات وتقسيمها , يمكننا البحث في الخوارزميات المتوفرة وتصنيفاتها تبعا لنوع المشكلة وتحويلها إلى كود جاهز باللغة التي نعمل بها.
رابعا : المحاولة في التحسين الدائم
الحل المميز يأتي من سلسلة من المحاولات , ولذلك وضع علامات في المشاكل المعقدة تحديدا للإشارة إلى إمكانية الحل بخوارزميات اخرى بأداء أفضل , حتى تصل لحل بالمستوى المطلوب
قبل نهاية تدوينتي , أود الإشارة إلى أن الأساس مهم جدا وعلينا الإطلاع الدائم على الحلول لأن الخوارزميات ترتبط بشكل مباشر في علم الرياضيات وليس من السهل للمطورين الإلمام بالمعادلات الرياضية
دمتم بود
إلى تدوينة أخرى