At the end of this course, students will be able to:

- design and analyze basic algorithms such as sorting and searching

- learn basic algorithm design principles such as dynamic programming, divide and conquer, and backtracking

- learn and use basic data structures such as stack, queues and trees