Coder Social home page Coder Social logo

ashfarhangi / algorithms_data_structures_notes Goto Github PK

View Code? Open in Web Editor NEW
27.0 1.0 2.0 5.09 MB

Algorithms & Data Structures Notes

License: GNU Affero General Public License v3.0

Python 23.13% Jupyter Notebook 76.87%
notes udacity nanodegree summary projects algorithms-nanodegree algorithms data-structures algorithm computer-science datastructures

algorithms_data_structures_notes's Introduction

Data Structures and Algorithms

The landscape of coding interviews has evolved dramatically, becoming more challenging as we now have access to a plethora of coding problems. This increased competition means that merely understanding basic data structures and solving a handful of problems is no longer sufficient. This repository serves as a comprehensive guide to tackling these complexities. It is designed to help you master the intricacies of data structures and algorithms through a structured and pattern-based approach. Here, we break down the most common and challenging coding interview questions into understandable patterns, providing you with the tools to recognize and solve similar problems.

Star History Chart

1. Foundation

  • By large, Computer Science concepts are seen as standalone. However, you might need to use it to build upon other elements.

For instance, in Machine Learning, there is a need for Linear Algebra, Calculus, and Statistics.

  • Reasons for using DSA in ML:
    • Finding the correct DS for various situations
      • Be thoughtful for time/space complexity in:
        • Model Training
        • Model deployment on a larger scale

Source: Data Structures, Algorithms, and Machine Learning Optimization

2. Big O Notion

The rate of increase of an algorithm is also referred to as the order of the algorithm

For example, instead of saying "this relationship has a linear rate of increase", we could instead say, "The order of this relationship is linear".

O Notation, and you'll see that the "O" in the name refers to the order of the rate of increase.

  • Manually shipping a dataset stored in a hard drive to a data center has constant time (e.g. 24 hours). But uploading it to a server is not (route problems, encryption)
  • For many problems, it's advisable to find the worst, best, and average Big O runtime complexity

We keep the m. Given that it might be large.

3. Data structures

  • Common data structures:
  • Big O notion

Linked lists are not indexed. Only nodes are linked together.

  • Stacks are implemented as lists in Python. s.append, s.pop
  • Queue: beginning and end are available. You can also take a peek at the first one.
  • Deques (Double ended- queue):

4. Algorithms

The summary of Data Structures and Algorithms plus Interview steps.

Solution to any problems

Take a look at a simple question like below: Question 1: Write an algorithm/program that returns the difference of two dates.

Step 1: Ask yourself the following questions

Q: For inputs (dates), what are the valid inputs? Q: How input are encoded? (yyyy,mm,dd) Q: Possible output returns? (an integer)

Step 2: Write simple code that works partially for the problem

  • Chances are, you need to consider all possible conditions. Often, this results in getting stuck in finding the perfect solutions. Hence, it's advisable that you find the simplest solution that works. E,g, solve with a single simple case.

Tips: Break into simple parts so that we can see our progress. Write simple small codes that work No need to figure out all the details.

Now we look into the main topics that are being covered in most interviews/coding challenges. We also look into the patterns that appear in solutions that can be used in new problems. The goal is to understand the fundamentals and try to use them to solve problems.

Binary Search

What are time complexity of the following problems?
Finding the smallest of n numbers?

• Answer: O(n-1) ~ O(n)

Finding the biggest of n numbers?

• Answer: O(n-1) ~ O(n)

Finding the smallest and the biggest of n numbers?

• Answer: O(2n-3) ~ O(n)

Q: How to find number 25 in this a sorted array? A:

1. Linear search: O(n)

2. Binary Search: O(log(n)+1) ( Why it is called binary search? find a postion of binary)

Sorting

Bubble sort:

image image image Simple but not efficient T: $$O(n^2)$$ S: O(1)

Merge Sort:

Divide and Conquer: First, we divide 2 by 2

Second, we compare the elements and join the elements

Efficiency:

O (n log (n))

Q: Why we are seeing log (n) in our efficiency? Hint: same as the binary search problem

Efficiency:

O(n2) if it’s already sorted. Why? Wasting time

Dynamic Programming

(Programming == tables)

The factorial problem in Python:

DP = Recursion + Memo-ization

Knapsack problem: Max value for weight limit

Knapsack. If you have to carry a weight (50kg) in your bag, how can you gather the most valuable items (e.g., 3 as the weight,500 as the value) with you?

How do you optimize which items with their weights to carry with you?

  1. Brute force: Check all the solutions and pick the best one: O (2^n) possible combinations. “exponential time”

Can we have a polynomial time algorithm? O(n^2)

  1. Smarter approach: Initiate with smallest item (2, 6) then (5, 9). Note that (4, 6) will not be placed since for index 4 value 6 is larger than 5.

Next look at index 6. By combining smallest value (2, 6) + (4, 5) we get higher value (11).

Figure: For each weight the maximum value we can hold.
Runtime is O(nW).

  1. Dynamic programming: {can you break into sub problems}

Sub-problem: Max value for some smaller weight

We start by using Base case ( so trivial to compute)

Base case: Smallest computation (compute values for one object)

+

Lookup table to store the trivial cases.

Longest common subsequent

Greedy Algorithm

The best option at each step might not lead to the best results.

Graph Algorithm

Graph is a data structure that is mostly used to shows relations.

Directed (non-directed), Acyclic

The notion of connectivity: As seen below, the right graph is stronger. In contrast, the left group can be dissolved if one of the connections drops.

6. Practice Problems

Sources to learn more:

DSA problems:

Machine Learning:

The following sources can be used for academia and research:

Archive:

Complexity Theory##

Class P: n, n^2,… (any problem that can be solved in polytime)

Class NP (Nondeterministic):

Class Co-NP: _No_ polytime

Quick Sort: The idea is to use pivots to sort the array.

On each step we are performing two moving around.

(Pivot = Last element)

  1. Select the rightmost element as the pivot
  2. Shift Pivot to left by one element
  3. Swap start and left
  4. Compare Start with pivot. If (Start > Pivot repeat step 2)
  5. Else move to second start

Why it can be chosen as the most efficient algorithm?

Because on average it will outperform merge sort.

Great no need to move the original pivot anymore (2 is at the right place)

Check 2 with lefts

New pivot on right. Compare

Moving phase

Everything less than 8 and 10 sweep results in:
Everything less than 8 is already below 8

algorithms_data_structures_notes's People

Contributors

ashfarhangi avatar

Stargazers

Vinirick avatar eboran avatar Rashid avatar Deep Jawale avatar mohammedtouheedpatel avatar Phyo Wai Yan Lin Zaw avatar Hasan Adeeb avatar Nicholas Do avatar Vansh Bataviya avatar Yashraj Sinha avatar  avatar Anirudh avatar Meaha avatar Miguel avatar  avatar Aymen avatar Shannon Makenna avatar Ganeshan M avatar  avatar Sharad Shriyan avatar  avatar  avatar Muddy Kipper avatar prince232002 avatar Alperen avatar Murshid Azher avatar  avatar

Watchers

James Cloos avatar

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.