مسار تعلمي لحل المشكلات

السلام عليكم ورحمة الله وبركاته

وقت القراءة: ≈ 10 دقائق

المقدمة

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

اخر اضافاتي في هذه التجميعة كانت في 2020/8/26 وقررت ان شاركها للعامة في 2022/1/1

ملحوظة: اي اقتراح اضافي من قبل الناس أي ليست ضمن تجميعتي الاصلية سيتم وضع علامة + قبلها

أساسيات C++

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

مواقع مفيدة

مسائل مجمعة | Sheets

مكتبة STL

الـ STL هي مكتبة Built in Data Structure في لغة C++
ستفيدك جدا في حل المسائل المتقدمة وستفتح تفكيرك في استخدام افضل data structure ووسيلة لحل المسائل

برغم من أنهم Built in Data Structure أي انها جاهزة لك لتستخدمها الا انك يجب أن تعرف كيف بنيت
لتستطيع ان تفاضل بينها وتعرف الـ BigO بكل واحدة منها

حين تتعلم الـ BigO ستستطيع المقارنة والاختيار مابين STL المختلفة
من المهم جدا أن تأخذ مادة Data Structure قبل ان تبدأ في الـ STL
لتعرف كيف يتم بناء الـ Data Structure
لان هذا سيسهل عليك اشياء كثيرة وستفهم الـ STL بشكل أفضل وتستطيع ان تفاضل وتختار ما بينهم

وهناك اشياء من الصعب أن تفهمها أو تحلها الا من خلال معرفة كيف تم بناء الـ STL من الداخل

ملحوظة: الـ STL هي مكتبة خاصة بالـ C++ لكن ستجد أن جميع لغات اعالم لديها مكاتب مشابهة وتتبع نفس الـ Data Structure ونفس البناء ونفس الـ BigO لذا لا تقلق من أنك تتعلم مكتبة خاصة بلغة معينة لانك دائمًا ما ستجد مكتبة مماثلة في اللغات الاخرى تبع نفس المبدأ

الخوارزميات | Algorithms

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

Complexity

اهم شيء تتعلم كيف تحسب الـ BigO الخاصة بالكود لكي تستطيع أن تختار افضل خوارزمية واحسن حل للمشكلة

Overflow Problem

مشكلة الـ Overflow قد تواجهك في بعض الحالات لا عليك ان تكون واعي بها ومتى تحدث وكيف نتجنبها

Two Pointers

الـ Two Pointers هي تكنيك يستخدم لحل مسائل متنوعة تحتاج الى تحرك بنقطتين في الوقت نفسه

Prefix Sum

الـ Prefix Sum هي تكنيك يستخدم لحساب مجموع متتالي من الأرقام بسرعة لحظية وبدون تكرار الحساب

الـ Binary Search هي تكنيك تستخدم عندما نبحث عن قيمة معينة في مجموعة مرتبة

Modular

فهم ما هو باقي القسمة وكيفية توظيفها واستخدامها في حل المشكلات

Structured Binding

هذه ميزة جديدة في الـ C++ تساعدك التعامل مع الـ STL بشكل سلس

فيديوهات:

مقالات:

Number Theory

الـ Number Theory هي من المواضيع الممتعة وتهتم بنظريات المتعلقة بالارقام وكيفية التعامل مع البيانات لعددية بشكل سريع وسلسل

Recursion

فهم الـ Recursion وكيفية استخدامها في حل المسائل

شخبطة كنت قد كتبتها أثناء مذاكرتي عن الـ Recursion:

ثم حولتها إلى مقالة هنا كودك بـ Recursion نفسه ؟

Graph Theory

الـ Graph هو من أهم الـ Data Structure التي ستتعامل معها في عالم حل المشكلات البرمجية
هذه سلسلة كاملة لتعلم الـ Graph Theory من الصفر

ثم تاليا هي سلاسل تتحدث عن مواضيع معينة في الـ Graph Theory

مقدمة

مقدمة عن الـ Graph وأنواعه

تمثيل وبناء الـ Graph

DFS

الـ DFS هي أحد أساليب البحث في الـ Graph
ويمر دائمًا بأطول مسار ممكن في الـ Graph

Arrival and Departure time in vertices in DFS

هذه مجرد فكرة لتتبع خط السير في الـ DFS ومعرفة وقت الوصول والمغادرة لكل عقدة

ملحوظة: إن اردنا معرفة هل الجراف متصل ام لا نطبق المعادلة التالية نمسك أول عقدة لو كان وقت البداية يساوي 0 ووقت النهاية يساوي (عدد العقد \ 2) - 1

check first Node
if Arrival = 0 and Departure = Nodes * 2 - 1
then the graph is Connected

Types of edges in DFS

شرح لأنواع الـ Edges او الحواف في الـ DFS

Path X -> Y

Back Edge :
if Arrival of  Y < Arrival of X
then there is a path from Y to X

Cross Edge :
if Arrival of  Y < Arrival of X
then there is NO path from Y to X

Forward Edge :
if Arrival of X < Arrival of Y
then there is a path from X to Y

Detect cycle in directed graph

تكنيك لمعرفة هال هناك دوائر في الـ Graph أم لا ؟

فيديوهات:

مقالات:

حلول كنت قد كتبتها أثناء مذاكرتي:

Topological Sorting (DAG)

الـ Topological Sorting هي ترتيب العقد في الـ Graph بطريقة منطقية

فيديوهات:

حلول كنت قد كتبتها أثناء مذاكرتي:

Longest Path on tree (DFS)

كيفية ايجاد أطول مسار في الـ Tree

فيديوهات:

حلول كنت قد كتبتها أثناء مذاكرتي:

BFS

الـ BFS هي أحد أساليب البحث في الـ Graph
ويمر دائمًا بأقصر مسار ممكن في الـ Graph

فيديوهات:

حلول كنت قد كتبتها أثناء مذاكرتي:

Grid (maze or 2d cell)

طريقة لتمثيل الـ Graph في شكب الـ Grid وكيفية التعامل معه وحل المسائل به

فيديوهات:

مقالات:

Bipartite graph

الـ Bipartite graph هو الـ Graph الذي يمكن تقسيمه إلى مجموعتين متجانستين او متباينتين

مقالات :

حلول كنت قد كتبتها أثناء مذاكرتي:

Bridges (cut edge) in graph

الـ Bridges هي الحواف التي اذا تم حذفها سينفصل الـ Graph إلى قطعتين

فيديوهات:

مقالات:

Articulation point

الـ Articulation point هي **العقدة** التي اذا تم حذفها سينفصل الـ Graph إلى قطعتين

فيديوهات:

مقالات:

Strongly connected component

الـ Strongly connected component هي مجموعة من العقد التي يمكن الوصول من أي عقدة فيها إلى أي عقدة أخرى

مقالات:

Minimum spanning tree

الـ Minimum spanning tree هو الـ Tree الذي التي تكون كل العقد مرتبطة ببعض بأقل تكلفة ممكنة

DP

ااا .. اا ربنا يعينك على الـ DP