كيف تكون جيدًا في الخوارزميات؟

ثريدات برمجية 464 كيف تكون جيدًا في الخوارزميات؟

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

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

بدأت البرمجة عندما كنت في المدرسة الإعدادية وكان ذلك باستخدام Visual Basic ، حيث صنعت الآلات الحاسبة وأجهزة محاكاة إشارات المرور. في وقت لاحق ، تعلمت HTML و Java. في ذلك الوقت ، قمت بتطوير تطبيقات سطح المكتب وتطبيقات الويب. كان مجرد ترميز وفي بعض الأحيان لم يكن لدي أي فكرة عن
المنطق الأساسيبعد دخول الجامعة واختيار علوم وهندسة الكمبيوتر كتخصصي ، تعرفت على هياكل البيانات والخوارزميات في عامي الثاني. كانت دورة إجبارية وكان على الجميع أن يأخذوها.

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

مثال 1: فرز الخوارزميات

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

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

2: تحليل التعبيرات الرياضية

عندما ندخل تعبيرًا رياضيًا في آلة حاسبة أو في خلية في برنامج جداول بيانات مثل MS Excel يتم تقييمه تلقائيًا ويعيد لنا الإجابة هل تساءلت يومًا كيف يتم تقييم التعبير؟ كان علينا تطوير برنامج جداول بيانات وتنفيذ محلل تعبير

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

وفهم المنطق وراء هذه الاختيارات. شعرت بالفخر الشديد بنفسي بعد تطبيق خوارزمية التحويل بمفردي ، على الرغم من توفر العديد من التطبيقات بالفعل.

مثال 3: استخدام القوائم والمجموعات والقواميس

كلما احتجت إلى تخزين مجموعة من القيم ، سأستخدم قائمة. في ذلك الوقت

لم أكن أهتم بما إذا كنت بحاجة إلى الاحتفاظ بالترتيب أو السماح بالنسخ المكررة ؛ سأستخدم ببساطة قائمة لكل شيء. بعد أن تعلمت عن القوائم والمجموعات والقواميس ، أدركت أنه يمكن استخدامها في سيناريوهات مختلفة ، وأن استخدام واحد على الآخر سيؤدي في الواقع إلى تسريع الكود الخاص بي.

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

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

قبل تعلم الخوارزميات في علوم الكمبيوتر ، كان لدي فهم جيد لمفاهيم البرمجة مثل المتغيرات والوظائف والفئات وخاصة مفاهيم البرمجة الشيئية (OOP). تعمل هذه المفاهيم كأساس لفهم المفاهيم الأكثر تقدمًا في علوم الكمبيوتر. تعلم وفهم الخوارزميات ومفاهيمها بصرف النظر عن مادة الدورة التدريبية الخاصة بي ، فقد اتبعت كتابنا الدراسي الذي نوصي به "مقدمة إلى الخوارزميات" من تأليف توماس إتش كورمين وتشارلز إي ليسرسون ورونالد ريفيست وكليفورد شتاين. يمكنك البدء بالأساسيات مثل تحليل تعقيد الزمان والمكان تدوين Big O العودية هياكل البيانات الأساسية مثل المصفوفات

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

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

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

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

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

كتبه @AlyGreu