Giter Club home page Giter Club logo

cs1.3's Introduction

CS 1.3: Core Data Structures & Algorithms

Course Description

This course explores the foundations of computer science including discrete mathematics, abstract data types, data structures, and algorithm analysis and design. Students will compare and contrast iterative and recursive algorithms to analyze design and performance tradeoffs. Students will implement and test data structures including lists, stacks, queues, sets, maps, and trees. Students will then apply these to real-world problems like phone call routing to understand their tradeoffs. Students will also write technical blog articles about these topics to deepen understanding, improve technical writing, and bolster their online presence as knowledgeable and proficient software engineers.

Why you should know this

Data structures are the building blocks of computer science. It's the foundation that allows engineers to store and manipulate data. Once you have a place to store the data, if you need to find data or sort it in a specific way, you'll need search algorithms in order to do that.

Implementations of these concepts are how some of the largest tech companies in the world were built. Displaying relevant search results and finding friends and peers on social networks would be impossible without these core concepts. They're also the most common topics for software engineering interviews, and leveling up your knowledge on these topics is required to nail that technical interview!

Schedule

Course Dates: Tuesday, January 21 – Thursday, March 5, 2020 (7 weeks, 13 class sessions)

Class Times: 2:30–5:15pm on Monday & Wednesday (Section A) or Tuesday & Thursday (Section B)

Class Date Review of Prior Topic New Topic & Challenges Quiz or Deliverable Due
1 Tue/Wed, Jan 21/22 N/A Number Bases N/A
2 Mon/Tue, Jan 27/28 Number Bases Review Recursion & Search Algorithms N/A
3 Wed/Thu, Jan 29/30 Search Algorithms Review String Algorithms Quiz: Number Bases
4 Mon/Tue, Feb 3/4 String Algorithms Review Arrays & Linked Lists Due: Number Bases & Search Algorithms
5 Wed/Thu, Feb 5/6 Linked Lists Review Lists, Stacks & Queues Quiz: Search Algorithms
6 Mon/Tue, Feb 10/11 Stacks & Queues Review Maps & Hash Tables Due: Palindromes & String Algorithms
7 Wed/Thu, Feb 12/13 Hash Tables Review Technical Article Peer Review Quiz: Lists, Stacks & Queues
8 Mon/Tue, Feb 17/18 N/A Trees & Binary Search Trees Due: Lists, Stacks & Queues
9 Wed/Thu, Feb 19/20 Binary Search Trees Review Tree Traversals Quiz: Hash Tables
10 Mon/Tue, Feb 24/25 Tree Traversals Review Sets & Circular Buffers Due: Hash Tables & Article Draft
11 Wed/Thu, Feb 26/27 Sets Review Technical Article Peer Review Due: Trees & Tree Traversals
12 Mon/Tue, Mar 2/3 N/A Word Jumble Project Quiz: Trees & Sets, Due: Sets
13 Wed/Thu, Mar 4/5 N/A Word Jumble Project Due: Technical Article & Project

Prerequisites

Students must pass the following course and demonstrate mastery of its competencies:

Learning Outcomes

By the end of this course, students will be able to:

  1. Implement, compare and contrast iterative and recursive algorithms
  2. Analyze best-case and worst-case time and space complexity of an algorithm
  3. Implement several abstract data types and data structures including linked lists, stacks, queues, hash tables, maps, sets, and binary search trees
  4. Implement tree traversal algorithms: depth-first and breadth-first ordering
  5. Write technical articles to deepen understanding and demonstrate mastery

Assignments

Coding Challenges

Each lesson has an associated set of coding challenges with starter code and unit tests provided. Full details can be found in the "Challenges" section of each lesson linked in the schedule above.

Projects

The following self-guided projects are meant to test students' understanding of concepts covered in the course. Due to their open-ended nature, the projects are expected to be more challenging than the coding challenges with starter code and unit tests provided. Students will complete one of the projects, depending on the number of class sessions scheduled in the term.

Technical Articles

Students will also write a technical article about a topic related to course content to deepen their understanding, improve their technical writing skills, and demonstrate mastery of computer science, which will bolster their online presence as knowledgeable and proficient software engineers. Refer to the technical article guidelines for more information about article requirements and detailed tips on how to select a topic related to computer science, research the topic, create an outline, write your article, cite all sources of borrowed material, and provide feedback to other students.

Submissions

Students will submit their coding challenges, project, and technical article according to the following due dates listed below. Completion will be assessed according to the associated coding challenge rubrics. Students will first self-assess by reviewing their code and writing to evaluate it against each row of the rubric, then submit their rubric scores using the associated form linked below.

To pass each submission, students must earn the required number of points or higher indicated on the associated rubric. Note that all points within one submission are fungible (that is, interchangeable) and so if one portion of work is below the "Met All Expectations" column of the rubric, another portion of work submitted can "Exceed Expectations" (generally by completing stretch challenges) to earn an extra point to make up for the missing one. Therefore, it's wise to complete stretch challenges as "insurance" in case some work does not meet expectations.

Another way to think of the submissions is a game where your goal is to earn enough points to pass in whatever way you see fit, with rubrics as the rules of the game that you can optimize against and "win" to pass the course.

The instructor or teaching assistants will review students' submissions and verify or correct their self-assessed scores, then share feedback with the student through a GitHub issue opened on their repository. Feedback will include their status on that submission (that is, whether their work is passing the rubric or the student needs to improve and resubmit their work to pass).

Students can improve their code and writing, reassess it against the rubric, and resubmit their improved rubric scores before the last resubmission date listed below. Submissions received after the due date will not be considered unless the instructor has approved an extension in writing due to exceptional circumstances.

Submission Date Started Date Due Topics Included in Submission
1 Wed, Jan 22 Tue, Feb 4 Number Bases & Search Algorithms
2 Thu, Jan 30 Tue, Feb 11 Palindromes & String Algorithms
3 Thu, Feb 6 Tue, Feb 18 Linked Lists, Stacks & Queues
4 Tue, Feb 11 Tue, Feb 25 Hash Tables & Article Draft
5 Tue, Feb 18 Thu, Feb 27 Trees & Tree Traversals
6 Tue, Feb 25 Tue, Mar 3 Sets & Set Operations
7 Tue, Feb 11 Thu, Mar 5 Technical Article
8 Tue, Mar 3 Thu, Mar 5 Word Jumble Project

Evaluation

To pass this course, students must meet the following requirements:

  • Complete all required coding challenges, projects, and technical articles
  • Submit all code and writing with rubric scores by the due dates listed above
  • Pass all submissions according to the associated coding challenge rubrics
  • Pass the written assessment (summation of weekly quizzes) – use the study guide to prepare
  • Actively participate in class and abide by the attendance policy
  • Make up all classwork from all absences
  • No more than two unexcused absences ("no-call-no-shows")
  • No more than four excused absences (communicated in advance)

Repository Setup

⚠️ Important: Please follow these instructions exactly to set up your clone of this course repository.

Make School Course Policies

cs1.3's People

Contributors

neptunius avatar nyapal avatar ibirnam avatar aespaldi avatar olyve avatar avery246813579 avatar dalnk avatar

Watchers

James Cloos avatar  avatar

cs1.3's Issues

Feedback on number bases and search algorithms

Number bases
Great work on optimizing your number base methods! Challenge yourself by covering fractions and negatives, and writing tests for these cases.

Binary search
Great work on your binary search methods. Try implementing recursive permutation or combination functions and write new tests.

Feedback on palindromes and string algorithms

Palindromes
Great work on your palindrome methods. Challenge yourself by implementing anagram generating function and writing new tests.

Strings
Great work on your strings algorithms. Work on annotating time and space complexities for full credit. For further improving your code, consider how you could optimize your find_index and find_all_indices functions. You could use benchmarking for this! Is it faster to use find_index as a helper for find_all_indices or vice versa?

CS 1.3 Submissions 3, 4 and 5 review

Linked lists: All tests pass!

One small efficiency improvement we can make is in the insert_at_index method. If the index being passed in is equal to the length of the list, you can call append to quickly add it after current the tail.

Another is in your replace method. When you find the item you set your flag found to True, but keep searching through the rest of the list. If you use that flag to exit the loop after finding the item, it will increase the best case scenario when the item is found towards the start of the list.

Stacks: Looks great!

Queues: Looks good!

Hash tables: Looks good!

Binary trees: All tests pass when using recursive functions. _find_node_iterative does not work as expected. All conditionals in the while loop are checking node.data is item instead of 1 checking for a match, and 2 to check if it is node.data is less than or greater than item.

CS 1.3 Submissions 6 and 7 Review

Sets: Good work! I encourage you to think of more edge cases such as mixed type sets or empty sets in your unit tests. I also recommend checking the size of each set before most methods, as you can improve the run time by selecting the smaller set, or in the case of is_subset, avoid any work at all if the other set is larger than the current one.

Word Jumble: Most code works as expected, but you do not return the results of the unjumble method.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.