**Fenwick trees, Caches, Splay Trees, Prefix Trees (Tries), Substring-Search Algorithms and Travelling Salesman Problem**

**What you’ll learn**

- Have a good grasp of algorithmic thinking
- Be able to develop your own algorithms
- Be able to detect and correct inefficient code snippets
- Understand Fenwick trees
- Understand caches (LRU caches and Splay Trees)
- Understand tries and ternary search trees
- Understand substring search algorithms (Rabin-Karp method, KMP algorithm and Z algorithm)
- Understand the Hamiltonian cycle problem (and travelling salesman problem)
- Understand Eulerian cycle problem

**Requirements**

- Python basics
- Some theoretical background (big O notation )

**Description**

This course is for those who are interested in computer science and want to implement the **algorithms** and given **data structures** in **Python**. In every chapter you will learn about the theory of a given data structure or algorithm and then you will implement them from scratch.

**Chapter 1: Binary Indexed Trees** (Fenwick Trees)

- theory behind the binary indexed tree or Fenwick tree data structure
- how to use this data structure in computer vision and artificial intelligence
- implementation in Python

**Chapter 2: LRU Caches**

- what are caches and why are they so important
- how to use doubly linked lists to implement caches
- theory behind LRU caches
- implementation in Python

**Chapter 3: Splay Trees**

- what are splay trees
- how to achieve caches with splay trees

**Chapter 4: B-Trees**

- external memory and internal memory (RAM)
- data structures for the external memory
- trees with multiple children and multiple keys
- what are B-tree data structures?

**Chapter 5: Prefix Trees (Tries)**

- what are tries or prefix trees
- real world applications of tries
- autocomplete feature of tries
- sorting with tries
- IP routing

**Chapter 6: Ternary Search Trees**

- what are ternary search trees
- boggle game with tries

**Chapter 7: Substring Search Algorithms**

- what are substring search algorithms and why are they important in real world softwares
- brute-force substring search algorithm
- hashing and Rabin-Karp method
- Knuth-Morris-Pratt substring search algorithm
- Z substring search algorithm (Z algorithm)
- implementations in Python

**Chapter 8: Topological Ordering**

- what is topological ordering (topological sort)?
- topological ordering implementation with depth-first search

**Chapter 9: Cycle Detection**

- how to detect cycles in graphs?

**Chapter 10: Strongly Connected Components (Tarjan’s Algorithm)**

- what are strongly connected components?
- Tarjan’s algorithm with depth-first search

**Chapter 11: Hamiltonian cycles (Travelling Salesman Problem)**

- Hamiltonian cycles in graphs
- what is the travelling salesman problem?
- how to use backtracking to solve the problem
- meta-heuristic approaches to boost algorithms

**Chapter 12: Eulerian Cycles (Chinese Postman Problem)**

- Eulerian cycles in graphs
- what is the chinese postman problem?

Thanks for joining my course, let’s get started!

**Who this course is for:**

- This course is suited for anyone who has some basic knowledge in Python and interested in algorithms and data structures

## Demo

https://www.udemy.com/course/advanced-algorithms-python/.

## Download

https://drive.google.com/file/d/1yLR8WEA6QZyCniss8O3fQONh_20MDcNv/view?usp=sharing