Introduction and Motivation
Around 1.5 years ago, when I was teaching CS2040S, I once joked with my students that since I taught CS1101S and CS2040S, a natural career progression would be to teach CS3230 next. I truly meant it as a joke, but little did I know back then that I would eventually go on to do it.
CS3230 Design and Analysis of Algorithms was taught by Prof Arnab Bhattacharrya in the recent semester (AY21/22 Sem 1). The module is part of the graduation requirements for computer science majors, and I believe computer engineering majors have the option to take this module to fulfill their requirements. It builds on CS2040S, providing more advanced tools and techniques to design (divide & conquer, greedy, dynamic programming) and analyse (amortisation, randomised analysis) algorithms. Theoretical content such as the famous “P vs NP” problem is also briefly touched upon.
I was initially not even thinking of teaching the module. How it came to be was that my previous CS3230 tutor was offered by Prof Arnab to teach, but he could not due to his commitments. My tutor then asked if I would be willing to teach in his place. I happened to have sat in Prof Arnab’s other classes before, and felt like I could be confident in the quality of his teaching (which was a complaint for other instructors in previous semesters). Moreover, I also have gained confidence in my own abilities over the semesters. Lack of confidence was one of the reasons I had not taken it up sooner. The final reason was because in the same semester, I was going to take CS5234 Algorithms at Scale. I thought CS3230 would be a good way for me to revise my fundamentals as well. A little fun fact is that when I taught CS1101S, I took CS2040S. When I taught CS2040S, I took CS3230. Then when I taught CS3230, I took CS5234. It’s almost as if I taught things in order to solidify my fundamentals in the same semester. All things considered, I decided that it would be a good time and opportunity for me to take up the role.
Continue reading