Skip to content

UofT-DSI/algorithms_and_data_structures

Repository files navigation

Algorithms and Data Structures

Content

Description

An understanding of algorithms and data structures will aid the implementation of data science or machine learning methods in practice. Machine learning emphasizes prediction, scalability, and autonomy. Understanding algorithms and data structures is essential to the latter two aims of ML. Participants will be able to describe how algorithms will perform when scaled or find practical methods for computers to solve problems autonomously. Industry often requires knowledge of algorithms and data structures and the ability to communicate the solving process. This module will provide the knowledge and terminology necessary to succeed in these situations.

The module will introduce participants to terminology to discuss algorithms. This includes Big-O notation, time and space complexity. The next section will explore array-based data structures, searching, and sorting. Participants should be able to justify algorithm or data structure choices based on time and space complexity analysis. Then, participants will be introduced to recursion. We will solve problems using recursion and implement data structures that are best understood from a recursive perspective. Participants will justify their design choices. The last portion of the module will be dedicated to solving optimization problems quickly. Participants will be introduced to a variety of techniques to solve problems and identify when and how a solution can be optimized.

Learning Outcomes

By the end of the module, participants will be able to:

  1. Assess options and choices around fundamental algorithms and data structures using Big-O notation.
  2. Use recursive functions.
  3. Select appropriate data structures
  4. Translate a client-led problem into an optimization problem.
  5. Identify why code is running slowly to improve its performance.

Contacts

Questions can be submitted to the #cohort-3-help channel on Slack

  • Technical Facilitator: {Name} {Pronouns}. Emails to the Technical Facilitator can be sent to {first_name.last_name}@mail.utoronto.ca.
  • Learning Support Staff: {Name} {Pronouns}. Emails to the Technical Facilitator can be sent to {first_name.last_name}@mail.utoronto.ca.

Delivery of the Learning Module

This module will include live learning sessions and optional, asynchronous work periods. During live learning sessions, the Technical Facilitator will introduce and explain key concepts and demonstrate core skills. Learning is facilitated during this time. Before and after each live learning session, the instructional team will be available for questions related to the core concepts of the module. The Technical Facilitator will introduce concepts through a collaborative live coding session using the Python notebooks found under /01_materials/slides. The Technical Facilitator will also upload live coding files to this repository for participants to revisit under ./06_this_cohort/live_code.

Optional work periods are to be used to seek help from peers, the Learning Support team, and to work through the homework and assignments in the learning module, with access to live help. Content is not facilitated, but rather this time should be driven by participants. We encourage participants to come to these work periods with questions and problems to work through.   Participants are encouraged to engage actively during the learning module. They key to developing the core skills in each learning module is through practice. The more participants engage in coding along with the instructional team, and applying the skills in each module, the more likely it is that these skills will solidify.

Schedule

Live Learning Session Topic Resources
1 Motivation and Big-O Notation Slides
2 Data Structures, Sorting, and Searching Slides
3 Recursion Slides
4 Recursion Slides
5 Recursive Data Structures Slides

Requirements

  • Participants are expected to have completed Shell, Git, and Python learning modules.
  • Participants are encouraged to ask questions, and collaborate with others to enhance learning.
  • Participants must have a computer and an internet connection to participate in online activities.
  • Participants must not use generative AI such as ChatGPT to generate code in order to complete assignments. It should be used as a supportive tool to seek out answers to questions you may have.
  • We expect participants to have completed the instructions mentioned in the onboarding repo.
  • We encourage participants to default to having their camera on at all times, and turning the camera off only as needed. This will greatly enhance the learning experience for all participants and provides real-time feedback for the instructional team.
  • Participants must have VSCode installed with the following extensions:

Assignments

Participants should review the Assignment Submission Guide for instructions on how to complete assignments in this module.

Assessment Description Due Date
Assignment 1 DSA coding practice Friday, November 15, 2024 (11:59pm)
Assignment 2 mock interview Monday, November 18, 2024 (11:59pm)

Resources

Feel free to use the following as resources:

Textbooks

The course content, slides, and recommended problems follow these two textbooks. They are freely available online after a quick Google search.

  • Bhargava, A. Y. (2016). Grokking algorithms: An illustrated guide for programmers and other curious people. Manning. (link)
    • This textbook is easy to understand and very accessible. We will go deeper than this text.
  • Cormen, T. H. (Ed.). (2009). Introduction to algorithms (3rd ed). MIT Press.
    • We won't cover the majority of this textbook. Many topics are too advanced and it goes into a lot of detail.

Documents

Videos

How to get help

image


Folder Structure

.
├── .github
├── 01_materials
├── 02_activities
├── 03_instructional_team
├── 04_this_cohort
├── .gitignore
├── LICENSE
├── README.md
└── steps_to_ask_for_help.png
  • .github: Contains issue templates and pull request templates for the repository.
  • materials: Module slides and interactive notebooks (.ipynb files) used during learning sessions.
  • activities: Contains graded assignments, exercises, and homework to practice concepts covered in the learning module.
  • instructional_team: Resources for the instructional team.
  • this_cohort: Additional materials and resources for cohort three.
  • .gitignore: Files to exclude from this folder, specified by the Technical Facilitator
  • LICENSE: The license for this repository.
  • README: This file.
  • steps_to_ask_for_help.png: Guide on how to ask for help.