السلام عليكم أيها الأحبة الكرام متابعين منتدى الفريق العربي للبرمجة، سأطرح لكم في هذه الفترة كورس متكامل حول تصميم وتحليل الخوارزميات،ويسرني أن تتابعوني …نأتي اليوم إلى أول درس في هذا الكورس.
في الدرس الأول من هذا الكورس "تحليل وتصميم الخوارزميات"،سأقوم بتقسيمه إلى ثلاثة أجزاء وتناولها كلا على حدة.
وهي:-
1- مقدمة عامة حول الخوارزميات
2- نظرة عامة حول الكورس
3- الأهداف الرئيسية لهذا الكورس
مقدمة عامة حول الخوارزميات
في ثلاثينيات القرن الماضي،ابتدأ علماء الرياضيات بالاهتمام بالخوارزميات حيث قاموا بإضفاء الطابع الرسمي في دراسة مفهوم الخوارزمية. وهذه الدراسة كانت متبوعة بتطوير الحواسيب الالكترونية ومن ثم أدى إلى تطوير الكثير من الخوارزميات المهمة والفعالة.
وكانت الدوافع والمحفزات من وراء هذا الاهتمام من أجل التغلب على مشكلة محدودية وكلفة الموارد من أجهزة الكمبيوتر.وحفزت هذه المحدودية كل من علماء الكمبيوتر والرياضيات على حد سواء إلى الاهتمام بأداء البرامج وكذلك الاهتمام بتصميم خوارزميات الحاسوب ذات الكفاءة العالية.
تعريف : الخوارزمية مصطلح يشير إلى مجموعة محدودة من الخطوات، كل واحد من هذه الخطوات قد تتطلب واحد أو أكثر من العمليات، وإذا ما تم تنفيذ هذه الخطوات سوف تنتج واحد أو أكثر من النواتج بعد فترة محدودة من الوقت.
ولكن هناك مجموعة من القيود على نوع العمليات التي يمكن أن تتضمن الخوارزمية وهي:
1. الوضوح : يجب إن تكون المشكلة التي تعالجها واضحة، أي يجب أن يكون واضح ما ينبغي عمله
2. الفعالية : كل خطوة -من حيث المبدأ- يمكن أن يقوم بتنفيذها أي شخص في كمية محدودة من الوقت
3. المحدودية :ويجب أن يكون للخوارزمية عدد محدود من العمليات على الخوارزمية
4. يجب أن يكون للخوارزمية واحد أو أكثر من النواتج وصفر أو أكثر من المدخلات
المترجمات وأنظمة التشغيل التي تصادفها في علوم الكمبيوتر من التطبيقات المباشرة على الخوارزميات للأغراض خاصة.
هذه النظم هي البرمجيات و الإجراءات الحسابية التي تتكون من مجموعة محدودة من الخطوات، والتي بالنظر إلى أحد المدخلات من بعض مجموعة من المدخلات الممكنة،سيمكننا من الحصول على هذا الإنتاج إذا وجد ناتج وإلا عدم الحصول على إي شيء على الإطلاق إذا لم يكن هناك ناتج لهذه المدخلات.
وهنالك فرق كبير بين الخوارزمية والإجراءات العادية (وهذا ونحن على دراية) هو أن الخوارزمية ينبغي أن تتوقف دائما بعد فترة محدودة من الوقت في حين الإجراء العادي قد يستمر في حلقة لا نهائية.
نظرة عامة حول الكورس:
وقد أدى وجه التشابه بين الخوارزميات المختلفة لفئات معينة من المشاكل بشكل عام إلى وضع تقنيات لتصميم الخوارزمية بمرونة عالية لتعطي مردود أكثر.ويمكن اعتبار هذا الكورس على أنها محاولة لتغطية التقنيات الأكثر شيوعا في تصميم خوارزميات متسلسلة ومتتابعة.
وبطبيعة الحال إن هذا الكورس يغطي العنصر الرئيسي الآخر، ألا وهو تحليل الخوارزميات. وهو يغطي بالتفصيل تحليل معظم الخوارزميات المتقدمة.وبالطبع سيشمل أيضا بعض الأدوات الرياضية التي تساعد في تحليل الخوارزميات.
أن التركيز في هذه الدورة هو على التطبيقات العملية لتقنيات التصميم، وتتضح كل تقنية من خلال توفير عدد كاف من الخوارزميات لحل بعض المشاكل التي تنشأ في كثير من الأحيان في العديد من التطبيقات في العلوم والهندسة.
وفي هذا الكورس سيكون أسلوب عرض الخوارزميات واضحة وسهلة المتابعة.
وسنستخدم شبه الكود "pseudo code" مماثلة لبناء الجمل بلغات البرمجة تنظيما لكتابة الخوارزمية. ومن بعض هذه التركيبات هي:
if-then-else
for / end for
while / end while
repeat / until
في بعض الأحيان، يتم خلط شبه الكود مع الانجليزية أو العربية عند الضرورة. ووصف جزءا من الخوارزمية باللغة الإنجليزية أو العربية ينقل الفكرة مع أدنى جهد من جانب القارئ.
بل هو أيضا في بعض الأحيان على حد سواء أسهل وأكثر رسمية إلى استخدام عبارة شبه الكود.
على سبيل المثال،إن وظيفة عبارة التعيين:
Β[1 .. η] <-- Α [1 .. η]
هي استبدال كل عنصر أو إدخال من B[ί] من مجموعة B في A[ί] من مجموعة A لجميع ί ، 1≤ ί ≤ η
*وينقسم الكورس إلى ستة أجزاء رئيسية:
- المفاهيم الأساسية في تحليل الخوارزمية
- الأدوات الرياضية الأساسية
- هياكل البيانات الأساسية
- تقنيات تصميم الخوارزميات
- دراسة متعمقة في بعض الخوارزميات الرئيسية
- NP-completeness
[title]أهداف الكورس:[/title]
يجب على المتابع للكورس:
• معرفة المفاهيم الأساسية والتقنيات في مجال تحليل الخوارزمية مثل:
- الصيغ التقاربية
- الحالة الأسوأ
- الحالة الوسطى
- الحالة الأفضل
- .تحليل استهلاكها
- التعقيد الفراغي
الخ......
• تكون قادرا على تنظيم ما تعرف عن العديد من الخوارزميات المهمة والجيدة بطريقة متماسكة تكون فيها على دراية بتقنيات تصميم الخوارزمية الأكثر شيوعا.
• تكون قادر على استخدام مختلف تقنيات تصميم الخوارزمية وأدوات تحليل الخوارزمية لتطوير وتحليل خوارزميات جديدة وفعالة من أجل حل المشاكل الحقيقة التي تنشأ في كثير من الأحيان في تطبيقات الحاسب الآلي
• أن تكون قادر على الرد على مجموعة لخوارزمية جديدة منها:
- ما مدى جودة هذه الخوارزمية؟
- هل يوجد وسيلة أفضل لحل هذه الخوارزمية أو تطويرها؟
• معرفة NP-Completeness ومعرفة بعض مشاكل NP-Complete و NP-Hard
مع السلامة والى اللقاء في الدرس القادم