Learning Objectives
Week 1: Sorting Algorithms
Concept Map
By the end of these lessons, students should be able to:
- Apply Python's procedural programming and basic data structures
 - Define and call functions
 - describe bubble sort and insertion sort algorithm and ways to optimise it.
 - Implement Bubble sort and Insertion sort algorithms to sort a sequence of number
 - Use print statements to debug code
 
Week 2: Analysing Programs
Concept Map
By the end of these lessons, students should be able to:
- Implement binary heap using Python's built-in list
 - Describe heap property
 - Describe the steps to build heap
 - Implement algorithm to restore heap property
 - Write functions to do binary heap data structure operation
 - Implement heapsort using iteration
 - Define Big-O notation and other asymptotic notations
 - Derive complexity of a code using its computation model
 - Create plots from array data for visualising computational time
 - Measure computation time for bubble sort, insertion sort, built-in sort, and heapsort
 
Week 3: Divide and Conquer
Concept Map
By the end of these lessons, students should be able to:
- Solve problems using recursion
 - Identify problems that has recursive solutions
 - Explain and implement merge sort algorithm
 - Derive solution of recurrence of merge sort using recursion-tree method
 - Measure computation time of merge sort and compare it with the other sort algorithms
 
Week 4: Object-Oriented Paradigm
Concept Map
By the end of these lessons, students should be able to:
- Create 
classdefinitions with initialization and other methods - Create stored property and computed property
 - Draw UML class diagram of a class with attributes and methods
 - Explain 
has-arelationship - Discuss object aliasing and copying
 - Draw UML class diagram for 
has-arelationship - Implement abstract data type for Stack, Queue using Object Oriented paradigm
 - Apply Stack and Queue for some applications
 - Implement Queue using double Stack and discuss implementation impact on computation time
 
Week 5: Searching Data
Concept Map
By the end of these lessons, students should be able to:
- Use Dictionary to represent graph
 - Apply basic dictionary operations
 - Define graph, vertices, edges and weights
 - Differentiate directed and undirected graphs
 - Define paths
 - Create a 
Vertexclass and a Graph class - Represent graphs using adjacency-list representation or adjacency-matrix representation
 - Explain and implement breadth first search
 - Explain and implement depth first search
 
Week 6: Inheritance and Object-Oriented Design
Concept Map
By the end of these lessons, students should be able to:
- Inherit a class to create a child class
 - Explain 
is-arelationship - Draw UML diagram for 
is-arelationship - Override operators to extend parent's methods
 - Implement Deque data structure as a subclass of Queue
 - Implement Array and Linked List data structure from the same base class
 
Week 8: Visualizing and Processing Data
Concept Map
By the end of these lessons, students should be able to:
- Create scatter plot and statistical plots like box plot, histogram, and bar plot
 - Create a Panda's DataFrame and selecting data from DataFrame
 - Using library to read 
CSVorEXCELfile - Split data randomly into training set and testing set
 - Normalize data using min-max normalization
 - Give example of linear regression and classification
 
Week 9: Modelling Continuous Data
Concept Map
By the end of these lessons, students should be able to:
- Write objective function of linear regression
 - Implement Gradient Descent algorithm for optimisation
 - Train linear regression model using gradient descent
 - Transform data for higher order features
 - Evaluate linear regression model using 
r^2and mean-squared-error - Evaluate and choose learning rate
 - Plot cost function over iteration time
 - Plot linear regression
 
Week 10: Classifying Categorical Data
Concept Map
By the end of these lessons, students should be able to:
- Write objective function of logistic regression
 - Use logistic regression to calculate probabilities of binary classification
 - Train logistic regression model
 - Split data into training, validation, and testing set
 - Classify multi-class problems using one-vs-all technique
 - Calculate confusion matrix, precision, and recall
 
Week 12: Design of State Machines
Concept Map
By the end of these lessons, students should be able to:
- Define a state machine
 - Implement an Abstract Base Class for State Machine using abc module
 - Define output function and next state function
 - Draw state transition diagram and time-step table
 - Implement output function and next state function inside 
get_next_valuesoverridden method. - Apply breadth first search to perform state-space search