Data Structures and Algorithms
(adapted from the
Final Report of the Computing Curricula 2001 project,
a joint undertaking of
the IEEE-CS and the ACM)
Data structures and algorithms are
fundamental to computer science and software engineering. The real-world
performance of software is strongly influenced by:
· the use of algorithms that are appropriate and efficiency across the various layers of implementation.
In addition, the study of data structures and algorithms can provide insight into the intrinsic nature of a problem as well as possible solution techniques for the problem that are independent of programming language, programming paradigm, computer hardware, or any other implementation aspect.
An important part of computing is
the ability to use both data structures algorithms that are appropriate to
particular purposes and to apply them, recognizing their strengths and
weaknesses, and their suitability in particular contexts. Efficiency is a
pervasive theme throughout this area.
Topics:
Learning objectives:
1.
Solve problems involving binary search trees, especially
preorder, inorder, and postorder traversals; heaps, and balanced binary search
trees.
2.
Solve problems using the fundamental graph algorithms,
including depth-first and breadth-first search, single-source and all-pairs
shortest paths, transitive closure, topological sort, and at least one minimum
spanning tree algorithm.
3.
Implement the most common quadratic and O(N log N) sorting
algorithms.
4.
Design and implement an appropriate hashing function for an
application.
5.
Design and implement a collision-resolution algorithm for a
hash table.
6.
Choose the appropriate data structure for modeling a given
problem.
7.
Explain the use of big O notation to describe the amount of
work done by an algorithm.
8.
Use big O to determine the time and space complexity of
simple algorithms.
9.
Discuss the computational efficiency of the principal
algorithms for sorting, searching, and hashing.
10.
Deduce recurrence relations that describe the time
complexity of recursively defined algorithms.