Tries Data Structures, Ternary Search Trees, Data Compression, Substring Search and Sorting Algorithms

This course is about data structures and algorithms. We are going to implement the problems in Java, but I try to do it as generic as possible: so the core of the algorithms can be used in C++ or Python. The course takes approximately 12 hours to complete. I highly recommend typing out these data structures several times on your own in order to get a good grasp of it.

What you’ll learn

- Grasp the fundamentals of algorithms and data structures.
- Develop your own algorithms that best fit to the personal need.
- Detect non-optimal code snippets.
- Understand data compression.
- Understand sorting algorithms.
- Understand tries and ternary search trees.
- Understand Strings and StringBuilders.

Course Content

- Introduction –> 1 lecture • 2min.
- Trie Data Structures (Prefix Trees) –> 13 lectures • 1hr 28min.
- Interview Questions – IP Routing with Tries –> 2 lectures • 19min.
- Ternary Search Trees (TSTs) –> 6 lectures • 50min.
- Interview Questions – Boggle Game –> 4 lectures • 26min.
- Substring Search –> 12 lectures • 2hr 9min.
- Strings –> 9 lectures • 56min.
- Basic Sorting Algorithms –> 27 lectures • 3hr 33min.
- Interview Questions – Sorting –> 4 lectures • 11min.
- Data Compression –> 11 lectures • 1hr 22min.
- Next Steps –> 1 lecture • 1min.
- ### APPENDIX – COMPLEXITY THEORY CRASH COURSE ### –> 12 lectures • 1hr 38min.
- Algorhyme FREE Algorithms Visualizer App –> 2 lectures • 2min.
- Course Materials (DOWNLOADS) –> 1 lecture • 1min.

Requirements

This course is about **data structures and algorithms**. We are going to implement the problems in **Java**, but I try to do it as generic as possible: so the core of the algorithms can be used in C++ or Python. The course takes approximately **12** hours to complete. I highly recommend typing out these data structures several times on your own in order to get a good grasp of it.

**Section 1 – Tries**

- what are prefix trees (
**tries**) - basics operations: insertion, sorting and autocomplete
- longest common prefix problem
- prefix trees applications in networking (IP routing)

**Section 2 – Ternary Search Trees**

- what is the problem with tries?
- what are
**ternary search trees** - basic operations: insertion and retrieval
- applications of tries (IP routing and Boggle Game)

**Section 3 – Substring Search Algorithms**

- substring search algorithms
- brute-force substring search
- Z substring search algorithm
- Rabin-Karp algorithm and hashing
- Knuth-Morris-Pratt (KMP) substring search algorithm

**Section 4 – Strings**

**strings**in Java programming- what is the String Constant Pool?
- prefixes and suffixes
- longest common prefix problem
- longest repeated substring problem
- suffix tries and suffix arrays

**Section 5 – Sorting Algorithms**

- basic sorting algorithms
- bubble sort and selection sort
- insertion sort and shell sort
- quicksort and merge sort
- comparison based and non-comparison based approaches
- string sorting algorithms
- bucket sort and radix sort

**Section 6 – Data Compression Algorithms**

- what is
**data compression** - run length encoding
- Huffman-encoding
- LZW compression and decompression

**Section 7 – Algorithms Analysis**

- how to measure the running time of algorithms
- running time analysis with big
**O**(ordo), big**Ω**(omega) and big**θ**(theta) notations - complexity classes
- polynomial (P) and non-deterministic polynomial (NP) algorithms
- O(1), O(logN), O(N) and several other running time complexities

First, we are going to discuss **prefix trees**: modern search engines for example use these data structures quite often. When you make a google search there is an autocomplete feature because of the underlying trie data structure. It is also good for sorting: hashtables do not support sort operation but on the other hand, tries do support.

**Substring search **is another important field of computer science. You will learn about Z algorithm and we will discuss brute-force approach as well as Rabin-Karp method.

The next chapter is about **sorting**. How to sort an array of integers, doubles, strings or custom objects? We can do it with bubble sort, insertion sort, mergesort or quicksort. You will learn a lot about the theory as well as the concrete implementation of these important algorithms.

The last lectures are about **data compression**: run-length encoding, Huffman encoding and LZW compression.

Thanks for joining the course, **let’s get started!**