مسار تعلمي لحل المشكلات
السلام عليكم ورحمة الله وبركاته
الفهرس
- المقدمة
- أساسيات C++
- مواقع مفيدة
- مسائل مجمعة | Sheets
- مكتبة STL
- الخوارزميات | Algorithms
- Structured Binding
- Number Theory
- Recursion
- Graph Theory
- مقدمة
- تمثيل وبناء الـ Graph
- DFS
- Arrival and Departure time in vertices in DFS
- Types of edges in DFS
- Detect cycle in directed graph
- Topological Sorting (DAG)
- Longest Path on tree (DFS)
- BFS
- Grid (maze or 2d cell)
- Bipartite graph
- Bridges (cut edge) in graph
- Articulation point
- Strongly connected component
- Minimum spanning tree
- DP
المقدمة
هذه كانت مجرد عمل شخصي لي لتجميع المعلومات والمواقع والفيديوهات التي استفدت منها شخصيا أثناء رحلتي في عالم حل المشكلات البرمجية
تنبيه مهم جدًا
- هذه كانت تجميعة خاصة بي أنا شخصيًا اثناء رحلتي لحل المشكلات البرمجية منذ أن كنت في الكلية وأحببت أن اشاركها معكم
- لا اقول انه مسار بل هي مجرد تجميعة وملاحظات شخصية كما قلت وأنت لست مرغمًا على اتباعها بحذافيرها بالطبع
- اتمنى ان تزيد عليها وتجد مصادر أخرى وان تعتمد على هذه التجميعة كمصدر ثانوي لك (مصدر من مصادرك الأخرى للتعلم)
- ان وجدت مصدر او فيديو او مقالة جيدة ارجوا ان تشاركها معي لكي اضعها
اخر اضافاتي في هذه التجميعة كانت في 2020/8/26
وقررت ان شاركها للعامة في 2022/1/1
ملحوظة
: اي اقتراح اضافي من قبل الناس أي ليست ضمن تجميعتي الاصلية سيتم وضع علامة+
قبلها
أساسيات C++
- Adel Nasim
سلسلة جيدة لتعلم الـ
C++
- Mohamed El Desouki
أنا بدأت تعلم لبرمجة عن طريق سلسلة الدكتور محمد الدسوقي
وهي سلسلة جيدة جدًا للمبتدئين وأسلوبها أكاديمي - Mostafa Saad
سلسلة جيدة جدًا للمبتدئين وتعلم الـ
C++
من الصفر
وخصوصًا أنها من الدكتور مصطفى سعد وهو من أهم الشخصيات التي ستتعرف عليه اثناء مسيرتك في عالم حل المشكلات التنافسية
قبل ان تبدا عليك ان تعرف انك ان وقفت في مشكلة ما فيجب ان تبحث بنفسك وتقرأ مقالات وفيديوهات ولا تعتمد علي مصدر واحد ابدا
فهذه هي اسلوب الحياة في التعلم، التنوع من مصادر التعلم
مواقع مفيدة
- Geeks for Geeks هذا أعظم موقع للمقالات يجب ان تعتاد عليه وتقرأ مقالات من الآن
- Stack Overflow لا يوجد سؤال الا وعليه إجاباته
مواقع حل المشكلات البرمجية
في مواقع أخرى فيها مسائل مميزة ومتنوعة تحتاج إلى انك تفكر باحسن حل عندك مثل- leetcode
- hackerrank
- codeforces وأنصحك بتفقد هذا الرابط https://leetcode.com/explore/learn ستجد اساليب مميزة للتعلم
مسائل مجمعة | Sheets
- Sheet Assiut for Basics
تجميعة اسيوط يعد من أفضل الأشياء التي قد تبدأ فيها حل فيه لحد ما تتمكن وتعتاد علي الحل والمسائل - Sheet Moustafa Saad
بعد ما تشعر أن المسائل أصبحت سهلة وتمكنت في اللغة وحل المسائل بها
فابدأ بمصطفى سعد، حاول ان تجعل تجميعة مصطفى سعد الروتين اليومي لك
بمعنى حل مسألتينA
كل يوم واذا احسنت فيهم حل مسألتينB
وهكذا - Sheet Assiut for STl & Algorithms
عندما تنتهي من الـSTL
والـAlgorithms
يمكنك البدء في تجميعة اسيوط للـSTL
والـAlgorithms
- + Problem-Solving-Training
هذه خارطة طريق المهندس محمد أيمن لحل المشكلات
مكتبة STL
الـ STL
هي مكتبة Built in Data Structure
في لغة C++
ستفيدك جدا في حل المسائل المتقدمة وستفتح تفكيرك في استخدام افضل data structure
ووسيلة لحل المسائل
برغم من أنهم Built in Data Structure
أي انها جاهزة لك لتستخدمها الا انك يجب أن تعرف كيف بنيت
لتستطيع ان تفاضل بينها وتعرف الـ BigO
بكل واحدة منها
- Adel Nasim
- CppNuts #1
- CppNuts #2
- + Codebagel
حين تتعلم الـ 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
هي تكنيك يستخدم لحساب مجموع متتالي من الأرقام بسرعة لحظية وبدون تكرار الحساب
- Muhammed Afifi
- Mostafa Saad
- + 167. Two Sum II - Input Array Is Sorted - Problem Solving بالعربي
- + 167. Two Sum II - Input Array Is Sorted - Hash Solution - Problem Solving بالعربي
Binary Search
الـ Binary Search
هي تكنيك تستخدم عندما نبحث عن قيمة معينة في مجموعة مرتبة
Modular
فهم ما هو باقي القسمة وكيفية توظيفها واستخدامها في حل المشكلات
Structured Binding
هذه ميزة جديدة في الـ C++
تساعدك التعامل مع الـ STL
بشكل سلس
فيديوهات:
مقالات:
Number Theory
الـ Number Theory
هي من المواضيع الممتعة وتهتم بنظريات المتعلقة بالارقام وكيفية التعامل مع البيانات لعددية بشكل سريع وسلسل
Recursion
فهم الـ Recursion
وكيفية استخدامها في حل المسائل
شخبطة كنت قد كتبتها أثناء مذاكرتي عن الـ Recursion
:
ثم حولتها إلى مقالة هنا كودك بـ Recursion نفسه ؟
Graph Theory
الـ Graph
هو من أهم الـ Data Structure
التي ستتعامل معها في عالم حل المشكلات البرمجية
هذه سلسلة كاملة لتعلم الـ Graph Theory
من الصفر
- WilliamFiset
- Code NCode #1
+ Code NCode #2
ثم تاليا هي سلاسل تتحدث عن مواضيع معينة في الـ Graph Theory
مقدمة
مقدمة عن الـ Graph
وأنواعه
- WilliamFiset #1
- WilliamFiset #2
تمثيل وبناء الـ Graph
DFS
الـ DFS
هي أحد أساليب البحث في الـ Graph
ويمر دائمًا بأطول مسار ممكن في الـ Graph
- WilliamFiset #1
- WilliamFiset #2
- Muhammed Afifi #1
- Muhammed Afifi #2
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
- https://www.techiedelight.com/types-edges-involved-dfs-relation/
- https://www.geeksforgeeks.org/tree-back-edge-and-cross-edges-in-dfs-of-graph/
- Jenny
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
The Code
- بطريقة الـ
color
:
https://ideone.com/wjnbDG - بطريقة الـ
arrival
وdeparture
:
https://ideone.com/vt8RQE
- بطريقة الـ
Detect cycle in directed graph
تكنيك لمعرفة هال هناك دوائر في الـ Graph
أم لا ؟
فيديوهات:
مقالات:
- https://www.geeksforgeeks.org/detect-cycle-in-a-graph/
- https://www.geeksforgeeks.org/detect-cycle-direct-graph-using-colors/
- https://codeforces.com/blog/entry/64903
حلول كنت قد كتبتها أثناء مذاكرتي:
The Code
- بالـ
recursion
:
https://ideone.com/QIw2vh - من غير
recursion
:
https://ideone.com/xOyU65
- بالـ
Topological Sorting (DAG)
الـ Topological Sorting
هي ترتيب العقد في الـ Graph
بطريقة منطقية
فيديوهات:
حلول كنت قد كتبتها أثناء مذاكرتي:
Longest Path on tree (DFS)
كيفية ايجاد أطول مسار في الـ Tree
فيديوهات:
- SolverToBe #1
- SolverToBe #2
حلول كنت قد كتبتها أثناء مذاكرتي:
BFS
الـ BFS
هي أحد أساليب البحث في الـ Graph
ويمر دائمًا بأقصر مسار ممكن في الـ Graph
فيديوهات:
حلول كنت قد كتبتها أثناء مذاكرتي:
The Code
Grid (maze or 2d cell)
طريقة لتمثيل الـ Graph
في شكب الـ Grid
وكيفية التعامل معه وحل المسائل به
فيديوهات:
مقالات:
Bipartite graph
الـ Bipartite graph
هو الـ Graph
الذي يمكن تقسيمه إلى مجموعتين متجانستين او متباينتين
مقالات :
- https://www.techiedelight.com/determine-given-graph-bipartite-graph-using-dfs/
- https://www.geeksforgeeks.org/check-if-a-given-graph-is-bipartite-using-dfs/
حلول كنت قد كتبتها أثناء مذاكرتي:
The Code
Bridges (cut edge) in graph
الـ Bridges
هي الروابط التي اذا تم حذفها سينفصل الـ Graph
إلى قطعتين
فيديوهات:
مقالات:
- https://www.geeksforgeeks.org/bridge-in-a-graph/
- https://cp-algorithms.com/graph/bridge-searching.html
Articulation point
الـ Articulation point
هي **العقدة** التي اذا تم حذفها سينفصل الـ Graph
إلى قطعتين
فيديوهات:
مقالات:
- https://www.geeksforgeeks.org/articulation-points-or-cut-vertices-in-a-graph/
- https://cp-algorithms.com/graph/cutpoints.html
Strongly connected component
الـ Strongly connected component
هي مجموعة من العقد التي يمكن الوصول من أي عقدة فيها إلى أي عقدة أخرى
مقالات:
- https://www.techiedelight.com/check-given-graph-strongly-connected-not/
- https://www.geeksforgeeks.org/strongly-connected-components/
- https://cp-algorithms.com/graph/strongly-connected-components.html
Minimum spanning tree
الـ Minimum spanning tree
هو الـ Tree
الذي التي تكون كل العقد مرتبطة ببعض بأقل تكلفة ممكنة
DP
ااا .. اا ربنا يعينك على الـ DP
- + Errichto
- + Mostafa Saad