|
@@ -126,17 +126,17 @@ Microsoft.
|
|
|
- купчасте сортування (heapsort)
|
|
|
- швидке сортування (quicksort)
|
|
|
- злиття (mergesort)
|
|
|
-- [Графи](#Graphs)
|
|
|
+- [Графи](#Графи)
|
|
|
- спрямовані (directed)
|
|
|
- неспрямовані (undirected)
|
|
|
- матриця суміжності (adjacency matrix)
|
|
|
- список суміжності (adjacency list)
|
|
|
- обходи: BFS, DFS (traversals: BFS, DFS)
|
|
|
-- [Ще більше знань](#even-more-knowledge)
|
|
|
- - [Рекурсія](#recursion)
|
|
|
- - [Динамічне програмування](#dynamic-programming)
|
|
|
- - [Шаблони проектування](#design-patterns)
|
|
|
- - [Комбінаторика (n choose k) та ймовірність](#combinatorics-n-choose-k--probability)
|
|
|
+- [Ще більше знань](#Ще-більше-знань)
|
|
|
+ - [Рекурсія](#Рекурсія)
|
|
|
+ - [Динамічне програмування](#Динамічне-програмування)
|
|
|
+ - [Шаблони проектування](#Шаблони-проектування)
|
|
|
+ - [Комбінаторика (n choose k) та ймовірність](#комбінаторика-n-choose-k-та-ймовірність)
|
|
|
- [NP, NP-повні та Апроксимаційні Алгоритми](#np-np-complete-and-approximation-algorithms)
|
|
|
- [Як комп'ютери опрацьовують програму](#how-computers-process-a-program)
|
|
|
- [Кеші](#caches)
|
|
@@ -895,164 +895,153 @@ Microsoft.
|
|
|
Як підсумок, ось візуальне представлення [15 алгоритмів сортування](https://www.youtube.com/watch?v=kPRA0W1kECg).
|
|
|
Якщо вам потрібна більш детальна інформація на цю тему, зверніться до розділу "Сортування" у [Додаткова інформація про деякі теми](#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:
|
|
|
- - There are 4 basic ways to represent a graph in memory:
|
|
|
- - objects and pointers
|
|
|
- - adjacency matrix
|
|
|
- - adjacency list
|
|
|
- - adjacency map
|
|
|
- - 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)
|
|
|
- - [ ] [[Review] Shortest Path Algorithms (playlist) in 16 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZO-Y-H3xIC9DGSfVYJng9Yw)
|
|
|
- - [ ] [[Review] Minimum Spanning Trees (playlist) in 4 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZObEi3Hf6lmyW-CBfs7nkOV)
|
|
|
-
|
|
|
-- Full Coursera Course:
|
|
|
- - [ ] [Algorithms on Graphs (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome)
|
|
|
-
|
|
|
-- 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
|
|
|
-
|
|
|
-## Even More Knowledge
|
|
|
-
|
|
|
-- ### Recursion
|
|
|
- - [ ] Stanford lectures on recursion & backtracking:
|
|
|
- - [ ] [Lecture 8 | Programming Abstractions (video)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8)
|
|
|
- - [ ] [Lecture 9 | Programming Abstractions (video)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9)
|
|
|
- - [ ] [Lecture 10 | Programming Abstractions (video)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69)
|
|
|
- - [ ] [Lecture 11 | Programming Abstractions (video)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11)
|
|
|
- - when it is appropriate to use it
|
|
|
- - how is tail recursion better than not?
|
|
|
- - [ ] [What Is Tail Recursion Why Is It So Bad?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad)
|
|
|
- - [ ] [Tail Recursion (video)](https://www.coursera.org/lecture/programming-languages/tail-recursion-YZic1)
|
|
|
-
|
|
|
-- ### Dynamic Programming
|
|
|
- - This subject can be pretty difficult, as each DP soluble problem must be defined as a recursion relation, and coming up with it can be tricky.
|
|
|
- - I suggest looking at many examples of DP problems until you have a solid understanding of the pattern involved.
|
|
|
- - [ ] Videos:
|
|
|
- - the Skiena videos can be hard to follow since he sometimes uses the whiteboard, which is too small to see
|
|
|
- - [ ] [Skiena: CSE373 2012 - Lecture 19 - Introduction to Dynamic Programming (video)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718)
|
|
|
- - [ ] [Skiena: CSE373 2012 - Lecture 20 - Edit Distance (video)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749)
|
|
|
- - [ ] [Skiena: CSE373 2012 - Lecture 21 - Dynamic Programming Examples (video)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406)
|
|
|
- - [ ] [Skiena: CSE373 2012 - Lecture 22 - Applications of Dynamic Programming (video)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22)
|
|
|
- - [ ] [Simonson: Dynamic Programming 0 (starts at 59:18) (video)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558)
|
|
|
- - [ ] [Simonson: Dynamic Programming I - Lecture 11 (video)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
|
|
|
- - [ ] [Simonson: Dynamic programming II - Lecture 12 (video)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12)
|
|
|
- - [ ] List of individual DP problems (each is short):
|
|
|
- [Dynamic Programming (video)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr)
|
|
|
- - [ ] Yale Lecture notes:
|
|
|
- - [ ] [Dynamic Programming](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicProgramming)
|
|
|
+## Графи
|
|
|
+
|
|
|
+Графи можна використовувати для представлення багатьох проблем у комп'ютерних науках, тому цей розділ довгий, як і розділ про дерева та сортування.
|
|
|
+
|
|
|
+- Примітки:
|
|
|
+ - Існує 4 основних способи представлення графів у пам'яті:
|
|
|
+ - об'єкти та вказівники (objects and pointers)
|
|
|
+ - матриця суміжності (adjacency matrix)
|
|
|
+ - список суміжності (adjacency list)
|
|
|
+ - карта суміжності (adjacency map)
|
|
|
+ - Ознайомтеся з кожним способом представлення та його перевагами і недоліками
|
|
|
+ - BFS та DFS - знайте їх обчислювальну складність, компроміси та як їх реалізувати в реальному коді
|
|
|
+ - Коли вам ставлять запитання, спочатку шукайте рішення на основі графів, а потім рухайтеся далі, якщо його немає
|
|
|
+
|
|
|
+- [ ] MIT (відео):
|
|
|
+ - [ ] Пошук в ширину [Breadth-First Search](https://www.youtube.com/watch?v=oFVYVzlvk9c&t=14s&ab_channel=MITOpenCourseWare)
|
|
|
+ - [ ] Пошук в глибину [Depth-First Search](https://www.youtube.com/watch?v=IBfWDYSffUU&t=32s&ab_channel=MITOpenCourseWare)
|
|
|
+
|
|
|
+- [ ] Лекції Скієна - чудовий вступ:
|
|
|
+ - [ ] CSE373 2020 - Лекція 10 - Графові структури даних (відео) [CSE373 2020 - Lecture 10 - Graph Data Structures (video)](https://www.youtube.com/watch?v=Sjk0xqWWPCc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=10)
|
|
|
+ - [ ] CSE373 2020 - Лекція 11 - Обхід графів (відео) [CSE373 2020 - Lecture 11 - Graph Traversal (video)](https://www.youtube.com/watch?v=ZTwjXj81NVY&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=11)
|
|
|
+ - [ ] CSE373 2020 - Лекція 12 - Пошук у глибину (відео) [CSE373 2020 - Lecture 12 - Depth First Search (video)](https://www.youtube.com/watch?v=KyordYB3BOs&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=12)
|
|
|
+ - [ ] CSE373 2020 - Лекція 13 - Мінімальні остовні дерева (відео) [CSE373 2020 - Lecture 13 - Minimum Spanning Trees (video)](https://www.youtube.com/watch?v=oolm2VnJUKw&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=13)
|
|
|
+ - [ ] CSE373 2020 - Лекція 14 - Мінімальні остовні дерева (відео) [CSE373 2020 - Lecture 14 - Minimum Spanning Trees (con't) (video)](https://www.youtube.com/watch?v=RktgPx0MarY&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=14)
|
|
|
+ - [ ] CSE373 2020 - Лекція 15 - Графові алгоритми (частина 2) (відео) [CSE373 2020 - Lecture 15 - Graph Algorithms (con't 2) (video)](https://www.youtube.com/watch?v=MUe5DXRhyAo&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=15)
|
|
|
+
|
|
|
+- [ ] Графи (огляд та інше):
|
|
|
+
|
|
|
+ - [ ] 6.006 Задача про найкоротші шляхи з одним джерелом (відео) [6.006 Single-Source Shortest Paths Problem (video)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
|
|
|
+ - [ ] 6.006 Дейкстра (відео) [6.006 Dijkstra (video)](https://www.youtube.com/watch?v=NSHizBK9JD8&t=1731s&ab_channel=MITOpenCourseWare)
|
|
|
+ - [ ]6.006 Беллман-Форд (відео) [6.006 Bellman-Ford (video)](https://www.youtube.com/watch?v=f9cVS_URPc0&ab_channel=MITOpenCourseWare)
|
|
|
+ - [ ] 6.006 Прискорення Дейкстра (відео) [6.006 Speeding Up Dijkstra (video)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18)
|
|
|
+ - [ ] Адуні: Графові алгоритми I - Топологічне сортування, Мінімальне остовне дерево, Алгоритм Прима - лекція 6 (відео) [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)
|
|
|
+ - [ ] Адуні: Графові алгоритми II - DFS, BFS, алгоритм Крускала, Структура даних Об'єднаний Пошук - Лекція 7 (відео) [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)
|
|
|
+ - [ ] Адуні: Графові алгоритми III: Найкоротший шлях - Лекція 8 (відео) [Aduni: Graph Algorithms III: Shortest Path - Lecture 8 (video)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8)
|
|
|
+ - [ ] Адуні: Графові алгоритми IV: Вступ до геометричних алгоритмів - Лекція 9 (відео) [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: Зважені графи (відео) [CS 61B 2014: Weighted graphs (video)](https://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k)
|
|
|
+ - [ ] Жадібні алгоритми: мінімальне остовне дерево (відео) [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)
|
|
|
+ - [ ] [Огляд] Алгоритми найкоротшого шляху (плейлист) за 16 хвилин (відео) [[Review] Shortest Path Algorithms (playlist) in 16 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZO-Y-H3xIC9DGSfVYJng9Yw)
|
|
|
+ - [ ] [Огляд] Мінімальні остовні дерева (плейліст) за 4 хвилини (відео) [[Review] Minimum Spanning Trees (playlist) in 4 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZObEi3Hf6lmyW-CBfs7nkOV)
|
|
|
+
|
|
|
+- Повний курс на Coursera:
|
|
|
+ - [ ] Алгоритми на графах (відео) [Algorithms on Graphs (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome)
|
|
|
+
|
|
|
+- Я реалізую:
|
|
|
+ - [ ] DFS зі списком суміжності (рекурсивний)
|
|
|
+ - [ ] DFS зі списком суміжності (ітеративний зі стеком)
|
|
|
+ - [ ] DFS з матрицею суміжності (рекурсивний)
|
|
|
+ - [ ] DFS з матрицею суміжності (ітеративний зі стеком)
|
|
|
+ - [ ] BFS зі списком суміжності
|
|
|
+ - [ ] BFS з матрицею суміжності
|
|
|
+ - [ ] найкоротший шлях з одним джерелом (Дейкстра)
|
|
|
+ - [ ] мінімальне остовне дерево
|
|
|
+ - Алгоритми на основі DFS (див. відео Aduni вище):
|
|
|
+ - [ ] перевірка на цикл (потрібна для топологічного сортування, оскільки ми будемо перевіряти цикл перед початком)
|
|
|
+ - [ ] топологічне сортування
|
|
|
+ - [ ] підрахунок зв'язних компонентів у графі
|
|
|
+ - [ ] перелік списку сильно зв'язаних компонентів
|
|
|
+ - [ ] перевірка на дводольний граф
|
|
|
+
|
|
|
+## Ще більше знань
|
|
|
+
|
|
|
+- ### Рекурсія
|
|
|
+ - [ ] Стенфордські лекції про рекурсію та відстеження:
|
|
|
+ - [ ] Лекція 8 | Програмування абстракцій (відео) [Lecture 8 | Programming Abstractions (video)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8)
|
|
|
+ - [ ] Лекція 9 | Програмні абстракції (відео) [Lecture 9 | Programming Abstractions (video)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9)
|
|
|
+ - [ ] Лекція 10 | Програмування абстракцій (відео) [Lecture 10 | Programming Abstractions (video)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69)
|
|
|
+ - [ ] Лекція 11 | Програмування абстракцій (відео) [Lecture 11 | Programming Abstractions (video)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11)
|
|
|
+ - Коли доцільно її використовувати?
|
|
|
+ - Чим хвостова рекурсія краща ніж ніякої?
|
|
|
+ - [ ] Що таке хвостова рекурсія і чому вона така погана? [What Is Tail Recursion Why Is It So Bad?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad)
|
|
|
+ - [ ] Хвостова рекурсія (відео) [Tail Recursion (video)](https://www.coursera.org/lecture/programming-languages/tail-recursion-YZic1)
|
|
|
+ - [ ] 5 простих кроків для вирішення будь-якої рекурсивної задачі (відео) [5 Simple Steps for Solving Any Recursive Problem(video)](https://youtu.be/ngCos392W4w)
|
|
|
+
|
|
|
+ Схема зворотного відстеження:
|
|
|
+
|
|
|
+ - [Java](https://leetcode.com/problems/combination-sum/discuss/16502/A-general-approach-to-backtracking-questions-in-Java-(Subsets-Permutations-Combination-Sum-Palindrome-Partitioning))
|
|
|
+ - [Python](https://leetcode.com/problems/combination-sum/discuss/429538/General-Backtracking-questions-solutions-in-Python-for-reference-%3A)
|
|
|
+
|
|
|
+- ### Динамічне програмування
|
|
|
+
|
|
|
+ - Ви, ймовірно, не побачите жодної проблеми з динамічним програмуванням на співбесіді, але варто вміти розпізнавати
|
|
|
+ задачу, яка може бути кандидатом на динамічне програмування.
|
|
|
+ - Ця тема може бути досить складною, оскільки кожна задача, що розв'язується ДП, повинна бути визначена як рекурсивне відношення, а придумати його може бути непросто.
|
|
|
+ - Я пропоную розглянути багато прикладів задач на ДП, доки ви не матимете чіткого уявлення про закономірності, що використовуються.
|
|
|
+ - [ ] Відео:
|
|
|
+ - [ ] Скієна: CSE373 2020 - Лекція 19 - Вступ до динамічного програмування (відео) [Skiena: CSE373 2020 - Lecture 19 - Introduction to Dynamic Programming (video)](https://www.youtube.com/watch?v=wAA0AMfcJHQ&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=18)
|
|
|
+ - [ ] Скієна: CSE373 2020 - Лекція 20 - Редагування відстані (відео) [Skiena: CSE373 2020 - Lecture 20 - Edit Distance (video)](https://www.youtube.com/watch?v=T3A4jlHlhtA&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=19)
|
|
|
+ - [ ] Скієна: CSE373 2020 - Лекція 20 - Редагування відстані (продовження) (відео) [Skiena: CSE373 2020 - Lecture 20 - Edit Distance (continued) (video)](https://www.youtube.com/watch?v=iPnPVcZmRbE&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=20)
|
|
|
+ - [ ] Скієна: CSE373 2020 - Лекція 21 - Динамічне програмування (відео) [Skiena: CSE373 2020 - Lecture 21 - Dynamic Programming (video)](https://www.youtube.com/watch?v=2xPE4Wq8coQ&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=21)
|
|
|
+ - [ ] Скієна: CSE373 2020 - Лекція 22 - Динамічне програмування та огляд (відео) [Skiena: CSE373 2020 - Lecture 22 - Dynamic Programming and Review (video)](https://www.youtube.com/watch?v=Yh3RzqQGsyI&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=22)
|
|
|
+ - [ ] Саймонсон: Динамічне програмування 0 (починається з 59:18) (відео) [Simonson: Dynamic Programming 0 (starts at 59:18) (video)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558)
|
|
|
+ - [ ] Саймонсон: Динамічне програмування I - Лекція 11 (відео) [Simonson: Dynamic Programming I - Lecture 11 (video)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
|
|
|
+ - [ ] Саймонсон: Динамічне програмування II - Лекція 12 (відео) [Simonson: Dynamic programming II - Lecture 12 (video)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12)
|
|
|
+ - [ ] Список окремих задач з ДП (кожна з них коротка):
|
|
|
+ Динамічне програмування (відео) [Dynamic Programming (video)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr)
|
|
|
+ - [ ] Єльський конспект лекцій:
|
|
|
+ - [ ] Динамічне програмування [Dynamic Programming](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicProgramming)
|
|
|
- [ ] Coursera:
|
|
|
- - [ ] [The RNA secondary structure problem (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem)
|
|
|
- - [ ] [A dynamic programming algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm)
|
|
|
- - [ ] [Illustrating the DP algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm)
|
|
|
- - [ ] [Running time of the DP algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm)
|
|
|
- - [ ] [DP vs. recursive implementation (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation)
|
|
|
- - [ ] [Global pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment)
|
|
|
- - [ ] [Local pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment)
|
|
|
-
|
|
|
-- ### Object-Oriented Programming
|
|
|
- - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc)
|
|
|
- - [ ] Object-Oriented Software Engineering: Software Dev Using UML and Java (21 videos):
|
|
|
- - Can skip this if you have a great grasp of OO and OO design practices.
|
|
|
- - [OOSE: Software Dev Using UML and Java](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
|
|
|
- - [ ] SOLID OOP Principles:
|
|
|
- - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE)
|
|
|
- - [ ] [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A)
|
|
|
- - [ ] S - [Single Responsibility Principle](http://www.oodesign.com/single-responsibility-principle.html) | [Single responsibility to each Object](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html)
|
|
|
- - [more flavor](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk)
|
|
|
- - [ ] O - [Open/Closed Principal](http://www.oodesign.com/open-close-principle.html) | [On production level Objects are ready for extension but not for modification](https://en.wikipedia.org/wiki/Open/closed_principle)
|
|
|
- - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en)
|
|
|
- - [ ] L - [Liskov Substitution Principal](http://www.oodesign.com/liskov-s-substitution-principle.html) | [Base Class and Derived class follow ‘IS A’ principal](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle)
|
|
|
- - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en)
|
|
|
- - [ ] I - [Interface segregation principle](http://www.oodesign.com/interface-segregation-principle.html) | clients should not be forced to implement interfaces they don't use
|
|
|
- - [Interface Segregation Principle in 5 minutes (video)](https://www.youtube.com/watch?v=3CtAfl7aXAQ)
|
|
|
- - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en)
|
|
|
- - [ ] D -[Dependency Inversion principle](http://www.oodesign.com/dependency-inversion-principle.html) | Reduce the dependency In composition of objects.
|
|
|
- - [Why Is The Dependency Inversion Principle And Why Is It Important](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important)
|
|
|
- - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en)
|
|
|
-
|
|
|
-- ### Design patterns
|
|
|
- - [ ] [Quick UML review (video)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3)
|
|
|
- - [ ] Learn these patterns:
|
|
|
- - [ ] strategy
|
|
|
- - [ ] singleton
|
|
|
- - [ ] adapter
|
|
|
- - [ ] prototype
|
|
|
- - [ ] decorator
|
|
|
- - [ ] visitor
|
|
|
- - [ ] factory, abstract factory
|
|
|
- - [ ] facade
|
|
|
- - [ ] observer
|
|
|
- - [ ] proxy
|
|
|
- - [ ] delegate
|
|
|
- - [ ] command
|
|
|
- - [ ] state
|
|
|
+ - [ ] Проблема вторинної структури РНК (відео) [The RNA secondary structure problem (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem)
|
|
|
+ - [ ] Алгоритм динамічного програмування (відео) [A dynamic programming algorithm (video)](https://www.coursera.org/lecture/algorithmic-thinking-2/a-dynamic-programming-algorithm-PSonq)
|
|
|
+ - [ ] Ілюстрація алгоритму ДП (відео) [Illustrating the DP algorithm (video)](https://www.coursera.org/lecture/algorithmic-thinking-2/illustrating-the-dp-algorithm-oUEK2)
|
|
|
+ - [ ] Час роботи алгоритму DP (відео) [Running time of the DP algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm)
|
|
|
+ - [ ] DP проти рекурсивної реалізації (відео) [DP vs. recursive implementation (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation)
|
|
|
+ - [ ] Глобальне попарне вирівнювання послідовностей (відео) [Global pairwise sequence alignment (video)](https://www.coursera.org/lecture/algorithmic-thinking-2/global-pairwise-sequence-alignment-UZ7o6)
|
|
|
+ - [ ] Локальне попарне вирівнювання послідовностей (відео) [Local pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment)
|
|
|
+
|
|
|
+- ### Шаблони проектування
|
|
|
+ - [ ] [Короткий огляд UML (відео)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3)
|
|
|
+ - [ ] Вивчіть ці патерни:
|
|
|
+ - [ ] синглтон (strategy)
|
|
|
+ - [ ] синглтон (singleton)
|
|
|
+ - [ ] адаптер (adapter)
|
|
|
+ - [ ] прототип (prototype)
|
|
|
+ - [ ] декоратор (decorator)
|
|
|
+ - [ ] відвідувач (visitor)
|
|
|
+ - [ ] фабрика, абстрактна фабрика (factory, abstract factory)
|
|
|
+ - [ ] фасад (facade)
|
|
|
+ - [ ] спостерігач (observer)
|
|
|
+ - [ ] проксі (proxy)
|
|
|
+ - [ ] делегат (delegate)
|
|
|
+ - [ ] команда (command)
|
|
|
+ - [ ] стан (state)
|
|
|
- [ ] memento
|
|
|
- - [ ] iterator
|
|
|
- - [ ] composite
|
|
|
+ - [ ] ітератор (iterator)
|
|
|
+ - [ ] композит (composite)
|
|
|
- [ ] flyweight
|
|
|
- - [ ] [Chapter 6 (Part 1) - Patterns (video)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344)
|
|
|
- - [ ] [Chapter 6 (Part 2) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (video)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
|
|
|
- - [ ] [Chapter 6 (Part 3) - Adapter, Facade, Immutable, Read-Only Interface, Proxy (video)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
|
|
|
- - [ ] [Series of videos (27 videos)](https://www.youtube.com/playlist?list=PLF206E906175C7E07)
|
|
|
- - [ ] [Head First Design Patterns](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124)
|
|
|
- - I know the canonical book is "Design Patterns: Elements of Reusable Object-Oriented Software", but Head First is great for beginners to OO.
|
|
|
- - [ ] [Handy reference: 101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips)
|
|
|
- - [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns)
|
|
|
-
|
|
|
-
|
|
|
-- ### Combinatorics (n choose k) & Probability
|
|
|
- - [ ] [Math Skills: How to find Factorial, Permutation and Combination (Choose) (video)](https://www.youtube.com/watch?v=8RRo6Ti9d0U)
|
|
|
- - [ ] [Make School: Probability (video)](https://www.youtube.com/watch?v=sZkAAk9Wwa4)
|
|
|
- - [ ] [Make School: More Probability and Markov Chains (video)](https://www.youtube.com/watch?v=dNaJg-mLobQ)
|
|
|
- - [ ] Khan Academy:
|
|
|
- - Course layout:
|
|
|
- - [ ] [Basic Theoretical Probability](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic)
|
|
|
- - Just the videos - 41 (each are simple and each are short):
|
|
|
- - [ ] [Probability Explained (video)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19)
|
|
|
+ - [ ] Розділ 6 (частина 1) - Патерни (відео) [Chapter 6 (Part 1) - Patterns (video)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344)
|
|
|
+ - [ ] Розділ 6 (частина 2) - Абстракція-випадок, Загальна Ієрархія, Гравець-Роль, Синглтон, Спостерігач, Делегування (відео) [Chapter 6 (Part 2) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (video)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
|
|
|
+ - [ ] Розділ 6 (частина 3) - Адаптер, Фасад, Незмінний, Інтерфейс тільки для читання, Проксі (відео) [Chapter 6 (Part 3) - Adapter, Facade, Immutable, Read-Only Interface, Proxy (video)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
|
|
|
+ - [ ] Серія відео (27 відео) [Series of videos (27 videos)](https://www.youtube.com/playlist?list=PLF206E906175C7E07)
|
|
|
+ - [ ] Шаблони проектування з нуля [Head First Design Patterns](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124)
|
|
|
+ - Я знаю, що канонічною книгою є "Патерни проектування: Elements of Reusable Object-Oriented Software", але Head First чудово підходить для початківців в ООП.
|
|
|
+ - [ ] [Зручне посилання: 101 патерн проектування та поради для розробників](https://sourcemaking.com/design-patterns-and-tips)
|
|
|
+ - [ ] [Патерни проектування для людей](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns)
|
|
|
+
|
|
|
+
|
|
|
+- ### Комбінаторика (n choose k) та ймовірність
|
|
|
+ - [ ] Математичні навички: Як знайти факторіал, перестановку та комбінацію (на вибір) (відео) [Math Skills: How to find Factorial, Permutation and Combination (Choose) (video)](https://www.youtube.com/watch?v=8RRo6Ti9d0U)
|
|
|
+ - [ ] Make School: Ймовірність (відео) [Make School: Probability (video)](https://www.youtube.com/watch?v=sZkAAk9Wwa4)
|
|
|
+ - [ ] Make School: більше про ймовірності та ланцюжки Маркова [Make School: More Probability and Markov Chains (video)](https://www.youtube.com/watch?v=dNaJg-mLobQ)
|
|
|
+ - [ ] Академія Хана (Khan Academy):
|
|
|
+ - Структура курсу:
|
|
|
+ - [ ] Основи теоретичної ймовірності [Basic Theoretical Probability](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic)
|
|
|
+ - Всього відео - 41 (кожне просте і кожне коротке):
|
|
|
+ - [ ] Пояснення теорії ймовірностей (відео) [Probability Explained (video)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19)
|
|
|
|
|
|
- ### NP, NP-Complete and Approximation Algorithms
|
|
|
- Know about the most famous classes of NP-complete problems, such as traveling salesman and the knapsack problem,
|