|
@@ -894,69 +894,68 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
|
|
|
|
|
|
If you need more detail on this subject, see "Sorting" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects)
|
|
If you need more detail on this subject, see "Sorting" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects)
|
|
|
|
|
|
-## Graphs
|
|
|
|
-
|
|
|
|
-Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were.
|
|
|
|
-
|
|
|
|
-- Notes from Yegge:
|
|
|
|
- - There are three basic ways to represent a graph in memory:
|
|
|
|
- - objects and pointers
|
|
|
|
- - matrix
|
|
|
|
- - adjacency list
|
|
|
|
- - Familiarize yourself with each representation and its pros & cons
|
|
|
|
- - BFS and DFS - know their computational complexity, their tradeoffs, and how to implement them in real code
|
|
|
|
- - When asked a question, look for a graph-based solution first, then move on if none.
|
|
|
|
-
|
|
|
|
-- [ ] Skiena Lectures - great intro:
|
|
|
|
- - [ ] [CSE373 2012 - Lecture 11 - Graph Data Structures (video)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11)
|
|
|
|
- - [ ] [CSE373 2012 - Lecture 12 - Breadth-First Search (video)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12)
|
|
|
|
- - [ ] [CSE373 2012 - Lecture 13 - Graph Algorithms (video)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13)
|
|
|
|
- - [ ] [CSE373 2012 - Lecture 14 - Graph Algorithms (con't) (video)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
|
|
|
|
- - [ ] [CSE373 2012 - Lecture 15 - Graph Algorithms (con't 2) (video)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
|
|
|
|
- - [ ] [CSE373 2012 - Lecture 16 - Graph Algorithms (con't 3) (video)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
|
|
|
|
-
|
|
|
|
-- [ ] Graphs (review and more):
|
|
|
|
-
|
|
|
|
- - [ ] [6.006 Single-Source Shortest Paths Problem (video)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
|
|
|
|
- - [ ] [6.006 Dijkstra (video)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
|
|
|
|
- - [ ] [6.006 Bellman-Ford (video)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17)
|
|
|
|
- - [ ] [6.006 Speeding Up Dijkstra (video)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18)
|
|
|
|
- - [ ] [Aduni: Graph Algorithms I - Topological Sorting, Minimum Spanning Trees, Prim's Algorithm - Lecture 6 (video)]( https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
|
|
|
|
- - [ ] [Aduni: Graph Algorithms II - DFS, BFS, Kruskal's Algorithm, Union Find Data Structure - Lecture 7 (video)]( https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7)
|
|
|
|
- - [ ] [Aduni: Graph Algorithms III: Shortest Path - Lecture 8 (video)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8)
|
|
|
|
- - [ ] [Aduni: Graph Alg. IV: Intro to geometric algorithms - Lecture 9 (video)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9)
|
|
|
|
- - [ ] [CS 61B 2014 (starting at 58:09) (video)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489)
|
|
|
|
- - [ ] [CS 61B 2014: Weighted graphs (video)](https://www.youtube.com/watch?v=aJjlQCFwylA&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=19)
|
|
|
|
- - [ ] [Greedy Algorithms: Minimum Spanning Tree (video)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
|
|
|
|
- - [ ] [Strongly Connected Components Kosaraju's Algorithm Graph Algorithm (video)](https://www.youtube.com/watch?v=RpgcYiky7uw)
|
|
|
|
-
|
|
|
|
-- Full Coursera Course:
|
|
|
|
- - [ ] [Algorithms on Graphs (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome)
|
|
|
|
-
|
|
|
|
-- Yegge: If you get a chance, try to study up on fancier algorithms:
|
|
|
|
- - [ ] Dijkstra's algorithm - see above - 6.006
|
|
|
|
|
|
+## Графы
|
|
|
|
+Графы могут быть использованы для представления многих задач в области CS, поэтому раздел включает в себя такие темы как деревья и сортировку.
|
|
|
|
+
|
|
|
|
+- Заметки от Стива Йеги:
|
|
|
|
+ - Существуют три основных способа представления графа в памяти:
|
|
|
|
+ - объекты и указатели
|
|
|
|
+ - матрица
|
|
|
|
+ - список смежности
|
|
|
|
+ - Ознакомьтесь с каждым представлением, его преимуществами и недостатками
|
|
|
|
+ - BFS и DFS - узнайте их вычислительную сложность, соотношение преимуществ и недостатков, способы реализации в коде
|
|
|
|
+ - Когда вы получили задачу, в первую очередь попробуйте построить свое решение с использованием графов, а затем двигайтесь дальше, если такого решения нет.
|
|
|
|
+
|
|
|
|
+- [ ] Лекции профессора Стивена Скина - хорошее введение:
|
|
|
|
+ - [ ] [CSE373 2012 - Лекция 11 - Структуры данных для представления графов (видео)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11)
|
|
|
|
+ - [ ] [CSE373 2012 - Лекция 12 - Поиск в ширину (видео)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12)
|
|
|
|
+ - [ ] [CSE373 2012 - Лекция 13 - Алгоритмы на графах (видео)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13)
|
|
|
|
+ - [ ] [CSE373 2012 - Лекция 14 - Алгоритмы на графах (продолжение) (видео)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
|
|
|
|
+ - [ ] [CSE373 2012 - Лекция 15 - Алгоритмы на графах (продолжение 2) (видео)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
|
|
|
|
+ - [ ] [CSE373 2012 - Лекция 16 - Алгоритмы на графах (продолжение 3) (видео)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
|
|
|
|
+
|
|
|
|
+- [ ] Графы (обзор и многое другое):
|
|
|
|
+
|
|
|
|
+ - [ ] [6.006 Задача поиска кратчайших путей из одной вершины (видео)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
|
|
|
|
+ - [ ] [6.006 Алгоритм Дейкстры (видео)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
|
|
|
|
+ - [ ] [6.006 Алгоритм Беллмана-Форда (видео)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17)
|
|
|
|
+ - [ ] [6.006 Оптимизация алгоритма Дейкстры (видео)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18)
|
|
|
|
+ - [ ] [Aduni: Алгоритмы на графах I: Топологическая сортировка, Минимальное остовное дерево, Алгоритм Прима - Лекция 6 (видео)]( https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
|
|
|
|
+ - [ ] [Aduni: Алгоритмы на графах II: DFS, BFS, Алгоритм Краскала, Система непересекающихся множеств - Лекция 7 (видео)]( https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7)
|
|
|
|
+ - [ ] [Aduni: Алгоритмы на графах III: Кратчайший путь - Лекция 8 (видео)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8)
|
|
|
|
+ - [ ] [Aduni: Алгоритмы на графах IV: Введение в геометрические алгоритмы - Лекция 9 (видео)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9)
|
|
|
|
+ - [ ] [CS 61B 2014 (начиная с 58:09) (видео)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489)
|
|
|
|
+ - [ ] [CS 61B 2014: Взвешенные графы (видео)](https://www.youtube.com/watch?v=aJjlQCFwylA&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=19)
|
|
|
|
+ - [ ] [Жадные алгоритмы: Минимальное остовное дерево (видео)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
|
|
|
|
+ - [ ] [Сильно связные компоненты, Алгоритм Косарайю, Алгоритмы на графах (видео)](https://www.youtube.com/watch?v=RpgcYiky7uw)
|
|
|
|
+
|
|
|
|
+- Полный курс на Coursera:
|
|
|
|
+ - [ ] [Алгоритмы на графах (видео)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome)
|
|
|
|
+
|
|
|
|
+- Стив Йеги: Если у вас есть возможность, попробуйте изучить более продвинутые алгоритмы:
|
|
|
|
+ - [ ] Алгоритм Дейкстры - смотри выше - 6.006
|
|
- [ ] A*
|
|
- [ ] A*
|
|
- - [ ] [A Search Algorithm](https://en.wikipedia.org/wiki/A*_search_algorithm)
|
|
|
|
- - [ ] [A* Pathfinding Tutorial (video)](https://www.youtube.com/watch?v=KNXfSOx4eEE)
|
|
|
|
- - [ ] [A* Pathfinding (E01: algorithm explanation) (video)](https://www.youtube.com/watch?v=-L-WgKMFuhE)
|
|
|
|
-
|
|
|
|
-- I'll implement:
|
|
|
|
- - [ ] DFS with adjacency list (recursive)
|
|
|
|
- - [ ] DFS with adjacency list (iterative with stack)
|
|
|
|
- - [ ] DFS with adjacency matrix (recursive)
|
|
|
|
- - [ ] DFS with adjacency matrix (iterative with stack)
|
|
|
|
- - [ ] BFS with adjacency list
|
|
|
|
- - [ ] BFS with adjacency matrix
|
|
|
|
- - [ ] single-source shortest path (Dijkstra)
|
|
|
|
- - [ ] minimum spanning tree
|
|
|
|
- - DFS-based algorithms (see Aduni videos above):
|
|
|
|
- - [ ] check for cycle (needed for topological sort, since we'll check for cycle before starting)
|
|
|
|
- - [ ] topological sort
|
|
|
|
- - [ ] count connected components in a graph
|
|
|
|
- - [ ] list strongly connected components
|
|
|
|
- - [ ] check for bipartite graph
|
|
|
|
-
|
|
|
|
-You'll get more graph practice in Skiena's book (see Books section below) and the interview books
|
|
|
|
|
|
+ - [ ] [Алгоритм поиска A](https://en.wikipedia.org/wiki/A*_search_algorithm)
|
|
|
|
+ - [ ] [Учебное пособие по основам алгоритма поиска пути A* (видео)](https://www.youtube.com/watch?v=KNXfSOx4eEE)
|
|
|
|
+ - [ ] [Поиск пути A* (E01: объяснение алгоритма) (видео)](https://www.youtube.com/watch?v=-L-WgKMFuhE)
|
|
|
|
+
|
|
|
|
+- Я смогу применить:
|
|
|
|
+ - [ ] DFS со списком смежности (рекурсия)
|
|
|
|
+ - [ ] DFS со списком смежности (итерационный подход со стеком)
|
|
|
|
+ - [ ] DFS с матрицей смежности (рекурсия)
|
|
|
|
+ - [ ] DFS с матрицей смежности (итерационный подход со стеком)
|
|
|
|
+ - [ ] BFS со списком смежности
|
|
|
|
+ - [ ] BFS с матрицей смежности
|
|
|
|
+ - [ ] Поиск кратчайшего пути из одной вершины (алгоритм Дейкстры)
|
|
|
|
+ - [ ] Минимальное остовное дерево
|
|
|
|
+ - Алгоритмы основанные на DFS (см видео Aduni выше):
|
|
|
|
+ - [ ] Поиск циклов в графе (необходимо для топологической сортировки, так как мы проверяем наличие циклов в графе перед началом работы алгоритма)
|
|
|
|
+ - [ ] топологическую сортировку
|
|
|
|
+ - [ ] подсчет компонентов связности в графе
|
|
|
|
+ - [ ] список сильно связных компонентов
|
|
|
|
+ - [ ] проверку графа на двудольность
|
|
|
|
+
|
|
|
|
+Вы найдете больше практических задач на графах в книге Стивена Скина (см раздел книги ниже) и в книгах о прохождении интервью.
|
|
|
|
|
|
## Even More Knowledge
|
|
## Even More Knowledge
|
|
|
|
|