2- تعلم ثلاثة من أهم Non-linear Data Structures وهم:
1- Set
2- Map
3- Priority Queue
3- تعلم كيفية توظيف هياكل البيانات في حل المشاكل، وتنفيذها بكفاءة عالية باستخدام لغة C++.
هنتعلم ايه جديد؟
- هنكمل كلامنا على الـ C++ STL وقولنا إنها اختصار لـ Standard Template Library ودي من أهم مميزات لغة الـ C++ عن لغة الـ C، والمكتبة دي بتوفرلنا 4 حاجات مختلفة:
1- Containers.
2- Iterators.
3- Algorithms.
4- Functions.
- اتعرضنا قبل كدا لأجزاء كتيرة من STL منهم containers زي pair وvector وstack وqueue وdeque ومنهم algorithms زي sort وreverse وmax_element وcount وfind وerase وغيرهم كتير.
- ومهم جدا تكون عارف إن C++ STL من أحد أسباب قوة الـ C++ وشيوع إستخدامها في مسابقات البرمجة.
- هنتعرض لمعظم أجزاء C++ STL خلال التدريب بإذن الله.
- الصورة دي بتوضح تصنيف الـ Containers في C++ STL:
- الأسبوع دا هنتعرض لثلاثة من الـ non-linear containers وهما:
1- Set (Ordered, Unordered)
2- Map (Ordered, Unordered)
3- Priority Queue (Max, Min)
- هنتعرف كمان على Iterators وايه فائدتها وايه أنواعها المختلفة وازاي نتعامل معاها.
- يهمك جدا في أي Data Structure تتعلمها لأول مرة تعرف عنها الآتي:
1- طريقة عملها أو وظيفتها أو المشكلة اللي هي بتحلها.
2- تعرف أهم الـ Functions اللي بتوفرها الـ Data Structure دي والـ Operations اللي ممكن تتعمل عليها.
3- تعرف الـ Complexity الخاصة بكل Function وOperation.
4- يهمك برضو تعرف الـ Implementation بتاعها، ودا هيساعدك تفهم أكتر الـ Complexity ولكن الـ implementation نفسه مش دايما هيفيدك في مسابقات البرمجة لإنها بالفعل implemented في الـ C++ STL، بس هيفيدك في حياتك العملية أكتر وممكن تحتاج في يوم تكتب الـ Data Structure دي بايدك لغرض معين أو بسبب إنها مش موجودة أصلا في مكتبات لغة البرمجة زي لغة الـ C.
- مش مطلوب منك تكتب الـ implementation خالص خلال التدريب، ولكن هتستخدم كل حاجة جاهزة من C++ STL، وتركيزنا هيكون على ازاي نوظف كل Data Structure هنتعلمها في حل المشاكل المختلفة.
- ملاحظة هامة: ممكن تركز على جزء الـ Priority Queue فقط من الفيديو وتعرضنا للأجزاء الأخرى في الأسابيع الماضية.
ملاحظات هامة جدا:
1- دلوقتي مهم جدا يكون عندك المقدرة إنك تكتب Compare function وتستخدمها مع أي data structure اتعلمتها سواء كانت linear أو non-linear، لو لسه عندك مشكلة راجع الفيديو دا:
2- أحيانا ممكن نوفر على نفسنا وقت كتابة الـ Comparator في حالة إننا عايزين نرتب الأرقام تنازليا عن طريق عكس إشارة الأرقام المخزنة فقط، مع مراعاة عكس إشارتها مرة تانية قبل ما نعمل عليها أي عمليات.
3- معظم المشاكل اللي بتتطلب Priority Queue يمكن حلها عن طريق Set of pairs، ولكن في التدريب هنلتزم إننا نحل بإستخدام الاتنين عشان نتقنهم.
4- اتعود دايما تبعد عن أي حل non-linear مادام في حل أسرع منه. على سبيل المثال بلاش تستسهل وتستخدم map دايما بدل frequency array حتى لو الأرقام صغيرة.
5- لازم تعرف إن كل non-linear data structures بتحجز memory أكبر وبالتالي لازم تخلي بالك دايما لو في بديل more effiecent.