هل C++ مناسبة لهياكل البيانات والخوارزميات؟
هي الخيار الأكثر شيوعاً في البرمجة التنافسية وخيار قوي للمقابلات: سريعة، ومكتبتها القياسية تغطي تقريباً كل هيكل تحتاجه. والثمن شيفرة أطول وطرق أكثر للخطأ، من المؤشرات المعلّقة إلى المكرِّرات التي بطلت صلاحيتها. وبناء الهياكل بنفسك أولاً، كما يفعل هذا المسار، هو ما يجعل هذه الأخطاء لا تفاجئك.
أي حاويات STL تقابل أي هياكل بيانات؟
std::vector مصفوفة ديناميكية، وstd::stack وstd::queue مُكيِّفات (adaptors) فوق std::deque افتراضياً، وstd::list قائمة مترابطة مزدوجة، وstd::unordered_map وstd::unordered_set جداول تجزئة، وstd::priority_queue كومة ثنائية (كومة عظمى افتراضياً، بخلاف كومتي Python وJava)، وstd::map وstd::set أشجار بحث ثنائية متوازنة، وهي عملياً أشجار أحمر-أسود. ولا توجد حاوية لشجرة البادئات أو للرسم البياني؛ فهذه تكتبها أنت.
هل أنفّذ هياكل البيانات بنفسي أم أكتفي باستخدام STL؟
كلاهما، وبهذا الترتيب. نفّذ كل هيكل مرة واحدة لتعرف لماذا يتم البحث في std::unordered_map بزمن ثابت في المتوسط، ولماذا يُبقي std::map مفاتيحه مرتبة، ثم استخدم STL في كل مكان بعد ذلك. في المسابقة أو المقابلة لا أحد يتوقع منك شجرة أحمر-أسود مكتوبة يدوياً؛ بل يتوقعون أن تختار الحاوية المناسبة وتعرف تكلفتها.
C++ أم Python لتعلم DSA؟
لغة C++ إن كنت تنوي خوض البرمجة التنافسية أو إجراء مقابلات حيث تُتوقَّع منك؛ ولغة Python إن أردت أقصر طريق من الفكرة إلى شيفرة تعمل. الخوارزميات متطابقة، لذا يتعلم كثيرون بإحداهما وينافسون بالأخرى. وكل دورة هياكل بيانات في هذا المسار تُدرَّس باللغتين كلتيهما.
ما الدورات في هذا المسار التي لا تُدرَّس بلغة C++؟
دورتان: البرمجة الديناميكية وسلسلة مقابلات Python، وكلتاهما تُدرَّس بلغة Python. وهما مدرجتان بعد الخطوات، مع رابط يفتحهما بلغة Python. والأفكار تنتقل كما هي: في C++ يكون جدول النتائج المحفوظة std::vector أو std::unordered_map.
هل أحتاج إلى معرفة C++ قبل بدء هذا المسار؟
الأصناف والمؤشرات والمراجع وstd::vector على الأقل. إن كانت هذه جديدة عليك، فدورة C++ من Coddy تغطيها أولاً مجاناً، ويبدأ هذا المسار من حيث تنتهي.