Algorithms and Complexity (AL) (12%) For Computer Science Students
AL1. Basic algorithmic analysis [core]
AL2. Algorithmic strategies [core]
AL3. Fundamental computing algorithms [core]
AL4. Automata theory [elective]
AL1. Basic algorithmic analysis [3%] [core]
Minimum core coverage time: 4 hours
Topics:
Topics:
Topics:
AL1. Basic algorithmic analysis [core]
AL2. Algorithmic strategies [core]
AL3. Fundamental computing algorithms [core]
AL4. Automata theory [elective]
Recommended Books:
1. Design and Analysis of Algorithms By Jefry D. Smith
2. Introduction to Automata and Language Theory by John E.
Hopcroft, Rajeev Motwani and Jeffrey D. Ullman
Hopcroft, Rajeev Motwani and Jeffrey D. Ullman
Algorithms are fundamental to computer science and software engineering. The real-world performance of any software system depends on only two things: (1) the algorithms chosen and (2) the suitability and efficiency of the various layers of implementation. Good algorithm design is therefore crucial for the performance of all software systems. Moreover, the study of algorithms provides insight into the intrinsic nature of the problem as well as possible solution techniques independent of programming language, programming paradigm, computer hardware, or any other implementation aspect.
An important part of computing is the ability to select algorithms appropriate to particular purposes and to apply them, recognizing the possibility that no suitable algorithm may exist. This facility relies on understanding the range of algorithms that address an important set of well-defined problems, recognizing their strengths and weaknesses, and their suitability in particular contexts. Efficiency is a pervasive theme throughout this area.
Minimum core coverage time: 4 hours
Topics:
- Asymptotic analysis of upper and average complexity bounds
- Identifying differences among best, average, and worst case behaviors
- Big O, little o, omega, and theta notation
- Standard complexity classes
- Empirical measurements of performance
- Time and space tradeoffs in algorithms
- Using recurrence relations to analyze recursive algorithms
- Explain the use of big O, omega, and theta notation to describe the amount of work done by an algorithm.
- Use big O, omega, and theta notation to give asymptotic upper, lower, and tight bounds on time and space complexity of algorithms.
- Determine the time and space complexity of simple algorithms.
- Deduce recurrence relations that describe the time complexity of recursively defined algorithms.
- Solve elementary recurrence relations.
Topics:
- Brute-force algorithms
- Greedy algorithms
- Divide-and-conquer
- Backtracking
- Branch-and-bound
- Heuristics
- Pattern matching and string/text algorithms
- Numerical approximation algorithms
- Describe the shortcoming of brute-force algorithms.
- For each of several kinds of algorithm (brute force, greedy, divide-and-conquer, backtracking, branch-and-bound, and heuristic), identify an example of everyday human behavior that exemplifies the basic concept.
- Implement a greedy algorithm to solve an appropriate problem.
- Implement a divide-and-conquer algorithm to solve an appropriate problem.
- Use backtracking to solve a problem such as navigating a maze.
- Describe various heuristic problem-solving methods.
- Use pattern matching to analyze substrings.
- Use numerical approximation to solve mathematical problems, such as finding the roots of a polynomial.
Topics:
- Simple numerical algorithms
- Sequential and binary search algorithms
- Quadratic sorting algorithms (selection, insertion)
- O(N log N) sorting algorithms (Quicksort, heapsort, mergesort)
- Hash tables, including collision-avoidance strategies
- Binary search trees
- Representations of graphs (adjacency list, adjacency matrix)
- Depth- and breadth-first traversals
- Shortest-path algorithms (Dijkstra's and Floyd's algorithms)
- Transitive closure (Floyd's algorithm)
- Minimum spanning tree (Prim's and Kruskal's algorithms)
- Topological sort
- Implement the most common quadratic and O(NlogN) sorting algorithms.
- Design and implement an appropriate hashing function for an application.
- Design and implement a collision-resolution algorithm for a hash table.
- Discuss the computational efficiency of the principal algorithms for sorting, searching, and hashing.
- Discuss factors other than computational efficiency that influence the choice of algorithms, such as programming time, maintainability, and the use of application-specific patterns in the input data.
- 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.
AL4. Automata theory [3%] [elective]
Topics: - Deterministic finite automata (DFAs)
- Nondeterministic finite automata (NFAs)
- Equivalence of DFAs and NFAs
- Regular expressions
- The pumping lemma for regular expressions
- Push-down automata (PDAs)
- Relationship of PDAs and context-free grammars
- Properties of context-free grammars
- Turing machines
- Nondeterministic Turing machines
- Sets and languages
- Chomsky hierarchy
- The Church-Turing thesis
- Determine a language's location in the Chomsky hierarchy (regular sets, context-free, context-sensitive, and recursively enumerable languages).
- Prove that a language is in a specified class and that it is not in the next lower class.
- Convert among equivalently powerful notations for a language, including among DFAs, NFAs, and regular expressions, and between PDAs and CFGs.
- Explain at least one algorithm for both top-down and bottom-up parsing.
- Explain the Church-Turing thesis and its significance.
No comments:
Post a Comment