كيف فزت بثلاث ميداليات ذهبية من أصل 3 في أولمبياد الحوسبة

كيف فزت بثلاث ميداليات ذهبية من أصل 3 في أولمبياد الحوسبة

كنت أستعد لنهائيات بطولة Google HashCode العالمية 2017. هذه هي أكبر مسابقة تنظمها Google فيما يتعلق بالمشاكل الخوارزمية.

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

وبعد يومين من المنافسة جاءت النتائج: فزت بالميدالية الذهبية.

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

أعرف ما الذي قادني إلى النجاح وأريد مشاركته معك.

كيف فزت بثلاث ميداليات ذهبية من أصل 3 في أولمبياد الحوسبة

تمت ترجمة المقال بدعم من EDISON Software ، والتي يعتني بصحة المبرمجين ووجبة إفطارهمو تطوير البرمجيات المخصصة.

أي لغة برمجة تختار

  • C++ - نوصي بشدة! إنه سريع جدًا. يستغرق تنفيذ الخوارزميات القليل من الوقت بسبب STL. لغة C++ مقبولة في جميع المسابقات. لقد كتبت السطر الأول من التعليمات البرمجية في C++.
  • ج - تعلم لغة C++ بسبب STL. إذا كنت تعرف لغة C، فيمكنك أيضًا البرمجة بلغة C++.
  • Java هي لغة برمجة بطيئة. يحتوي على فئة Big Integer، لكنه لن يساعدك كثيرًا. إذا كان للمنافسة حد زمني، فمن المؤكد أنك ستتجاوزه مع Java. جافا غير مقبولة في جميع المسابقات.

أين يمكنك ممارسة

أنا أوصي القاضي عبر الإنترنت (SPOJ). وهو مورد فعال من حيث الكمية والنوعية. يتوفر المحررون والحلول عبر الإنترنت إذا واجهتك مشكلة في عملية حل المشكلات. بالإضافة إلى هذا الموقع أوصي مجموعة أدوات SPOJ и مصنف المشكلة لSPOJ.pl.

أولا، تحتاج إلى صقل معرفتك بالأساسيات

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

عليك أن تجد أسلوب البرمجة الخاص بك لأنه هو أسلوبك.

عندما تبحث عنه، تذكر مبدأين أساسيين:

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

وهنا مثال لي أسلوب البرمجة.

كيفية تحسين مهاراتك التنموية

الممارسة، والممارسة ومزيد من الممارسة. أنصحك بالعمل على أول 250 مشكلة قابلة للحل SPOJ. حلها بالترتيب. اقضِ ساعة على الأقل في التفكير في حل كل واحد منهم.

لا تقل: "هذه المشكلة صعبة للغاية بالنسبة لي، سأحاول حل المشكلة التالية". هكذا يفكر الخاسرون.

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

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

ثانيًا، يجب عليك إتقان الخوارزميات وهياكل البيانات

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

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

ابدأ بالخوارزميات الأساسية وهياكل البيانات

من الصعب أن تبدأ. ربما لأنك لا تعرف ماذا تدرس أولاً. لهذا لقد قمت بإنشاء دورة فيديو "الخوارزميات وهياكل البيانات". عند إنشاء هذه الدورة التدريبية، قمت ببناءها على الطريقة التي أرغب في أن يتم تدريسها بها. كان رد الفعل لا يصدق! قام أكثر من 3000 طالب من أكثر من 100 دولة بالتسجيل في الدورة في الشهر الأول.

إذا عملت على حل المشكلات السهلة، فلن تتحسن أبدًا.

الطريقة الأكثر فعالية لفهم ما لا تعرفه هي تجربته عمليًا. هكذا تعلمت. لقد تعلمت العديد من التقنيات الجديدة التي لم أسمع بها من قبل من خلال اختيار مهمة صعبة.

كل مشكلة ثالثة تعمل عليها يجب أن تعلمك شيئًا جديدًا. كن أكثر حذرا عند اختيار المشاكل. اختر مشاكل أكثر صعوبة!

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

حفر أعمق في كل من المواضيع الرئيسية

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

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

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

وهذا جيد. لأنه إذا فهمت البرمجة الديناميكية، فسوف تفوز.

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

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

اعمل بجد

هل سمعت من قبل عن رياضيين فازوا بالأولمبياد دون سنوات من التدريب؟ أنا لا.

في كل عام، تبدأ الاستعدادات لأولمبياد الكمبيوتر في سبتمبر وتنتهي في أبريل.

كل يوم خلال هذه الأشهر الثمانية كنت أتدرب لمدة 8 ساعات.

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

إذا كنت تريد الفوز، عليك أن تفعل الشيء نفسه. اختر مشكلة والتزم بها. فكر في الأمر أثناء المشي إلى السوبر ماركت أو أثناء القيادة.

كيف فزت بثلاث ميداليات ذهبية من أصل 3 في أولمبياد الحوسبة

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

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

جربها بنفسك. إنه مثل السحر.

لقد أنشأت مدونة فيديو

كيف فزت بثلاث ميداليات ذهبية من أصل 3 في أولمبياد الحوسبة

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

اعمل بذكاء

هذا هو سر النجاح. أنت بحاجة إلى الأهداف.

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

كيفية التغلب على المماطلة

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

إذن هذه هي الطريقة التي تغلبت بها على المماطلة. لقد بدأت في إعداد تقويم ورقي وملأت كل يوم بالمشكلات التي أردت حلها. لقد قمت دائمًا بملء المشكلات قبل يومين. لذلك عرفت كيف أدير وقتي في الأيام التالية.

كيف فزت بثلاث ميداليات ذهبية من أصل 3 في أولمبياد الحوسبة

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

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

كيفية التصحيح بفعالية

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

يمكنك مقارنة نفسك باللاعب الكبير الذي يلعب الشطرنج ويفكر بثلاث خطوات للأمام.

أستخدم هذه التقنية فقط كخط دفاع أولي. ثم أستخدم مصحح أخطاء حقيقي.

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

بهذه الطريقة تفكر بنفسك. مع مرور الوقت، سوف تتعلم كتابة التعليمات البرمجية وتصحيحها بسرعة.

نبذة عن الكاتب

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

ترجمة: ديانا شيريمييفا

المصدر: www.habr.com

إضافة تعليق