What you'll learn:
- grasp the fundamentals of algorithms and data structures
- detect non-optimal code snippets
- learn about arrays and linked lists
- learn about stacks and queues
- learn about binary search trees
- learn about balanced binary search trees such as AVL trees or red-black trees
- learn about priority queues and heaps
- learn about B-trees and external memory
- learn about hashing and hash tables
This course is about data structures and algorithms. We are going to implement the problems in Java. The course takes approximately 20 hours to complete. It is highly recommended to type out these data structures several times on your own in order to get a good grasp of it.
Section 1:
data structures and abstract data types
Section 2 - Arrays
what are arrays
what is random access and how to indexes
Section 3 - Linked Lists
linked lists and doubly linked lists
linked list related interview questions
Section 2 - Stacks and Queues:
what are stacks and queues
heap memory and stack memory
visualizing stack memory
Section 3 - Binary Search Trees (BSTs):
what are tree data structures?
how to achieve O(logN)logarithmic running time?
binary search trees
Section 4 - AVL Trees
what is the problem with binary search trees?
balanced search trees:AVLtrees
rotations
Section 5 - Red-Black Trees
what are red-black trees?
what is recovering operation?
comparing AVL trees and red-black trees
Section 6 - Splay Trees
splay trees and caches
achieve O(1) running time for getting the recently visited item
Section 7 - Heaps and Priority Queues
what are priority queues?
what is heap data structure?
how to do sorting in O(NlogN) with heaps?
Section 8 - B-Trees
external memory and the main memory (RAM)
B-trees and their applications in memory
B* trees and B+ trees
Section 9 - Hashing and HashMaps:
what are hashing and hashtables (hashmaps)
what are hash-functions
how to achieve O(1) running time complexity
Section 10 - 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 11 - 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 12 (BONUS):
what is LRU cache
LRU cache implementation
Section 13 (BONUS):
Fenwick trees (binary indexed trees)
binary indexed tree implementation
Section 14 - 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
In each chapter you will learn about the theoretical background of each algorithm or data structure, then we are going to write the code on astep by step basisin Eclipse, Java.
Most of the advanced algorithms relies heavily on these topics so it is definitely worth understanding the basics. These principles can be used in several fields: in investment banking, artificial intelligence or electronic trading algorithms on the stock market.
Thanks for joining the course, let's get started!