EECS 2510 - Nonlinear Data StructuresÌýCourse Syllabus
Credits/Contact Hours
4 credit hours & 3 50-minute lecture contact hours per week.
Textbook
The required textbook for this course is a web-based interactive zyBook
Other Related textbooks:Ìý
- Anany Levitin. Introduction to the Design and Analysis of Algorithms, 3rd edition, Pearson, 2012. ISBN 13: 978-0137541133.ÌýÌý
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest,. Introduction to algorithms, 3rd edition, MIT Press, 2009. ISBN-13: 978-0262033848Ìý
- Pat Morin, Open Data Structures: An Introduction (C++ edition). Freely available in HTML and PDF formats at https://opendatastructures.org/. This textbook is open source and comes with C++ source code (beta version).Ìý
Course Information
The data structures introduced in EECS 2500 are extended to include trees (binary,
balanced, and n-ary), graphs, and advanced sorting techniques. In addition, the C++
language is used as the main vehicle and is introduced in the course. Students are
expected to have a strong background in Java prior to this course.
Prerequisites:
Undergraduate level EECS 2500 (Linear Data Structures): Minimum grade of C-Ìý
Undergraduate level EECS 2520 (Discrete Structures): Maybe taken concurrently – with a minimum grade of C-
Required course for CSE program
Specific Goals - StudentÌýLearning ObjectivesÌý(SLOs)
Upon successful completion of this course, the student will be able to:Ìý
- Use an IDE.Ìý
- Learn how to construct and apply a binary (and n-ary) tree to the storage, organization, and lookup of data using C++.Ìý
- Learn how to implement special cases of binary trees, such as parse trees, height-balanced trees, and B-trees to solve problems.Ìý
- Learn how to apply O(nlogn) and O(n) sorting methods to data.Ìý
- Learn the fundamentals of input and output using streams in C++.Ìý
- Learn how to use pointers in C++ effectively.Ìý
- Learn how to solve a limited class of recurrence relations.Ìý
- Learn how to apply graphs and their related algorithms including single source, all-pairs shortest paths, and minimum spanning tree algorithms to solve practical problems.Ìý
- Learn how to implement heaps and its use in priority queues.Ìý
Topics
- Data structuresÌý
- Introduction to algorithmsÌý
- Relation between data structures and algorithmsÌý
- Abstract data types (ADTs)Ìý
- Algorithm efficiencyÌý
- Searching and algorithmsÌý
- Binary searchÌý
- Growth of functions and complexityÌý
- O notationÌý
- Algorithm analysisÌý
- Analyzing the time complexity of recursive algorithmsÌý
- Sorting algorithmsÌý
- Bucket sortÌý
- Radix sortÌý
- Overview of fast sorting algorithmsÌý
- List abstract data type (ADT)Ìý
- Linked listsÌý
- Hash tablesÌý
- Common hash functionsÌý
- Direct hashingÌý
- Binary treesÌý
- Application of treesÌý
- Binary search treesÌý
- BST search algorithmÌýÌý
- BST insert algorithmÌý
- BST remove algorithmÌý
- BST height and insertion orderÌý
- BST parent node pointersÌý
- BST: recursionÌý
- AVL: A balanced treeÌý
- Red-black tree: A balanced treeÌý
- Heaps and Heap sortÌý
- Priority queue abstract data type (ADT)Ìý
- TreapsÌý
- Graphs: IntroductionÌý
- Applications of graphsÌý
- Graph representations: Adjacency listsÌý
- Graph representations: Adjacency matricesÌý
- Directed graphsÌý
- Weighted graphsÌý
- Graphs: Breadth-first searchÌý
- Graphs: Depth-first searchÌý
- Algorithm: Dijkstra’s shortest pathÌý
- Algorithm: Bellman-Ford’s shortest pathÌý
- Topological sortÌý
- Minimum spanning tree (MST)Ìý
- Algorithm: Kruskal’s MSTÌý
- Algorithm: Prim’s MSTÌý
- All pairs shortest pathÌý
- Algorithm: Floyd-Warshall’s all-pair shortest pathÌý
- Huffman compressionÌý
- HeuristicsÌý
- Greedy algorithmsÌý
- Dynamic programmingÌý
- B-treesÌý
- 2-3-4 tree search algorithmÌý
- 2-3-4 tree insert algorithmÌý
- 2-3-4 tree rotations and fusionÌý
- 2-3-4 tree removalÌý