Data-Structures-and-Algorithms
Repository for the Data Structures and Algorithms course
Course program
Course introduction
- Course program
- Trainers
- Resources
- Examination
Algorithms complexity
- Data Structures Overview
- Linear Structures, Trees, Hash Tables, Others
- Algorithms Overview
- Sorting and Searching, Combinatorics, Dynamic Programming, Graphs, Others
- Algorithms Complexity
- Time and Memory Complexity
- Mean, Average and Worst Case
- Asymptotic Notation O(g)
Linear data Structures
- Lists
- Static and Linked Implementation
- List and LinkedList
- Stacks
- Static and Linked Implementation
- The Stack Class
- Queues
- Circular and Linked Implementation
- The Queue Class
Trees and Tree Traversals
- Tree-like Data Structures
- Trees and Related Terminology
- Implementing Trees
- Traversing Trees
- DFS and BFS Traversals
- Balanced Search Trees
- Balanced Trees in .NET
Hash tables
- Dictionaries
- Hash Tables
- Dictionary<TKey, TValue> Class
- Sets: HashSet and SortedSet
Advanced Data Structures
- Standard .NET Data Structures
- Special .NET Collections
- Wintellect Power Collections
- Installation
- Power Collection Classes
- Implementing Priority Queue
- C5 Collections
- Other Advanced Data Structures
- Suffix trees, interval trees, ropes, tries, etc.
Data Structures Efficiency
- Fundamental Data Structures – Comparison
- Arrays
- Lists
- Trees
- Hash-Tables
- Sets
- Bags
- Choosing Proper Data Structure
Recursion
- What is Recursion?
- Recursion with Examples
- Calculating Factorial Recursively
- Generating All 0/1 Vectors Recursively
- Finding All Paths in a Labyrinth Recursively
- Recursion or Iteration?
- Harmful Recursion
- Optimizing Bad Recursion
- Memoization
Sorting Algorithms
- Sorting and classifications
- Review of the most popular sorting algorithms:
- Bubble sort
- Quick sort
- Merge sort
- Heap sort
- Shuffling algorithms
Searching Algorithms
- Searing algorithms
- Linear search
- Binary search
- Interpolation search
Combinatorics
- Definitions in Combinatorics
- Permutations
- Combinations
- Pascal's Triangle
- Binary Vectors
- Resources
Dynamic Programming
- Minimum and Maximum
- Divide-and-Conquer
- Dynamic programming Concepts
- Dynamic programming with Examples:
- Fibonacci numbers
- Longest increasing subsequence
- Longest common subsequence
Graphs
- Graph Definitions and Terminology
- Representing Graphs in C#
Graph Algorithms
- Graph Traversal Algorithms
- Connectivity
- Dijkstra’s Algorithm
- Topological sorting
- Prim and Kruskal
Strings and string algorithms
- Naive search
- Rabin-Karp
- Hashing
- Knuth-Morris-Pratt
State machines
Regular expressions
- Regular Expression Overview
- Regex syntax
- Using regular expression in C#