Introduction
- Purpose
To introduce various abstract data types and their associated algorithms
so that you can write correct, efficient,
robust, elegant and re-usable programs to solve problems.
- Correctness: per specifications
- Efficiency: by choosing and using proper concrete data structures
and good algorithms
- Robust: reasonable and sufficient exception handling
- Elegancy: easily understandable, maintainable and evovable code
- Re-usability: modularized implementation, can easily plug and play
in other projects
- Data Structures:
A data structure is a concrete representation of data from
the point of view of an implementer.
- Abstract Data Types (from Wiki)
An abstract data type (ADT) is a mathematical model for data types,
where a data type is defined by its behavior (semantics)
from the point of view of a user of the data, specifically in terms
of possible values, possible operations on data of this type,
and the behavior of these operations.
- For each ADT:
- What is it? (Its properties and its typical operations)
- How to build it? (Its implementation with various concrete data
structures and associated algorithms)
- How to use it? (Its typical applications)
- Concrete data structures we have encountered before
- Arrays
- Structs
- Pointer based lists
- Abstract data types we have encountered before
- Stack
- Queue
- some of Trees
- Topic Overview
- ADTs
- Data Objects as Black Boxes
- Stack and Queue (review)
- Lists and Sets
- Data Objects as Black Boxes with additional attributes
- Data Objects as Opaque Elements (reveal a bit of their internal
information, such as their keys)
- Dictionary and Maps
- Hashing and Hash table
- Tree
- Skip List
- Trie
- Heterogeneous Elements together: Graph (consists Nodes and Edges)
- Simple but widely used objects: String
- Algorithms
- recursion
- selection and sorting
- string matching
- data encoding and compression
- dynamic programming
- P and NP
- Complexity Analysis
- Analysis in general
- Big-O Notation (and little-o, Big-Omega, little-Omega, and Theta)
- Recurrence Equation
- Proof by Induction
- The Master Theorem