## Advanced Algorithms Graph Algorithms in Java

### What you’ll learn

Learn about the applications of data structures

Learn about the fundamental basics of graphs and graph theory

Implement advanced algorithms (graph algorithms) efficiently

Learn graph traversing such as breadth-first search and depth-first search

Learn about topological ordering and cycle detection

Learn about shortest path algorithms (Dijkstra’s and Bellman-Ford algorithms)

Learn about spanning trees

Learn about strongly connected components

Learn about Hamiltonian cycles and Eulerian cycles

Learn about maximum flow (max flow min cut theorem)

### Requirements

Internet connection

Basic knowledge of data structures

### Description

This course is about advanced algorithms (graph algorithms) focusing on graph traversal, shortest path problems, spanning trees and maximum flow problems and a lots of its applications from Google Web Crawler to taking advantage of stock market arbitrage situations. Section 1 – Graphs Theory Basics:what is a G(V,E) graphadjacency matrix representationadjacency list representationSection 2 – Graph Traversal (Breadth-First Search)what is breadth-first search?how to use BFS for WebCrawling in search engines?Section 3 – Graph Traversal (Depth-First Search)what is depth-first search?how to use recursion to implement DFSapplications of DFS such as topological ordering and cycle detectionfind way out of a maze with DFSSection 4 – Topological Orderingwhat is topological ordering (topological sort)directed acyclic graphs (DAGs)DAG shortest path and longest pathcritical path methods and project managementSection 5 – Cycle Detectionwhat are cycles in a graph?forward edges and backward edgescycle detection algorithms (Tarjan’s algorithm with DFS)Section 6 – Dijkstra’s Shortest Path Algorithmwhat is a shortest path in a G(V,E) graphDijkstra’s shortest path algorithmSection 7 – Bellman-Ford Shortest Path AlgorithmBellman-Ford algorithmhow to handle negative cyclesfinding arbitrage opportunities on the FOREXSection 8: – Spanning Trees (Kruskal and Prim’s Algorithms)what are spanning trees?union find data structuresKruskal’s algorithmPrim’s algorithmSection 9 – Strongly Connected Components (SCCs)what are strongly connected componentsKosaraju’s algorithmTarjan’s algorithmSection 10 – Maximum Flow Problemthe famous maximum flow problemhow to reduce most of the hard problems to maximum flow problemFord-Fulkerson algorithmbipartite matching problemSection 9 – Travelling Salesman Problem and Hamiltonian Cycles:travelling salesman problem (TSP)how to deal with NP-hard problemswhat are meta-heuristicsSection 10 – Eulerian Pathseulerian paths and eulerian cyclesHierholzer algorithm and the Chinese Postman ProblemSection 11 – Algorithms Analysishow to measure the running time of algorithmsrunning time analysis with big O (ordo), big Ω (omega) and big θ (theta) notationscomplexity classespolynomial (P) and non-deterministic polynomial (NP) algorithmsO(1), O(logN), O(N) and several other running time complexitiesThe course is going to take approximately 11 hours to completely but I highly suggest you typing these algorithms out several times in order to get a good grasp of it. You can download the source code of the whole course at the last lecture. You should definitely take this course if you are interested in advanced topics concerning algorithms. There are a bunch of fields where these methods can be used: from software engineering to scientific research.Thanks for joining the course, let’s get started!

### Overview

Section 1: Introduction

Lecture 1 Introduction

Lecture 2 Complexity theory basics

Section 2: Graph Theory Overview

Lecture 3 Graph theory overview

Lecture 4 Adjacency matrix and adjacency list

Lecture 5 Adjacency matrix and adjacency list implementation

Lecture 6 Applications of graphs

Section 3: Breadth-First Search (BFS)

Lecture 7 Breadth-first search introduction

Lecture 8 Breadth-first search implementation

Section 4: Course Challenge #1 – WebCrawler

Lecture 9 Breadth-first search – WebCrawler (core of search engines)

Lecture 10 Breadth-first search – WebCrawler implementation

Section 5: Depth-First Search (DFS)

Lecture 11 Depth-first search introduction

Lecture 12 DFS implementation I – with stack

Lecture 13 DFS implementation II – with recursion

Lecture 14 Depth-first search and stack memory visualisation

Lecture 15 Memory management: BFS vs DFS

Section 6: Course Challenge #2- Maze Escape

Lecture 16 Maze problem introduction

Lecture 17 Course challenge #1 – maze escape

Lecture 18 Maze solving algorithm implementation

Section 7: Topological Ordering

Lecture 19 What is topological ordering?

Lecture 20 Topological ordering implementation I

Lecture 21 Topological ordering implementation II

Lecture 22 Finding the shortest path with topological ordering

Lecture 23 Topological ordering shortest path implementation I

Lecture 24 Topological ordering shortest path implementation II

Lecture 25 Dynamic programming with topological sort

Section 8: Cycle Detection

Lecture 26 Cycle detection introduction

Lecture 27 Cycle detection implementation I

Lecture 28 Cycle detection implementation II

Section 9: Shortest Path Methods – Dijkstra’s Algorithm

Lecture 29 What is the shortest path problem?

Lecture 30 Dijkstra algorithm visualization

Lecture 31 Dijkstra algorithm implementation I

Lecture 32 Dijkstra algorithm implementation II

Lecture 33 Dijkstra algorithm implementation III

Lecture 34 Dijktsra’s algorithm with adjacency matrix representation

Lecture 35 Shortest path algorithms applications

Section 10: Course Challenge #3 – Longest Path

Lecture 36 The critical path method (CPM) and longest paths

Lecture 37 Course challenge #3 – DAG shortest path

Lecture 38 Longest path implementation

Section 11: Shortest Path Methods – Bellman-Ford Algorithm

Lecture 39 What is the Bellman-Ford algorithm?

Lecture 40 Bellman-Ford algorithm visualisation

Lecture 41 Bellman-Ford algorithm implementation I

Lecture 42 Bellman-Ford algorithm implementation II

Lecture 43 Greedy algorithm or dynamic programming approach?

Section 12: Course Challenge #4 – Arbitrage on FOREX

Lecture 44 Arbitrage situations on FOREX introduction

Lecture 45 Arbitrage situations on FOREX implementation

Section 13: Spanning Trees – Kruskal’s Algorithm

Lecture 46 What is the disjoint set data structure?

Lecture 47 Disjoint sets visualization

Lecture 48 Kruskal’s algorithm introduction

Lecture 49 Kruskal algorithm implementation I

Lecture 50 Kruskal algorithm implementation II

Lecture 51 Kruskal algorithm implementation III

Section 14: Spanning Trees – Prim’s Algorithm

Lecture 52 What is the lazy Prim’s algorithm?

Lecture 53 Lazy Prim’s algorithm implementation I

Lecture 54 Lazy Prim’s algorithm implementation II

Lecture 55 What is the eager Prim’s algorithm?

Lecture 56 Eager Prim’s algorithm implementation

Lecture 57 Comparison of minimum spanning tree algorithms

Lecture 58 Applications of spanning trees

Section 15: Strongly Connected Components – Kosaraju’s Algorithm

Lecture 59 Strongly connected components introduction

Lecture 60 Kosaraju algorithm introduction

Lecture 61 Kosaraju algorithm implementation I

Lecture 62 Kosaraju algorithm implementation II

Lecture 63 Kosaraju algorithm implementation III

Section 16: Strongly Connected Components – Tarjan’s Algorithm

Lecture 64 Tarjan algorithm introduction

Lecture 65 Tarjan algorithm visualization

Lecture 66 Tarjan algorithm implementation

Lecture 67 Applications of strongly connected components

Section 17: Maximum Flow Problem

Lecture 68 Maximum flow introduction – basics

Lecture 69 Maximum flow introduction – properties

Lecture 70 Maximum flow introduction – cuts

Lecture 71 Maximum flow introduction – residual networks

Lecture 72 Maximum flow introduction – Ford-Fulkerson algorithm

Lecture 73 Maximum flow introduction – example

Lecture 74 Maximum flow implementation I – Edge, Vertex

Lecture 75 Maximum flow implementation II – FlowNetwork class

Lecture 76 Maximum flow implementation III – Ford-Fulkerson algorithm

Lecture 77 Maximum flow implementation IV – augmentation

Lecture 78 Maximum flow implementation V – testing

Lecture 79 Applications of maximum flow problem

Lecture 80 Article on maximum flow problem

Section 18: Hamiltonian Cycles – Travelling Salesman Problem (TSP)

Lecture 81 What are Hamiltonian cycles?

Lecture 82 The travelling salesman problem

Lecture 83 Travelling salesman problem implementation I

Lecture 84 Travelling salesman problem implementation II

Lecture 85 TSP and stack memory visualization

Lecture 86 Why to use meta-heuristics?

Section 19: Eulerian Cycles – Chinese Postman Problem

Lecture 87 Eulerian cycles introduction

Lecture 88 Eulerian cycles application

Section 20: ### APPENDIX – COMPLEXITY THEORY CRASH COURSE ###

Lecture 89 How to measure the running times of algorithms?

Lecture 90 Complexity theory illustration

Lecture 91 Complexity notations – big (O) ordo

Lecture 92 Complexity notations – big Ω (omega)

Lecture 93 Complexity notations – big (θ) theta

Lecture 94 Algorithm running times

Lecture 95 Complexity classes

Lecture 96 Analysis of algorithms – loops

Lecture 97 Case study – O(1)

Lecture 98 Case study – O(logN)

Lecture 99 Case study – O(N)

Lecture 100 Case study – O(N*N)

Section 21: Algorhyme FREE Algorithms Visualizer App

Lecture 101 Algorithms Visualization App

Lecture 102 Algorhyme – Algorithms and Data Structures

Section 22: Course Materials (DOWNLOADS)

Lecture 103 Course materials

This course is meant for everyone from scientists to software developers who want to get closer to algorithmic thinking in the main

#### Course Information:

Udemy | English | 12h 28m | 3.32 GB

Created by: Holczer Balazs

You Can See More Courses in the IT & Software >> Greetings from CourseDown.com