by pan » Wed Apr 20, 2022 1:04 pm
CSC225 Algorithms and Data Structures I
Existing Calendar Entry
Basic techniques for design, analysis, implementation of algorithms and data structures. Foundations: Random access machine model, time and space complexity, worst-case analysis, upper and lower bounds. Proof techniques for algorithm correctness. Basic data structures: stacks, queues, linked lists. Sorting: elementary sorting algorithms, mergesort, quicksort, priority queues. Searching: Binary search trees, balanced search trees, hash tables. Graphs: undirected and directed graphs, graph traversals and applications, topological sort. Algorithm design techniques: greedy, backtracking, divide and conquer.
Prerequisites
CSC115 or CSC116
MATH122
Current Topics
Algorithm Design and Analysis
- Algorithm design techniques
- Fundamental algorithm analysis
- Time and space complexity
- Asymptotic analysis
- Recursive analysis and recurrence relations
- Proof techniques
- Basic data structures: arrays, lists, stacks and queues
Searching and Sorting
- General purpose sorting algorithms, such as Heap sort, Insertion sort, Merge sort, Quick sort, and Selection sort
- Special purpose sorting algorithms, such as lexicographical sorting and Radix sort
- Priority Queues (including Heaps)
- Binary Search Trees
- Balanced Search Trees
- Graphs
Mathematical foundations
- Problem abstraction with graphs
- Data structures for graph representation
- Fundamental graph traversal algorithms and applications
- Connectivity and strong connectivity
- Topological sorting
Proposed Learning Outcomes (spring 2022)
- Explain the tradeoffs in data structure and algorithm design with respect to space/time complexity
Discrete math
- Apply combined identities, geometric sums, permutations, and combinations
- Explain the concept of the Pigeon Hole Principle
Pseudocode
- Express a simple algorithm in pseudo code
- Explain random access machine model – Determine the number of operations required to execute an algorithm through an analysis of pseudocode
Recursion
- Define recurrence relation for a given recursive algorithm
- Solve simple recurrence relations using substitution methods
Proofs
- Apply various proof techniques for algorithm correctness (i.e. proof by counterexample, direct proof, proof by contrapositive, proof by contradiction)
- Identification of the loop invariant by examining the pseudocode for an algorithm
- Apply proof by induction when analyzing algorithms and reasoning about their correctness (ie. loop invariant)
Asymptotic Analysis
- Define the concepts of problem size and running time
- Define the concept of asymptotic time complexity using (Big Oh, Big Omega, Big Thetha, Little Oh, Little Omega)
- Order functions by growth rate
- Explain why efficiency matters
- Compare/contrast time complexity measurements (best-case, average-case, or worst-case)
- Justify the time complexity of various algorithms (best-case, worst-case)
ADT review
- Recall and differentiate between stacks, queues, dequeues, lists
- Recall the impact of data structure choice on algorithm runtime
- Define the abstract data type Dictionary (i.e. Member, Insert, Delete operations)
Sorting
- Describe characteristics of sorting (in-place, stable sort)
- Recall definitions of partial and total orders
- Recall properties of relations (reflexive, symmetric, antisymmetric, transitive)
- Explain the comparison model of sorting and what correctness of comparison based sorting means
- Analyze the best-case and worst-case running time of Insertion Sort, Bubble Sort, Selection Sort
- Implement divide and conquer sorting algorithms (Merge Sort, Quicksort)
- Analyze best-case, worst-case running time of divide and conquer sorting algorithms (Merge Sort, Quicksort)
- Define the abstract data type Priority Queue (i.e. Member, Insert, DeleteMin/DeleteMax operations)
- Analyze the worst-case running time of Heapsort
- Explain why, in practice, Quicksort performs better than Heapsort
- Apply Pigeon Hole Principle to prove nlogn lower bound of comparison-based sorting algorithms
- Implement non-comparison sorting algorithms (Bucket Sort, Radix Sort)
- Analyze best-case, worst-case running time of non-comparison sorting algorithms (Bucket Sort, Radix Sort)
Trees
- Develop intuition that trees can be used to model many types of relations (ie. abstract syntax trees, hierarchies or organizations)
- Define tree nomenclature (e.g. root, node, interior points, leaf nodes, parent, children, height, rotted trees, forests)
- Prove tree properties (e.g. number of edges, number of edges in a forest with k components, or height of a balanced tree)
- Evaluate tree representations/algorithms in terms of space/time complexity (i.e. linked, arrays)
- Analyze and implement recursive and iterative tree traversal algorithms (i.e. pre-order/depth-first, in-order, post-order, level-order/breadth-first, Euler tour)
- Recall the abstract data type Dictionary/Map (i.e. search, insert operations)
- Recall the abstract data type Binary Search Tree (i.e. search, insert operations)
- Describe delete/remove operation for Dictionary/Map and Binary Search Tree
- Analyze the worst-case running time of Dictionary/Map and Binary Search Tree operations
Balanced Search Trees
- Define and identify a balanced search tree (at least 2 of the following covered: AVL, B-Trees, 2-3 Trees, Red-Black Trees)
- Analyze the worst-case running time of balanced search tree operations (search, insert, remove)
- Prove properties of balanced search trees (height, min/max leaves)
- Compare/contrast the runtime efficiency of operations in balanced and unbalanced trees
Graphs
- Develop intuition that graphs can be used to model many types of relations (ie. maps, social and physical networks, biological structures, etc.)
- Define graph nomenclature (e.g. undirected/directed graph, vertex, edge, etc.)
- Provide precise mathematical definitions of fundamental constructs from discrete mathematics, including: undirected/directed graph, vertex, edge, arc, degree, adjacent, incident, path, cycle, self-loop, directed acyclic graph (DAG), complete graph, subgraph, number of edges in a complete graph, sparse and dense graph, shortest path, transitive closure, connected, strongly-connected, and spanning tree.
- Implement graph representations (i.e. adjacency list, adjacency matrix) with related operations
- Analyze abstract data type Graph algorithms in terms of space/time complexity
- Implement iterative/recursive Graph traversal algorithms (i.e. preorder/depth-first (DFS), breadth-first (BFS))
- Analyze worst-case running time of Graph traversal algorithms (i.e. preorder/depth-first (DFS), breadth-first (BFS))
- Define spanning tree/spanning forest in relation to traversal algorithms
- Define and apply transitive closure relations to directed graphs
- Define algorithm to determine transitive closure on a directed graph
- Determine whether a graph is cycle-free using DFS – Implement and apply a topological sort on a directed graph
[quote]CSC225 Algorithms and Data Structures I
Existing Calendar Entry
Basic techniques for design, analysis, implementation of algorithms and data structures. Foundations: Random access machine model, time and space complexity, worst-case analysis, upper and lower bounds. Proof techniques for algorithm correctness. Basic data structures: stacks, queues, linked lists. Sorting: elementary sorting algorithms, mergesort, quicksort, priority queues. Searching: Binary search trees, balanced search trees, hash tables. Graphs: undirected and directed graphs, graph traversals and applications, topological sort. Algorithm design techniques: greedy, backtracking, divide and conquer.
Prerequisites
CSC115 or CSC116
MATH122
Current Topics
Algorithm Design and Analysis
* Algorithm design techniques
* Fundamental algorithm analysis
* Time and space complexity
* Asymptotic analysis
* Recursive analysis and recurrence relations
* Proof techniques
* Basic data structures: arrays, lists, stacks and queues
Searching and Sorting
* General purpose sorting algorithms, such as Heap sort, Insertion sort, Merge sort, Quick sort, and Selection sort
* Special purpose sorting algorithms, such as lexicographical sorting and Radix sort
* Priority Queues (including Heaps)
* Binary Search Trees
* Balanced Search Trees
* Graphs
Mathematical foundations
* Problem abstraction with graphs
* Data structures for graph representation
* Fundamental graph traversal algorithms and applications
* Connectivity and strong connectivity
* Topological sorting
Proposed Learning Outcomes (spring 2022)
* Explain the tradeoffs in data structure and algorithm design with respect to space/time complexity
Discrete math
* Apply combined identities, geometric sums, permutations, and combinations
* Explain the concept of the Pigeon Hole Principle
Pseudocode
* Express a simple algorithm in pseudo code
* Explain random access machine model – Determine the number of operations required to execute an algorithm through an analysis of pseudocode
Recursion
* Define recurrence relation for a given recursive algorithm
* Solve simple recurrence relations using substitution methods
Proofs
* Apply various proof techniques for algorithm correctness (i.e. proof by counterexample, direct proof, proof by contrapositive, proof by contradiction)
* Identification of the loop invariant by examining the pseudocode for an algorithm
* Apply proof by induction when analyzing algorithms and reasoning about their correctness (ie. loop invariant)
Asymptotic Analysis
* Define the concepts of problem size and running time
* Define the concept of asymptotic time complexity using (Big Oh, Big Omega, Big Thetha, Little Oh, Little Omega)
* Order functions by growth rate
* Explain why efficiency matters
* Compare/contrast time complexity measurements (best-case, average-case, or worst-case)
* Justify the time complexity of various algorithms (best-case, worst-case)
ADT review
* Recall and differentiate between stacks, queues, dequeues, lists
* Recall the impact of data structure choice on algorithm runtime
* Define the abstract data type Dictionary (i.e. Member, Insert, Delete operations)
Sorting
* Describe characteristics of sorting (in-place, stable sort)
* Recall definitions of partial and total orders
* Recall properties of relations (reflexive, symmetric, antisymmetric, transitive)
* Explain the comparison model of sorting and what correctness of comparison based sorting means
* Analyze the best-case and worst-case running time of Insertion Sort, Bubble Sort, Selection Sort
* Implement divide and conquer sorting algorithms (Merge Sort, Quicksort)
* Analyze best-case, worst-case running time of divide and conquer sorting algorithms (Merge Sort, Quicksort)
* Define the abstract data type Priority Queue (i.e. Member, Insert, DeleteMin/DeleteMax operations)
* Analyze the worst-case running time of Heapsort
* Explain why, in practice, Quicksort performs better than Heapsort
* Apply Pigeon Hole Principle to prove nlogn lower bound of comparison-based sorting algorithms
* Implement non-comparison sorting algorithms (Bucket Sort, Radix Sort)
* Analyze best-case, worst-case running time of non-comparison sorting algorithms (Bucket Sort, Radix Sort)
Trees
* Develop intuition that trees can be used to model many types of relations (ie. abstract syntax trees, hierarchies or organizations)
* Define tree nomenclature (e.g. root, node, interior points, leaf nodes, parent, children, height, rotted trees, forests)
* Prove tree properties (e.g. number of edges, number of edges in a forest with k components, or height of a balanced tree)
* Evaluate tree representations/algorithms in terms of space/time complexity (i.e. linked, arrays)
* Analyze and implement recursive and iterative tree traversal algorithms (i.e. pre-order/depth-first, in-order, post-order, level-order/breadth-first, Euler tour)
* Recall the abstract data type Dictionary/Map (i.e. search, insert operations)
* Recall the abstract data type Binary Search Tree (i.e. search, insert operations)
* Describe delete/remove operation for Dictionary/Map and Binary Search Tree
* Analyze the worst-case running time of Dictionary/Map and Binary Search Tree operations
Balanced Search Trees
* Define and identify a balanced search tree (at least 2 of the following covered: AVL, B-Trees, 2-3 Trees, Red-Black Trees)
* Analyze the worst-case running time of balanced search tree operations (search, insert, remove)
* Prove properties of balanced search trees (height, min/max leaves)
* Compare/contrast the runtime efficiency of operations in balanced and unbalanced trees
Graphs
* Develop intuition that graphs can be used to model many types of relations (ie. maps, social and physical networks, biological structures, etc.)
* Define graph nomenclature (e.g. undirected/directed graph, vertex, edge, etc.)
* Provide precise mathematical definitions of fundamental constructs from discrete mathematics, including: undirected/directed graph, vertex, edge, arc, degree, adjacent, incident, path, cycle, self-loop, directed acyclic graph (DAG), complete graph, subgraph, number of edges in a complete graph, sparse and dense graph, shortest path, transitive closure, connected, strongly-connected, and spanning tree.
* Implement graph representations (i.e. adjacency list, adjacency matrix) with related operations
* Analyze abstract data type Graph algorithms in terms of space/time complexity
* Implement iterative/recursive Graph traversal algorithms (i.e. preorder/depth-first (DFS), breadth-first (BFS))
* Analyze worst-case running time of Graph traversal algorithms (i.e. preorder/depth-first (DFS), breadth-first (BFS))
* Define spanning tree/spanning forest in relation to traversal algorithms
* Define and apply transitive closure relations to directed graphs
* Define algorithm to determine transitive closure on a directed graph
* Determine whether a graph is cycle-free using DFS – Implement and apply a topological sort on a directed graph[/quote]