From 9ade768441f69861f1293544d9dc86114b66ecbe Mon Sep 17 00:00:00 2001 From: Ceren Yasar Date: Wed, 16 Oct 2024 09:22:28 +0300 Subject: [PATCH 1/2] Add graph lecture docs --- docs/graph/breadth-first-search.md | 76 +++++++++++++++++ docs/graph/depth-first-search.md | 95 ++++++++++++++++++++++ docs/graph/img/bfs.jpg | Bin 0 -> 24506 bytes docs/graph/img/dfs.jpg | Bin 0 -> 43600 bytes docs/graph/img/directed_acyclic_graph.png | Bin 0 -> 28311 bytes docs/graph/img/shortest.png | Bin 0 -> 38763 bytes docs/graph/img/toporder.png | Bin 0 -> 13293 bytes docs/graph/index.md | 37 +++++++++ docs/graph/shortest-path.md | 66 +++++++++++++++ docs/graph/topological-sort.md | 71 ++++++++++++++++ 10 files changed, 345 insertions(+) create mode 100644 docs/graph/breadth-first-search.md create mode 100644 docs/graph/depth-first-search.md create mode 100644 docs/graph/img/bfs.jpg create mode 100644 docs/graph/img/dfs.jpg create mode 100644 docs/graph/img/directed_acyclic_graph.png create mode 100644 docs/graph/img/shortest.png create mode 100644 docs/graph/img/toporder.png create mode 100644 docs/graph/index.md create mode 100644 docs/graph/shortest-path.md create mode 100644 docs/graph/topological-sort.md diff --git a/docs/graph/breadth-first-search.md b/docs/graph/breadth-first-search.md new file mode 100644 index 0000000..d284f91 --- /dev/null +++ b/docs/graph/breadth-first-search.md @@ -0,0 +1,76 @@ +--- +title: Breadth First Search +tags: + - Graph +--- + +Breadth First Search (BFS) is an algorithm for traversing or searching tree. (For example, you can find the shortest path from one node to another in an unweighted graph.) + +
+![Breadth First Search Traversal](img/bfs.jpg) +
An example breadth first search traversal
+
+ +## Method + +BFS is a traversing algorithm where you should start traversing from a selected node (source or starting node) and traverse the graph layerwise thus exploring the neighbour nodes (nodes which are directly connected to source node). You must then move towards the next-level neighbour nodes. [1] + +• As the name BFS suggests, you are required to traverse the graph breadthwise as follows: +• First move horizontally and visit all the nodes of the current layer +• Add to the queue neighbour nodes of current layer. +• Move to the next layer, which are in the queue + +Example question: Given a unweighted graph, a source and a destination, we need to find shortest path from source to destination in the graph in most optimal way? + +```cpp +#include +using namespace std; + +cont int MaxN=100005; // Max number of nodes 5 + +vector adj[MaxN]; +bool mark[MaxN]; + +void bfs(int starting_point,int ending_point) { + memset(mark,0,sizeof(mark)); //clear the cache + queue > q; // the value of node + // , and length between this node and the starting node + + q.push_back(make_pair(starting_point,0)); + mark[starting_point]=1; + + while(q.empty()==false) { + pair tmp = q.front(); // get the next node + q.pop(); // delete from q + + if(ending_point==tmp.first) { + printf("The length of path between %d - %d : %d\n", + starting_point,ending_point,tmp.second); + return; + } + + for (auto j : adj[tmp.first]) { + if(mark[j]) continue ; // if it reached before + mark[j]=1; + q.push_back(make_pair(j,tmp.second+1)); // add next node to queue + } + } +} + +int main() { + cin » n + + for (int i=0 ; i < m; i++) { + cin » a » b; + adj[a].push_back(b); + } + + cin » start_point » end_point; + bfs(start_point); + return 0; +} +``` + +## Complexity + +The time complexity of BFS is \(O(V + E)\), where \(V\) is the number of nodes and \(E\) is the number of edges. \ No newline at end of file diff --git a/docs/graph/depth-first-search.md b/docs/graph/depth-first-search.md new file mode 100644 index 0000000..917ab3e --- /dev/null +++ b/docs/graph/depth-first-search.md @@ -0,0 +1,95 @@ +--- +title: Depth First Search +tags: + - Graph +--- + +Depth First Search (DFS) is an algorithm for traversing or searching tree. (For example, you can check if graph is connected or not via DFS) [2] + +
+![Depth First Search](img/dfs.jpg) +
Example of DFS traversal
+
+ +## Method + +The DFS algorithm is a recursive algorithm that uses the idea of backtracking. It involves exhaustive searches of all the nodes by going ahead, if possible, else by backtracking. + +Here, the word backtrack means that when you are moving forward and there are no more nodes along the current path, you move backwards on the same path to find nodes to traverse. All the nodes will be visited on the current path till all the unvisited nodes have been traversed after which the next path will be selected. [3] + +```cpp +vector visited; +void dfs(int v) { + visited[v] = true; + for (int u : adj[v]) { + if (!visited[u]) dfs(u); + } +} +``` + +This recursive nature of DFS can be implemented using stacks. The basic idea is as follows: Pick a starting node and push all its adjacent nodes into a stack. Pop a node from stack to select the next node to visit and push all its adjacent nodes into a stack. Repeat this process until the stack is empty. However, ensure that the nodes that are visited are marked. This will prevent you from visiting the same node more than once. If you do not mark the nodes that are visited and you visit the same node more than once, you may end up in an infinite loop. [3] + +```cpp +DFS-iterative(G, s): //Where G is graph and s is source vertex let S be stack +S.push(s) //Inserting s in stack +mark s as visited. +while ( S is not empty): + //Pop a vertex from stack to visit next v = S.top( ) + S.pop( ) + //Push all the neighbours of v in stack that are not visited + for all neighbours w of v in Graph G: + if w is not visited : + S.push(w) + mark w as visited +``` + +Example Question: Given an undirected graph, find out whether the graph is strongly connected or not? An undirected graph is strongly connected if there is a path between any two pair of vertices. + + +```cpp +#include +using namespace std; + +cont int MaxN=100005; // Max number of nodes + +vector adj[MaxN]; +bool mark[MaxN]; + +void dfs(int k) { + mark[k]=1; // visited + for(auto j : adj[k]) // iterate over adjacent nodes + if(mark[j]==false) // check if it is visited or not + dfs(j); // do these operation for that node +} + +int main() { + cin » n » m; // number of nodes , number of edges + for (int i=0 ; i < m; i++){ + cin » a » b; + adj[a].push_back(b); + adj[b].push_back(a); + } + + dfs(1); + + bool connected=1; + for(int i=1 ; i <= n ;i++) + if(mark[i]==0) { + connected=0; + break; + } + + if(connected) + cout « "Graph is connected" « endl; + else + cout « "Graph is not connected" « endl; + + return 0; +} +``` + +## Complexity + +The time complexity of DFS is \(O(V+E)\) when implemented using an adjacency list ( with Adjacency Matrices it is \(O(V^2)\)), where \(V\) is the number of nodes and \(E\) is the number of edges. [4] diff --git a/docs/graph/img/bfs.jpg b/docs/graph/img/bfs.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3aeead31d1527c51503d0f3cf9411af93ff8ccc1 GIT binary patch literal 24506 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 H`ZfAL#TlWT literal 0 HcmV?d00001 diff --git a/docs/graph/img/dfs.jpg b/docs/graph/img/dfs.jpg new file mode 100644 index 0000000000000000000000000000000000000000..293586c4c736b01a962e13c7b2683e9778d7a02d GIT binary patch literal 43600 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
n;Tvr3ylyhvN=fqZa5*sLE0e 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 P`TEc5KM^o6{6+RFkAbCE literal 0 HcmV?d00001 diff --git a/docs/graph/img/directed_acyclic_graph.png b/docs/graph/img/directed_acyclic_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0153999c0ba20dca64baf606fc7f52919c999530 GIT binary patch literal 28311 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 literal 0 HcmV?d00001 diff --git a/docs/graph/img/toporder.png b/docs/graph/img/toporder.png new file mode 100644 index 0000000000000000000000000000000000000000..aca47938b2f4c8d683e082267bcb759ab0a85d69 GIT binary patch literal 13293 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 literal 0 HcmV?d00001 diff --git a/docs/graph/index.md b/docs/graph/index.md new file mode 100644 index 0000000..5d72941 --- /dev/null +++ b/docs/graph/index.md @@ -0,0 +1,37 @@ +--- +title: Graph +--- + +**Editor:** Kayacan Vesek + +**Reviewers:** Yasin Kaya + +## Introduction + +A graph is a structure amounting to a set of objects in which some pairs of the objects are in some sense "related". The objects correspond to the mathematical abstractions called vertices (also called nodes or points) and each of the related pairs of vertices is called an edge. Typically, a graph is depicted in diagrammatic form as a set of dots for the vertices, joined by lines for the edges. [8] + +Why graphs? Graphs are usually used to represent different elements that are somehow related to each other. + +A Graph consists of a finite set of vertices(or nodes) and set of edges which connect a pair of nodes. G = (V,E) + +V = set of nodes + +E = set of edges(e) represented as e = a,b + +Graph are used to show a relation between objects. So, some graphs may have directional edges (e.g. people and their love relationships that are not mutual: Alice may love Alex, while Alex is not in love with her and so on), and some graphs may have weighted edges (e.g. people and their relationship in the instance of a debt) + +
+![Directed Acyclic Graph](img/directed_acyclic_graph.png) +
Figure 1: a simple unweigted graph
+
+ +## References + +1. [https://www.hackerearth.com/practice/algorithms/graphs/breadth-first-search/tutorial/](https://www.hackerearth.com/practice/algorithms/graphs/breadth-first-search/tutorial/) +2. [https://www.geeksforgeeks.org/depth-first-search-or-dfs-for-a-graph/](https://www.geeksforgeeks.org/depth-first-search-or-dfs-for-a-graph/) +3. [https://cp-algorithms.com/graph/depth-first-search.html](https://cp-algorithms.com/graph/depth-first-search.html) +4. [https://www.hackerearth.com/practice/algorithms/graphs/depth-first-search/tutorial/](https://www.hackerearth.com/practice/algorithms/graphs/depth-first-search/tutorial/) +5. [Shortest Path. Wikipedia, the free online encyclopedia. Retrieved January 5, 2019](https://www.wikiwand.com/en/articles/Shortest_path_problem) +6. [Topological sort. Geeksforgeeks website. Retrieved January 5, 2019](https://www.geeksforgeeks.org/topological-sorting/) +7. [Topological Sort. Wikipedia, the free online encyclopedia. Retrieved January 5, 2019](https://en.wikipedia.org/wiki/Topological_sorting) +8. [https://en.wikipedia.org/wiki/Graph_theory](https://en.wikipedia.org/wiki/Graph_theory) \ No newline at end of file diff --git a/docs/graph/shortest-path.md b/docs/graph/shortest-path.md new file mode 100644 index 0000000..26334ec --- /dev/null +++ b/docs/graph/shortest-path.md @@ -0,0 +1,66 @@ +--- +title: Shortest Path Problem +tags: + - Graph +--- + +## Definition + +Let \(G(V,E)\) be a graph, \(v_i\) and \(v_j\) be two nodes of \(G\). We say a path between \(v_i\) and \(v_j\) is the shortest path if sum of the edge weights (cost) in the path is minimum. In other words, the shortest path problem is the problem of finding a path between two vertices (or nodes) in a graph such that the sum of the weights of its constituent edges is minimized. [5] + +
+![Shortest Path](img/shortest.png) +
Example shortest path in graph. Source is A and target is F. Image taken from [5].
+
+ +We will cover several shortest path algorithms in this bundle. One of them is Dijkstra’s Shortest Path Algorithm but it has some drawbacks: Edge weights should be non-negative for the optimally of the algorithm. We will discover other algorithms in which these condition isn’t necessary, like Floyd-Warshall and Bellman-Ford algorithms. + +## Dijkstra's Shortest Path Algorithm + +Dijkstra’s Shortest Path algorithm is straight forward. In brief we have a set \(S\) that contains explored nodes and \(d\) which contains the shortest path cost from source to another node. In other words, \(d(u)\) represents the shortest path cost from source to node \(u\). The procedure follows as that. First, add source node to set \(S\) which represents the explored nodes and assigns the minimum cost of the source to zero. Then each iteration we add node to \(S\) that has lowest cost \((d(u))\) from unexplored nodes. Let’s say \(S′ = V − S\) which means unexplored nodes. For all nodes in \(S′\) we calculate \(d(x)\) for each node \(x\) is \(S′\) then we pick minimum cost node and add it to \(S\). So how we calculate \(d(x)\)? For any \(x\) node from \(S′\), \(d(x)\) calculated as that, let’s say \(e\) cost of any edge from \(S\) to \(x\) then \(d(x) = min(d(u) + e)\). It is a greedy algorithm. + +Here is the explanation of the algorithm step by step. + +1. Initialize an empty set, distance array, insert source to set. + +2. Initialize a min-heap, put source to heap with key is zero. + +3. While heap is not empty, take the top element from heap and add its neighbours to min-heap. + +4. Once we pick an element from the heap, it is guaranteed that the same node will never be added to heap with lower key value. + +In implementation we can use priority queue data structure in order to increase efficiency. If we put unexplored nodes to min - priority queue where the distance is key, we can take the lowest cost unexplored node in \(O(log(n))\) time which is efficient. + +```cpp +typedef pair edge; +typedef vector adjList; +typedef vector graph; + +void dijkstra(graph &g, int s) { + vector dist(g.size(),INT_MAX/2); + vector visited(g.size(),false); + + dist[s] = 0; + + priority_queue, greater> q; + q.push({0, s}); + + while(!q.empty()) { + int v = q.top().second; + int d = q.top().first; + q.pop(); + + if(visited[v]) continue; + visited[v] = true; + + for(auto it: g[v]) { + int u = it.first; + int w = it.second; + if(dist[v] + w < dist[u]) { + dist[u] = dist[v] + w; + q.push({dist[u], u}); + } + } + } +} +``` \ No newline at end of file diff --git a/docs/graph/topological-sort.md b/docs/graph/topological-sort.md new file mode 100644 index 0000000..f8c91d2 --- /dev/null +++ b/docs/graph/topological-sort.md @@ -0,0 +1,71 @@ +--- +title: Topological Sort +tags: + - Graph +--- + +## Definition + + +Topological sorting for Directed Acyclic Graph (DAG) is a linear ordering of vertices such that for every directed edge u->v, vertex u comes before v in the ordering. Topological Sorting for a graph is not possible if the graph is not a DAG [6]. + +There are many important usages of topological sorting in computer science; applications of this type arise in instruction scheduling, ordering of formula cell evaluation when recomputing formula values in spreadsheets, logic synthesis, determining the order of compilation tasks to perform in makefiles, data serialization, and resolving symbol dependencies in linkers. It is also used to decide in which order to load tables with foreign keys in databases [7]. + +There are known algorithms (e.g Kahn’s algorithm) to find topological order in linear time. Below, you can find one of the implementations: + +
+![Topological Order](img/toporder.png) +
For example, a topological sorting of this graph is “5 4 2 3 1 0”. There can be more than one topological sorting for a graph. For example, another topological sorting of the following graph is “4 5 2 3 1 0”. The first vertex in topological sorting is always a vertex with in-degree as 0 (a vertex with no incoming edges)[6].
+
+ +## Algorithm + +```cpp +typedef vector adjList; +typedef vector graph; +typedef pair ii; + +void kahn(graph &g) { + vector result; + queue q; + vector degree(g.size(),0); // number of incoming egdes. + for(auto &list: g){ + for(auto &node:list) { + degree[node]++; + } + } + + for(int i=0; i < g.size(); ++i) { + if (degree[i] == 0) + q.push(i); + } + + while( !q.empty()) { + int node = q.front(); + result.push_back(node); + q.pop(); + + for (auto &ng: g[node]) { + degree[ng]--; + if (degree[ng] == 0) + q.push(ng); + } + } + + for(auto &i:result) + cout << i << " "; + cout << endl; +} +int main(){ + graph g(6); + g[1].push_back(0); + g[1].push_back(2); + g[2].push_back(3); + g[3].push_back(4); + g[4].push_back(5); + kahn(g); + return 0; +} +``` + +As for time complexity: we traverse all edges in the beginning (calculating degrees) and in the while segment we remove edges (once for an edge) and traverse all nodes. Hence, the time complexity of this algorithm is \(O(V +E)\). Note that this implementation assumes the graph is DAG. Try improving this code to support checking if the graph is DAG! From 4860d2b5c7550a39d3839aab7cc4d3900acd5cbc Mon Sep 17 00:00:00 2001 From: Ceren Yasar Date: Wed, 16 Oct 2024 21:28:55 +0300 Subject: [PATCH 2/2] Add tags and subsection links in graph notes --- docs/graph/breadth-first-search.md | 2 ++ docs/graph/depth-first-search.md | 2 ++ docs/graph/index.md | 5 +++++ docs/graph/shortest-path.md | 2 ++ docs/graph/topological-sort.md | 1 + mkdocs.yml | 1 + 6 files changed, 13 insertions(+) diff --git a/docs/graph/breadth-first-search.md b/docs/graph/breadth-first-search.md index d284f91..360fb8b 100644 --- a/docs/graph/breadth-first-search.md +++ b/docs/graph/breadth-first-search.md @@ -2,6 +2,8 @@ title: Breadth First Search tags: - Graph + - Breadth First Search + - BFS --- Breadth First Search (BFS) is an algorithm for traversing or searching tree. (For example, you can find the shortest path from one node to another in an unweighted graph.) diff --git a/docs/graph/depth-first-search.md b/docs/graph/depth-first-search.md index 917ab3e..c133b4a 100644 --- a/docs/graph/depth-first-search.md +++ b/docs/graph/depth-first-search.md @@ -2,6 +2,8 @@ title: Depth First Search tags: - Graph + - Depth First Search + - DFS --- Depth First Search (DFS) is an algorithm for traversing or searching tree. (For example, you can check if graph is connected or not via DFS) [2] diff --git a/docs/graph/index.md b/docs/graph/index.md index 5d72941..309ba4b 100644 --- a/docs/graph/index.md +++ b/docs/graph/index.md @@ -25,6 +25,11 @@ Graph are used to show a relation between objects. So, some graphs may have dire
Figure 1: a simple unweigted graph
+### [Depth First Search](depth-first-search.md) +### [Breadth First Search](breadth-first-search.md) +### [Shortest Path](shortest-path.md) +### [Topological Sort](topological-sort.md) + ## References 1. [https://www.hackerearth.com/practice/algorithms/graphs/breadth-first-search/tutorial/](https://www.hackerearth.com/practice/algorithms/graphs/breadth-first-search/tutorial/) diff --git a/docs/graph/shortest-path.md b/docs/graph/shortest-path.md index 26334ec..13d9ffe 100644 --- a/docs/graph/shortest-path.md +++ b/docs/graph/shortest-path.md @@ -2,6 +2,8 @@ title: Shortest Path Problem tags: - Graph + - Shortest Path Problem + - Dijkstra --- ## Definition diff --git a/docs/graph/topological-sort.md b/docs/graph/topological-sort.md index f8c91d2..0fb97a1 100644 --- a/docs/graph/topological-sort.md +++ b/docs/graph/topological-sort.md @@ -2,6 +2,7 @@ title: Topological Sort tags: - Graph + - Topological Sort --- ## Definition diff --git a/mkdocs.yml b/mkdocs.yml index 19420a3..c40f875 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -5,6 +5,7 @@ nav: - Introduction: introduction/index.md - Data Structures: data-structures/index.md - Algorithms: algorithms/index.md + - Graph: graph/index.md - Dynamic Programming: dynamic-programming/index.md theme: name: material