diff --git a/README.md b/README.md index a40b16e..2a02d41 100644 --- a/README.md +++ b/README.md @@ -1,132 +1 @@ -# Algorithms and Data Structures - -## Content -* [Description](#description) -* [Learning Outcomes](#learning-outcomes) -* [Assignments](#assignments) -* [Contacts](#contacts) -* [Delivery of the Learning Module](#delivery-of-the-learning-module) -* [Schedule](#schedule) -* [Requirements](#requirements) -* [Resources](#resources) - + [Textbooks](#textbooks) - + [Documents](#documents) - + [Videos](#videos) - + [How to get help](#how-to-get-help) -* [Folder Structure](#folder-structure) -* [Acknowledgement](#acknowledgement) - -## 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_cohort_three/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](./01_materials/slides/1_motivation_big_o.ipynb) | -| 2 | Data Structures, Sorting, and Searching | [Slides](./01_materials/slides/2_ds_search_sort.ipynb) | -| 3 | Recursion | [Slides](./01_materials/slides/3_recursion.ipynb) | -| 4 | Recursion | [Slides](./01_materials/slides/3_recursion.ipynb) | -| 5 | Recursive Data Structures | [Slides](./01_materials/slides/4_recursive_ds.ipynb) | - -## Requirements -* Participants are not expected to have any coding experience; the learning content has been designed for beginners. -* Participants are encouraged to ask questions, and collaborate with others to enhance their learning experience. -* 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](https://github.com/UofT-DSI/onboarding/). -* 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: - * [Jupyter](https://marketplace.visualstudio.com/items?itemName=ms-toolsai.jupyter) - * [Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python) - -## Assignments - -Participants should review the [Assignment Submission Guide](https://github.com/UofT-DSI/onboarding/blob/main/onboarding_documents/submissions.md) for instructions on how to complete assignments in this module. - -| Assessment | Description | Due Date | -|------------------|----------------------|----------| -| [Assignment 1](./02_activities/assignments/assignment_1.ipynb) | DSA coding practice | TBD | -| [Assignment 2](./02_activities/assignments/assignment_2.ipynb) | mock interview | TBD | - -## 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](https://www.manning.com/books/grokking-algorithms-second-edition)) - * 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 - -- [Big O Cheatsheet](https://www.bigocheatsheet.com/) -- [Sorting Cheatsheet](https://www.interviewcake.com/sorting-algorithm-cheat-sheet) -- [Visual Go - Graph Traversal](https://visualgo.net/en/dfsbfs?slide=2) -- [Codecademy Explanation](https://www.codecademy.com/article/tree-traversal) - -### Videos -- [15 Sorting Algorithms in 6 minutes](https://www.youtube.com/watch?v=kPRA0W1kECg) (Warning: This video could cause seizures for people with photosensitive epilepsy) -- [Big O Notation](https://www.youtube.com/watch?v=g2o22C3CRfU) -- [Breadth-first Search in 4 minutes](https://www.youtube.com/watch?v=HZ5YTanv5QE) -- [Depth-first Search in 4 minutes](https://www.youtube.com/watch?v=Urx87-NMm6c) -- [Nearest Neighbour Algorithm](https://www.youtube.com/watch?v=zPgsNsOfxQ8) -- [K-d Trees](https://www.youtube.com/watch?v=Glp7THUpGow) -- [Sorting Playlist](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOZSbGAXAPIq1BeUf4j20pl) - -### How to get help -![image](./steps_to_ask_for_help.png) - -
- -## Folder Structure - -```markdown -. -├── .github -├── 01_materials -├── 02_activities -├── 03_instructional_team -├── 04_cohort_three -├── .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. -* **cohort_three**: 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. +TEST