Subject Description

COMP10002 Foundations of Algorithms is designed to reinforce your programming skills and computing knowledge. In it, you will learn the language C, and how C programs are structured, compiled, and managed. At the same time, the subject is about algorithms, the fundamental building blocks of computation. Topics include dynamic data structures, the algorithms that manipulate them (lists, trees, hash tables), searching algorithms including pattern searching, and sorting algorithms. You are expected to develop your own ability to synthesize algorithmic approaches, and to evaluate problems and computational tasks in terms of what algorithmic techniques might be applicable.

The following people are involved in this subject in Semester 1, 2024:

Principal Coordinator: Dr. Jianzhong Qi

Subject Coordinator: Dr. Shaanan Cohney

  • Email:
  • Office Hours: 1PM Mondays, Melbourne Connect, Superfloor (M)
    • Private and Zoom Consultations Available by Appointment

Head Teaching Fellow: Isabelle Ostrowski

Production Associate: Rithik Rakesh

Teaching Fellows:

  • Lenny Bloom

  • Alan Lu

  • Enda Han

  • Harry Harper

  • Alex Gorddard

  • Tracy Bu

  • James Doan

  • JiWon Bae

  • Violet Zheng

First Year Fellows:

  • Rose-Maree Locsei

  • Anh Chau

  • Daksh Agrawal

  • Tugsgerel Lkhagvasuren

The coordinators are responsible for the overall organization of the subject and for the selection of lecture and workshop material. Assistance is provided by the teaching fellows who manage the workshops. Make a note of the name of your teaching fellow at your first workshop. You are however welcome to attend any workshop, not just the one you are assigned to, so long as there is capacity (with preference to enrolled students).


Each week, you are expected to attend three lectures. If nothing else, please attend the first lecture to meet some of your classmates and enjoy our return to campus.

The primary ways we’ll use lectures are:

  • To present the principles of the subject, illustrated by examples.
  • To introduce the material that will be developed in workshops.
  • To make announcements about the subject, particularly about the syllabus and assessment.
  • To inspire you to conduct the necessary work to learn the subject material It is intended that lectures this semester will have interactive elements, to incentivize attendance and to promote engaged learning.

Much, though not all, of the information presented in lectures is available from other sources, primarily the textbook, and Ed. Even so, you should endeavour to attend all of your scheduled lectures.

We’ll make the lectures as engaging and informative as possible, however they may not be to everyone’s taste. If you prefer to look elsewhere to learn the material we’re happy to support you. A few resources that we find particularly helpful:

  • Harvard CS50: Harvard College’s Introduction to Computer Science. Possibly the most entertaining Intro to CS lectures.
  • The C Programming Language, Kernighan and Ritche, 1978 (1ed), 1988 (2ed): Now outdated, but still well written introduction to C. Dr. Cohney first learned C from this book.
  • Stack Overflow list of best books on C: Take a look and see which you like
  • Algorithms with Tim Roughgarden: Dr. Cohney first learned algorithms from this Coursera course (more advanced)

Lecture Slides

Slides for this class will be used as a learning and presentation aid—and are intentionally not designed to be study material. The ideal slide off which to study looks different to one used to best teach a class, despite the fact that many classes you may have previously taken have used the same slides for both purposes.

We will however provide some supplementary study materials beyond the presentation slides, which will be posted throughout the semester.


Each week starting from Friday of Week 1 of semester, you will be expected to attend a two-hour workshop, which will be run in a mixed model of both on campus.

The main purposes of workshops are:

  • To give you an opportunity to raise questions about the subject.
  • To clarify any problem that you are having.
  • To discuss alternative solutions to the assigned exercises.
  • To independently implement one or more of those solutions.
  • To develop your confidence in using computers to solve problems.

You will get much more benefit from the workshops if you ask questions and contribute to the discussion. That can only happen if you prepare in advance. It is important that you work through the assigned exercises before attending your assigned class.

If you do not adequately prepare, you will probably not be able to finish all the work during your lab time. Although the various Faculty of Engineering and IT computer laboratories are available at times outside of your scheduled class, you will find it much easier to complete your work when you have a tutor to assist you with problems.

Our staff will also provide some assistance outside of workshops through the Discussion Forum on Ed—please use this with aplomb! The questions you ask will also be useful to your peers, and to future iterations of the subject.

Workshop Difficulty

This year we are offering two varieties of workshops that we designate for students who are Less Comfortable and More Comfortable with the course material.

The Less Comfortable workshops are our traditional format, for students who are newer to programming and computer science. These make up the bulk of the workshops.

We are also offering two More Comfortable workshops that will cover content beyond that which will be covered in the lectures. The extra topics in these workshops will not be assessed.

Spaces in these workshops are limited, but we plan to make a recording of one of the sessions available each week. Why choose one of these? They will give you a chance to explore more advanced topics and develop your skills in a more challenging environment. If you are in the less comfortable bucket—do not worry. The majority of workshops will be for you.

First Year Learning Center

To aid you in your studies, we have created a drop-in support system through the CIS Learning Center, Located on Level 3, Melbourne Connect. It is a space to meet with your peers and tutors to work on your assignments, eat, snacks, and mess around.

The space will be open from 9am to 5pm Monday to Friday, with tutors available to support you at times to be announced. You can find more information on the CIS Learning Center page.


Like any class, we require a certain level of buy-in and behaviour to make things run smoothly and fairly. Our expectations from you include but are not limited to those for all CIS students at the University of Melbourne. Your first year computing courses are particularly important in that there is a substantial correlation between what you put into the course, including during lectures, and the skills you attain at the end. If you give this class your all, we will work hard to reward it and match it with your learning.


In total, we expect you to spend about 10 to 12 hours per week on this subject, starting in Week One and continuing through until the exam.

To help you reach this target, you are encouraged to prepare a complete study timetable that shows, for this subject, the following 12 hours:

  • Three hours of lecture attendance, plus three hours of follow-up lecture review. In each review hour, you should work through the content of the previous lecture to consolidate your understanding and read the relevant sections of the textbook. (Six hours in total).
  • Two hours of workshop attendance, plus two hours of preparation prior to that class. (Four hours in total).
  • Two further hours per week of review and/or reading, perhaps including a Study Group meeting with other students enrolled in this subject, and/or working independently on the assessed project work.

When the similar demands from your other three subjects are fitted into the equation, it is clear that you need to spend 40–48 hours per week on your University study. If you have outside interests (including work) that consume more than approximately 12 to 15 hours per week, you are seriously jeopardizing your chances of successfully completing a full- time subject load.

If your outside interests cannot be restricted to fewer than 12 hours per week, you should consider taking only three subjects per semester

Seeking Further Assistance

Canvas should be your first port of call when seeking help. Issues that affect multiple students are likely to have been picked up and answered via Ed, the class message-board Ed for staff, or other students, to answer. Even if you don’t have questions of your own, you are likely to be able to benefit by reading other students’ queries and will perhaps even able to post answers to help them out. Staff will routinely monitor the forums, and when necessary, provide additional answers to questions. You should also feel free to approach the lecturers for help. Immediately after each lecture or during office hours is usually a good time to ask quick questions, or to request appointments for longer discussions. You may also make contact by email to ask questions and to set appointments; the Canvas “Staff Information” page will be kept up to date with any scheduled office hours.

If there are external issues causing problems with your studies, there are also a number of avenues available. While your staff, including your tutors, are not trained support staff, they may be able to help resolve course related issues or direct you to services that can better assist you. Some resources that you should be aware of:

  • Student Equity and Disability Support: This University Office supports students with disabilities, medical conditions, with religious needs, carers, elite athletes and performers, and members of the armed forces/emergency workers.
  • Counselling & Psychological Services (CAPS): The University of Melbourne Counselling and Psychological Services (CAPS) provides free, confidential, short-term professional counselling to currently enrolled students, as well as a range of workshops, mental health training, and helpful resources. This includes a 24/7 crisis line.
  • Stop1: The centralized student support service that manages enrolments, finance, and more.
  • Academic Skills: Can help with acclimatizing to the professional environment of a University, and studying in Australia


A mid-semester test will be held in the lecture in Week 6 (tentative) worth 15% of your final mark.

Details of the mid-semester test will be made available closer to the date of the test. To help you prepare, a sample test will be provided. There will be test viewing sessions arranged.

There will also be regular problem sets accompanying weeks 2 to 9, to be completed during (and then after) the workshop. Each problem set is worth up to 1% of your final mark, for a maximum of 5%. At the conclusion of each week, the corresponding problem set will close and will not be available for later completion.

We will also have two assessed programming projects that account in total for 40% of your final grade. The two projects will be submitted online and will be due at Week 8 (tentative) and Week 12 (tentative).

The problem sets and projects will be primarily autograded: the bulk of your score will be based on whether your code produces the correct output for given inputs. We will in general provide a different set of test cases against which you can test your code, but be warned: the graded test cases may be more stringent than the ones we provide. The projects will also be marked by a human grader, who will look at your code and provide feedback on how to improve it.

The written 1.5-hour examination at the end of semester is worth 40% of your overall mark. The exam will require detailed knowledge of the workshop exercises and projects, so it is important that you understand all of the programming work. It will cover both the theoretical and practical aspects of the subject, weighted roughly according to how much emphasis we place on topics during our teaching.

Hurdle Requirements: To pass the subject as a whole, you must obtain at least 50% overall when all marks are combined; must obtain at least 16/40 in the project work; and must obtain at least 22/55 in the mid-semester test and end-of-semester written examination when those two marks are combined.

Syntax Timing (tentative) Weighting
Problem Sets Weeks 2-9 5%
Mid-Semester Test Week 6 15%
Two Assignments Week 8, Week 11 40%
Exam   40%

Academic Integrity

You are not permitted to use GitHub Copilot or any other automated code generation tool for any of the assessments in this subject. This is considered a substantial breach of academic integrity and will be treated as such.

In this subject, all assessed work is to be completed on an individual basis. You should be aware that we have access to sophisticated similarity checking software to automatically identify pairs of programs that have similar sections, even when variable names have been altered. If duplicate submissions are detected, both parties, receiver and giver, will be referred to the Faculty of Engineering and Information Technology (FEIT) for handling under the University Discipline procedures. For further information, see the University resource on academic integrity.

The University also has penalties that apply for misuse of computing facilities. You should respect copyright, and not store any unauthorized copyright material on any University computer; should refrain from accessing accounts and files other than your own; should not use University computing facilities for any non-study purposes; and should keep your own account secure.

We are also well aware of the many different strategies that students have used in the past to violate these policies, and routinely refer students to FEIT. Our staff have sophisticated tools to check for violations of this policy.

More importantly, it is not in your interest to violate this policy, as your learning is contingent on you doing the work. You are spending your time and money on the subject, and owe it to yourself to get out what you can. If you are struggling, your staff are here to support you and help you get on track. We can not do so unless you respect the need for honesty.

Assigned Text

The prescribed text is Programming, Problem Solving, and Abstraction with C by Alistair Moffat (revised edition, Pearson, 2012, with the blue cover). This textbook follows the course very closely, and a result will likely be the most helpful written resource. You will need to consult this text on a regular basis and should probably have your own copy. Information related to the text (including an errata listing) is at

Second-hand copies of the first edition (with the yellow cover) can also be used; differences between the first edition and second edition will be highlighted as they are encountered. An e-edition of the textbook (second edition) is available from the publisher’s website.

Subject Web Page

You are expected to visit both Ed and the course website every two or three days and read any subject announcements.

Getting Set Up For Coding in C

The software tools used in this subject are available as free downloads, and if you install them on your home computer or laptop, you will be able to work from home. Details of how to do this are linked from the Canvas page. You are also permitted to use any other C programming environment available, including the Windows Subsystem for Linux, and under MacOS on a Mac.

Another useful tool is VS Code. Note that knowledge of any particular software development tools is NOT part of the examinable content of this subject, VS Code and other similar editing environments are purely tools that facilitate your learning of C programming.

We will also be using Ed, an online development environment. More details on Ed will be provided after the commencement of the semester.

Dress For Success

The most important thing you can do through the semester is to step methodically through the assigned exercises, making them work on the computer and then exploring variations, doing your own “what if” experimentation. Doing this with another person will be even more rewarding and having a broad group of friends taking this subject is the second important thing. A strong support network means that you are much less likely to get left behind by lecture material, and regular discussions of the subject content as part of a study group–both asking and answering questions–is also beneficial.

Early in the semester is always a good time to make new friendships, so for the next few weeks don’t hesitate to introduce yourself to others at the start of each lecture and workshop.