# Data Structures and Algorithms I (2023)

In this course, we will see how to structure data (data structures) so that complex operations (algorithms) can be efficiently executed. This course lies in the intersection of mathematics and computing. We will learn about the most basic and widely-used data structures and algorithms, prove their correctness and efficiency by writing mathematics, and implement them using C/C++ to understand how they work in practice.

## Administrivia

If you are absent from a lecture until Exam I for any reason, fill the form of absence for ES242.

Fill this form to select your availability for labs.

## Meetings

### Nov 15

Binary search trees. Definition. Search. Running-time. Discussion on proof approaches to worst-case upper bounds and lower bounds.

### Nov 13

Rehashing. Amortized analysis of insertion.

Application of linked lists: window switching.

### Nov 8

Implementing hash tables.

### Nov 6

Hash tables for implementing Python dictionaries.

### Nov 1

Implementing stacks and queues using linked lists, tail-sharing, circular singly linked lists.

### Oct 23

Linked lists. Allocation and insertion.

### Oct 18

Discussion on exam 2 solutions.

### Oct 9

BFS implementation for solving 8-puzzles with the minimum number of moves.

### Oct 4

Queues, BFS, finding solutions to puzzles in the smallest number of steps.

### Sep 27

Sudoku solving and DFS time complexity analysis.

### Sep 25

DFS for path-finding and writing a sudoku solver.

### Sep 20

Stacks and implementation of an RPN calculator.

### Sep 18

DFS and depth-first search trees. The tictactoe algorithm is a DFS.

### Sep 13

Encoding and decoding tictactoe strategy into bytes. Indexing boards.

### Sep 11

4x4 tic-tac-toe. Memoization. Fibonacci numbers with memoization.

### Sep 2

Exam I

### Aug 30

Fixing bug in tictactoe. Use of `void *`

in C.

### Aug 28

Implementing optimal tictactoe strategy using recursion.

### Aug 23

Proof of correctness for permutations. Accepting function pointers for generality.

### Aug 21

Recursion: Towers of Hanoi, Generating all permutations.

### Aug 17

Demo and support on setting up C, Git, Zulip by Reuben.

### Aug 16

gcdlcm function, definition of asymptotic primitives.

### Aug 14

Loop invariants, Time complexity of Euclid’s algorithm.

Design of gcdlcm function and multiple return values.

### Aug 10

Tutorial 1.

### Aug 9

Euclid’s GCD algorithm. Termination. Correctness (GCD Theorem). Direct proofs. Proof by induction.

### Aug 7

Discussion on gcd. Computers vs unit-cost RAM. Execution trace and running time.

### Aug 3

Discussion on specification of computational problems. Algorithms. Naive GCD computation.

### Aug 2

General introduction to the course, policies, administrative stuff.

Attendance in a lecture until exam I will earn you 1 mark provided you attempt the live quiz and score sixty percent or above. If you attend the live quiz and score less than sixty percent, you are required to attempt until you score sixty or above. If you miss a lecture for a valid reason, you can attend the quiz at a later time and receive the marks for attendance.

## Grading

Assessment | Percentage |
---|---|

Attendance | 10 |

Lab Assignments | 20 |

Exam I | 20 |

Exam II | 20 |

Exam III | 30 |

## Lecture Plan

#Lectures | Topic |
---|---|

1 | Problems, Algorithms |

1 | Execution, Time |

2 | Asymptotic Analysis |

2 | Proofs |

2 | Recursion |

2 | Stacks |

1 | Queues |

1 | Priority queues |

1 | Heaps, heapsort |

2 | Sets, Dictionaries |

1 | Dynamic arrays |

2 | Hashing |

2 | Binary Search Trees |

3 | Graphs, Trees |

2 | Traversal |

2 | Graph algorithms |

3 | Reductions |