big o notation
This commit is contained in:
parent
bb1331edfc
commit
99253f243c
154
README.md
154
README.md
|
@ -12,7 +12,7 @@
|
|||
> The items listed here will prepare you well for a technical interview at just about any software company,
|
||||
> including the giants: Amazon, Facebook, Google, and Microsoft.
|
||||
>
|
||||
> *Best of luck to you!*
|
||||
> _Best of luck to you!_
|
||||
|
||||
<details>
|
||||
<summary>Translations:</summary>
|
||||
|
@ -68,9 +68,10 @@
|
|||
This is my multi-month study plan for becoming a software engineer for a large company.
|
||||
|
||||
**Required:**
|
||||
* A little experience with coding (variables, loops, methods/functions, etc)
|
||||
* Patience
|
||||
* Time
|
||||
|
||||
- A little experience with coding (variables, loops, methods/functions, etc)
|
||||
- Patience
|
||||
- Time
|
||||
|
||||
Note this is a study plan for **software engineering**, not frontend engineering or full-stack development. There are really
|
||||
super roadmaps and coursework for those career paths elsewhere (see https://roadmap.sh/ for more info).
|
||||
|
@ -174,7 +175,7 @@ For a complete CS self-taught program, the resources for my study plan have been
|
|||
- [Garbage collection](#garbage-collection)
|
||||
- [Parallel Programming](#parallel-programming)
|
||||
- [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems)
|
||||
- [A*](#a)
|
||||
- [A\*](#a)
|
||||
- [Fast Fourier Transform](#fast-fourier-transform)
|
||||
- [Bloom Filter](#bloom-filter)
|
||||
- [HyperLogLog](#hyperloglog)
|
||||
|
@ -225,7 +226,8 @@ It's a long plan. It may take you months. If you are familiar with a lot of this
|
|||
Everything below is an outline, and you should tackle the items in order from top to bottom.
|
||||
|
||||
I'm using GitHub's special markdown flavor, including tasks lists to track progress.
|
||||
- [More about GitHub-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown)
|
||||
|
||||
- [More about GitHub-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown)
|
||||
|
||||
### If you don't want to use git
|
||||
|
||||
|
@ -239,7 +241,7 @@ If you're open in a code editor that understands markdown, you'll see everything
|
|||
|
||||
Create a new branch so you can check items like this, just put an x in the brackets: [x]
|
||||
|
||||
1. ***Fork the GitHub repo:*** `https://github.com/jwasham/coding-interview-university` by clicking on the Fork button.
|
||||
1. **_Fork the GitHub repo:_** `https://github.com/jwasham/coding-interview-university` by clicking on the Fork button.
|
||||
|
||||
![Fork the GitHub repo](https://d3j2pkmjtin6ou.cloudfront.net/fork-button.png)
|
||||
|
||||
|
@ -288,19 +290,20 @@ Preferably the language would be the same, so that you only need to be proficien
|
|||
|
||||
When I did the study plan, I used 2 languages for most of it: C and Python
|
||||
|
||||
* C: Very low level. Allows you to deal with pointers and memory allocation/deallocation, so you feel the data structures
|
||||
- C: Very low level. Allows you to deal with pointers and memory allocation/deallocation, so you feel the data structures
|
||||
and algorithms in your bones. In higher-level languages like Python or Java, these are hidden from you. In day-to-day work, that's terrific,
|
||||
but when you're learning how these low-level data structures are built, it's great to feel close to the metal.
|
||||
- C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying.
|
||||
- C is everywhere. You'll see examples in books, lectures, videos, _everywhere_ while you're studying.
|
||||
- [The C Programming Language, 2nd Edition](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
|
||||
- This is a short book, but it will give you a great handle on the C language and if you practice it a little
|
||||
you'll quickly get proficient. Understanding C helps you understand how programs and memory work.
|
||||
- You don't need to go super deep in the book (or even finish it). Just get to where you're comfortable reading and writing in C.
|
||||
* Python: Modern and very expressive, I learned it because it's just super useful and also allows me to write less code in an interview.
|
||||
- Python: Modern and very expressive, I learned it because it's just super useful and also allows me to write less code in an interview.
|
||||
|
||||
This is my preference. You do what you like, of course.
|
||||
|
||||
You may not need it, but here are some sites for learning a new language:
|
||||
|
||||
- [Exercism](https://exercism.org/tracks)
|
||||
- [Codewars](http://www.codewars.com)
|
||||
- [HackerEarth](https://www.hackerearth.com/for-developers/)
|
||||
|
@ -326,6 +329,7 @@ This is the original article my post was based on: [Choosing a Programming Langu
|
|||
You need to be very comfortable in the language and be knowledgeable.
|
||||
|
||||
Read more about choices:
|
||||
|
||||
- [Choose the Right Language for Your Coding Interview](http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/)
|
||||
|
||||
[See language-specific resources here](programming-language-resources.md)
|
||||
|
@ -391,8 +395,7 @@ Choose one:
|
|||
|
||||
- [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836)
|
||||
- [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/)
|
||||
- [Elements of Programming Interviews (Java version)](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/)
|
||||
- [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews)
|
||||
- [Elements of Programming Interviews (Java version)](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews)
|
||||
|
||||
## Don't Make My Mistakes
|
||||
|
||||
|
@ -421,6 +424,7 @@ Make your own for free:
|
|||
**I DON'T RECOMMEND using my flashcards.** There are too many and most of them are trivia that you don't need.
|
||||
|
||||
But if you don't want to listen to me, here you go:
|
||||
|
||||
- [My flash cards database (1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db):
|
||||
- [My flash cards database (extreme - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db):
|
||||
|
||||
|
@ -448,6 +452,7 @@ Start doing coding interview questions while you're learning data structures and
|
|||
You need to apply what you're learning to solve problems, or you'll forget. I made this mistake.
|
||||
|
||||
Once you've learned a topic, and feel somewhat comfortable with it, for example, **linked lists**:
|
||||
|
||||
1. Open one of the [coding interview books](#interview-prep-books) (or coding problem websites, listed below)
|
||||
1. Do 2 or 3 questions regarding linked lists.
|
||||
1. Move on to the next learning topic.
|
||||
|
@ -481,9 +486,10 @@ Each day, take the next subject in the list, watch some videos about that subjec
|
|||
of that data structure or algorithm in the language you chose for this course.
|
||||
|
||||
You can see my code here:
|
||||
- [C](https://github.com/jwasham/practice-c)
|
||||
- [C++](https://github.com/jwasham/practice-cpp)
|
||||
- [Python](https://github.com/jwasham/practice-python)
|
||||
|
||||
- [C](https://github.com/jwasham/practice-c)
|
||||
- [C++](https://github.com/jwasham/practice-cpp)
|
||||
- [Python](https://github.com/jwasham/practice-python)
|
||||
|
||||
You don't need to memorize every algorithm. You just need to be able to understand it enough to be able to write your own implementation.
|
||||
|
||||
|
@ -494,6 +500,7 @@ You don't need to memorize every algorithm. You just need to be able to understa
|
|||
[Then go back and read this.](#3-do-coding-interview-questions-while-youre-learning)
|
||||
|
||||
Why you need to practice doing programming problems:
|
||||
|
||||
- Problem recognition, and where the right data structures and algorithms fit in
|
||||
- Gathering requirements for the problem
|
||||
- Talking your way through the problem like you will in the interview
|
||||
|
@ -520,10 +527,12 @@ Gets messy quickly. **I use a pencil and eraser.**
|
|||
Don't forget your key coding interview books [here](#interview-prep-books).
|
||||
|
||||
Solving Problems:
|
||||
|
||||
- [How to Find a Solution](https://www.topcoder.com/thrive/articles/How%20To%20Find%20a%20Solution)
|
||||
- [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/thrive/articles/How%20To%20Dissect%20a%20Topcoder%20Problem%20Statement%20Content)
|
||||
|
||||
Coding Interview Question Videos:
|
||||
|
||||
- [IDeserve (88 videos)](https://www.youtube.com/playlist?list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI)
|
||||
- [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd)
|
||||
- Super for walkthroughs of problem solutions
|
||||
|
@ -533,6 +542,7 @@ Coding Interview Question Videos:
|
|||
- [FisherCoder - LeetCode Solutions](https://youtube.com/FisherCoder)
|
||||
|
||||
Challenge/Practice sites:
|
||||
|
||||
- [LeetCode](https://leetcode.com/)
|
||||
- My favorite coding problem site. It's worth the subscription money for the 1-2 months you'll likely be preparing.
|
||||
- See Nick White and FisherCoder Videos above for code walk-throughs.
|
||||
|
@ -558,7 +568,7 @@ But don't forget to do coding problems from above while you learn!
|
|||
- There are a lot of videos here. Just watch enough until you understand it. You can always come back and review.
|
||||
- Don't worry if you don't understand all the math behind it.
|
||||
- You just need to understand how to express the complexity of an algorithm in terms of Big-O.
|
||||
- [ ] [Harvard CS50 - Asymptotic Notation (video)](https://www.youtube.com/watch?v=iOq5kSKqeR4)
|
||||
- [x] [Harvard CS50 - Asymptotic Notation (video)](https://www.youtube.com/watch?v=iOq5kSKqeR4)
|
||||
- [ ] [Big O Notations (general quick tutorial) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU)
|
||||
- [ ] [Big O Notation (and Omega and Theta) - best mathematical explanation (video)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
|
||||
- [ ] [Skiena (video)](https://www.youtube.com/watch?v=z1mkCe3kVUA)
|
||||
|
@ -578,6 +588,7 @@ if you can identify the runtime complexity of different algorithms. It's a super
|
|||
## Data Structures
|
||||
|
||||
- ### Arrays
|
||||
|
||||
- [ ] About Arrays:
|
||||
- [Arrays CS50 Harvard University](https://www.youtube.com/watch?v=tI_tIZFyKBw&t=3009s)
|
||||
- [Arrays (video)](https://www.coursera.org/lecture/data-structures/arrays-OsBSF)
|
||||
|
@ -608,17 +619,17 @@ if you can identify the runtime complexity of different algorithms. It's a super
|
|||
- O(n) to insert/remove elsewhere
|
||||
- [ ] Space
|
||||
- contiguous in memory, so proximity helps performance
|
||||
- space needed = (array capacity, which is >= n) * size of item, but even if 2n, still O(n)
|
||||
- space needed = (array capacity, which is >= n) \* size of item, but even if 2n, still O(n)
|
||||
|
||||
- ### Linked Lists
|
||||
|
||||
- [ ] Description:
|
||||
- [ ] [Linked Lists CS50 Harvard University](https://www.youtube.com/watch?v=2T-A_GFuoTo&t=650s) - this builds the intuition.
|
||||
- [ ] [Singly Linked Lists (video)](https://www.coursera.org/lecture/data-structures/singly-linked-lists-kHhgK)
|
||||
- [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0)
|
||||
- [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w)
|
||||
- [ ] [[Review] Linked lists in 4 minutes (video)](https://youtu.be/F8AbOfQwl1c)
|
||||
- [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo)
|
||||
- not the whole video, just portions about Node struct and memory allocation
|
||||
- [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) - not the whole video, just portions about Node struct and memory allocation
|
||||
- [ ] Linked List vs Arrays:
|
||||
- [Core Linked Lists Vs Arrays (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-linked-lists-vs-arrays-rjBs9)
|
||||
- [In The Real World Linked Lists Vs Arrays (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/in-the-real-world-lists-vs-arrays-QUaUd)
|
||||
|
@ -647,11 +658,13 @@ if you can identify the runtime complexity of different algorithms. It's a super
|
|||
- No need to implement
|
||||
|
||||
- ### Stack
|
||||
|
||||
- [ ] [Stacks (video)](https://www.coursera.org/lecture/data-structures/stacks-UdKzQ)
|
||||
- [ ] [[Review] Stacks in 3 minutes (video)](https://youtu.be/KcT3aVgrrpU)
|
||||
- [ ] Will not implement. Implementing with the array is trivial
|
||||
|
||||
- ### Queue
|
||||
|
||||
- [ ] [Queue (video)](https://www.coursera.org/lecture/data-structures/queues-EShpq)
|
||||
- [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer)
|
||||
- [ ] [[Review] Queues in 3 minutes (video)](https://youtu.be/D6gu-_tmEpQ)
|
||||
|
@ -672,7 +685,9 @@ if you can identify the runtime complexity of different algorithms. It's a super
|
|||
- empty: O(1) (linked list and array)
|
||||
|
||||
- ### Hash table
|
||||
|
||||
- [ ] Videos:
|
||||
|
||||
- [ ] [Hashing with Chaining (video)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8)
|
||||
- [ ] [Table Doubling, Karp-Rabin (video)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
|
||||
- [ ] [Open Addressing, Cryptographic Hashing (video)](https://www.youtube.com/watch?v=rvdJDijO2Ro&index=10&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
|
||||
|
@ -683,6 +698,7 @@ if you can identify the runtime complexity of different algorithms. It's a super
|
|||
- [ ] [[Review] Hash tables in 4 minutes (video)](https://youtu.be/knV86FlSXJ8)
|
||||
|
||||
- [ ] Online Courses:
|
||||
|
||||
- [ ] [Core Hash Tables (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-hash-tables-m7UuP)
|
||||
- [ ] [Data Structures (video)](https://www.coursera.org/learn/data-structures/home/week/4)
|
||||
- [ ] [Phone Book Problem (video)](https://www.coursera.org/lecture/data-structures/phone-book-problem-NYZZP)
|
||||
|
@ -700,6 +716,7 @@ if you can identify the runtime complexity of different algorithms. It's a super
|
|||
## More Knowledge
|
||||
|
||||
- ### Binary search
|
||||
|
||||
- [ ] [Binary Search (video)](https://www.youtube.com/watch?v=D5SrAga1pno)
|
||||
- [ ] [Binary Search (video)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search)
|
||||
- [ ] [detail](https://www.topcoder.com/thrive/articles/Binary%20Search)
|
||||
|
@ -713,7 +730,7 @@ if you can identify the runtime complexity of different algorithms. It's a super
|
|||
- [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf)
|
||||
- you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
|
||||
- [ ] Get a really good understanding of manipulating bits with: &, |, ^, ~, >>, <<
|
||||
- [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture))
|
||||
- [ ] [words](<https://en.wikipedia.org/wiki/Word_(computer_architecture)>)
|
||||
- [ ] Good intro:
|
||||
[Bit Manipulation (video)](https://www.youtube.com/watch?v=7jkIUgLC29I)
|
||||
- [ ] [C Programming Tutorial 2-10: Bitwise Operators (video)](https://www.youtube.com/watch?v=d0AwjSpNXR0)
|
||||
|
@ -740,6 +757,7 @@ if you can identify the runtime complexity of different algorithms. It's a super
|
|||
## Trees
|
||||
|
||||
- ### Trees - Intro
|
||||
|
||||
- [ ] [Intro to Trees (video)](https://www.coursera.org/lecture/data-structures/trees-95qda)
|
||||
- [ ] [Tree Traversal (video)](https://www.coursera.org/lecture/data-structures/tree-traversal-fr51b)
|
||||
- [ ] [BFS(breadth-first search) and DFS(depth-first search) (video)](https://www.youtube.com/watch?v=uWL6FJhq5fM)
|
||||
|
@ -760,6 +778,7 @@ if you can identify the runtime complexity of different algorithms. It's a super
|
|||
- [ ] [[Review] Tree Traversal (playlist) in 11 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZO1JC2RgEi04nLy6D-rKk6b)
|
||||
|
||||
- ### Binary search trees: BSTs
|
||||
|
||||
- [ ] [Binary Search Tree Review (video)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
|
||||
- [ ] [Introduction (video)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction)
|
||||
- [ ] [MIT (video)](https://www.youtube.com/watch?v=76dhtgZt38A&ab_channel=MITOpenCourseWare)
|
||||
|
@ -789,7 +808,7 @@ if you can identify the runtime complexity of different algorithms. It's a super
|
|||
|
||||
- ### Heap / Priority Queue / Binary Heap
|
||||
- visualized as a tree, but is usually linear in storage (array, linked list)
|
||||
- [ ] [Heap](https://en.wikipedia.org/wiki/Heap_(data_structure))
|
||||
- [ ] [Heap](<https://en.wikipedia.org/wiki/Heap_(data_structure)>)
|
||||
- [ ] [Introduction (video)](https://www.coursera.org/lecture/data-structures/introduction-2OpTs)
|
||||
- [ ] [Binary Trees (video)](https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees)
|
||||
- [ ] [Tree Height Remark (video)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark)
|
||||
|
@ -818,6 +837,7 @@ if you can identify the runtime complexity of different algorithms. It's a super
|
|||
## Sorting
|
||||
|
||||
- [ ] Notes:
|
||||
|
||||
- Implement sorts & know best case/worst case, average complexity of each:
|
||||
- no bubble sort - it's terrible - O(n^2), except when n <= 16
|
||||
- [ ] Stability in sorting algorithms ("Is Quicksort stable?")
|
||||
|
@ -832,6 +852,7 @@ if you can identify the runtime complexity of different algorithms. It's a super
|
|||
- For heapsort, see the Heap data structure above. Heap sort is great, but not stable
|
||||
|
||||
- [ ] [Sedgewick - Mergesort (5 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3)
|
||||
|
||||
- [ ] [1. Mergesort](https://www.coursera.org/lecture/algorithms-part1/mergesort-ARWDq)
|
||||
- [ ] [2. Bottom-up Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort)
|
||||
- [ ] [3. Sorting Complexity](https://www.coursera.org/lecture/algorithms-part1/sorting-complexity-xAltF)
|
||||
|
@ -839,12 +860,14 @@ if you can identify the runtime complexity of different algorithms. It's a super
|
|||
- [ ] [5. Stability](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability)
|
||||
|
||||
- [ ] [Sedgewick - Quicksort (4 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3)
|
||||
|
||||
- [ ] [1. Quicksort](https://www.coursera.org/lecture/algorithms-part1/quicksort-vjvnC)
|
||||
- [ ] [2. Selection](https://www.coursera.org/lecture/algorithms-part1/selection-UQxFT)
|
||||
- [ ] [3. Duplicate Keys](https://www.coursera.org/lecture/algorithms-part1/duplicate-keys-XvjPd)
|
||||
- [ ] [4. System Sorts](https://www.coursera.org/lecture/algorithms-part1/system-sorts-QBNZ7)
|
||||
|
||||
- [ ] UC Berkeley:
|
||||
|
||||
- [ ] [CS 61B Lecture 29: Sorting I (video)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I)
|
||||
- [ ] [CS 61B Lecture 30: Sorting II (video)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk)
|
||||
- [ ] [CS 61B Lecture 32: Sorting III (video)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc)
|
||||
|
@ -864,11 +887,13 @@ if you can identify the runtime complexity of different algorithms. It's a super
|
|||
- [ ] [Using output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py)
|
||||
- [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc)
|
||||
- [ ] Quick sort code:
|
||||
|
||||
- [ ] [Implementation (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c)
|
||||
- [ ] [Implementation (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c)
|
||||
- [ ] [Implementation (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py)
|
||||
|
||||
- [ ] [[Review] Sorting (playlist) in 18 minutes](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOZSbGAXAPIq1BeUf4j20pl)
|
||||
|
||||
- [ ] [Quick sort in 4 minutes (video)](https://youtu.be/Hoixgm4-P4M)
|
||||
- [ ] [Heap sort in 4 minutes (video)](https://youtu.be/2DmK_H7IdTo)
|
||||
- [ ] [Merge sort in 3 minutes (video)](https://youtu.be/4VqmGXwpLqc)
|
||||
|
@ -877,6 +902,7 @@ if you can identify the runtime complexity of different algorithms. It's a super
|
|||
- [ ] [Insertion sort in 2 minutes (video)](https://youtu.be/JU767SDMDvA)
|
||||
|
||||
- [ ] Implement:
|
||||
|
||||
- [ ] Mergesort: O(n log n) average and worst case
|
||||
- [ ] Quicksort O(n log n) average case
|
||||
- Selection sort and insertion sort are both O(n^2) average and worst-case
|
||||
|
@ -904,6 +930,7 @@ If you need more detail on this subject, see the "Sorting" section in [Additiona
|
|||
Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting.
|
||||
|
||||
- Notes:
|
||||
|
||||
- There are 4 basic ways to represent a graph in memory:
|
||||
- objects and pointers
|
||||
- adjacency matrix
|
||||
|
@ -914,10 +941,12 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|||
- When asked a question, look for a graph-based solution first, then move on if none
|
||||
|
||||
- [ ] MIT(videos):
|
||||
|
||||
- [ ] [Breadth-First Search](https://www.youtube.com/watch?v=oFVYVzlvk9c&t=14s&ab_channel=MITOpenCourseWare)
|
||||
- [ ] [Depth-First Search](https://www.youtube.com/watch?v=IBfWDYSffUU&t=32s&ab_channel=MITOpenCourseWare)
|
||||
|
||||
- [ ] Skiena Lectures - great intro:
|
||||
|
||||
- [ ] [CSE373 2020 - Lecture 10 - Graph Data Structures (video)](https://www.youtube.com/watch?v=Sjk0xqWWPCc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=10)
|
||||
- [ ] [CSE373 2020 - Lecture 11 - Graph Traversal (video)](https://www.youtube.com/watch?v=ZTwjXj81NVY&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=11)
|
||||
- [ ] [CSE373 2020 - Lecture 12 - Depth First Search (video)](https://www.youtube.com/watch?v=KyordYB3BOs&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=12)
|
||||
|
@ -931,8 +960,8 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|||
- [ ] [6.006 Dijkstra (video)](https://www.youtube.com/watch?v=NSHizBK9JD8&t=1731s&ab_channel=MITOpenCourseWare)
|
||||
- [ ] [6.006 Bellman-Ford (video)](https://www.youtube.com/watch?v=f9cVS_URPc0&ab_channel=MITOpenCourseWare)
|
||||
- [ ] [6.006 Speeding Up Dijkstra (video)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18)
|
||||
- [ ] [Aduni: Graph Algorithms I - Topological Sorting, Minimum Spanning Trees, Prim's Algorithm - Lecture 6 (video)]( https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
|
||||
- [ ] [Aduni: Graph Algorithms II - DFS, BFS, Kruskal's Algorithm, Union Find Data Structure - Lecture 7 (video)]( https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7)
|
||||
- [ ] [Aduni: Graph Algorithms I - Topological Sorting, Minimum Spanning Trees, Prim's Algorithm - Lecture 6 (video)](https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
|
||||
- [ ] [Aduni: Graph Algorithms II - DFS, BFS, Kruskal's Algorithm, Union Find Data Structure - Lecture 7 (video)](https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7)
|
||||
- [ ] [Aduni: Graph Algorithms III: Shortest Path - Lecture 8 (video)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8)
|
||||
- [ ] [Aduni: Graph Alg. IV: Intro to geometric algorithms - Lecture 9 (video)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9)
|
||||
- [ ] [CS 61B 2014: Weighted graphs (video)](https://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k)
|
||||
|
@ -942,6 +971,7 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|||
- [ ] [[Review] Minimum Spanning Trees (playlist) in 4 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZObEi3Hf6lmyW-CBfs7nkOV)
|
||||
|
||||
- Full Coursera Course:
|
||||
|
||||
- [ ] [Algorithms on Graphs (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome)
|
||||
|
||||
- I'll implement:
|
||||
|
@ -963,6 +993,7 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|||
## Even More Knowledge
|
||||
|
||||
- ### Recursion
|
||||
|
||||
- [ ] Stanford lectures on recursion & backtracking:
|
||||
- [ ] [Lecture 8 | Programming Abstractions (video)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8)
|
||||
- [ ] [Lecture 9 | Programming Abstractions (video)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9)
|
||||
|
@ -974,9 +1005,11 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|||
- [ ] [Tail Recursion (video)](https://www.coursera.org/lecture/programming-languages/tail-recursion-YZic1)
|
||||
- [ ] [5 Simple Steps for Solving Any Recursive Problem(video)](https://youtu.be/ngCos392W4w)
|
||||
|
||||
Backtracking Blueprint: [Java](https://leetcode.com/problems/combination-sum/discuss/16502/A-general-approach-to-backtracking-questions-in-Java-(Subsets-Permutations-Combination-Sum-Palindrome-Partitioning))
|
||||
Backtracking Blueprint: [Java](<https://leetcode.com/problems/combination-sum/discuss/16502/A-general-approach-to-backtracking-questions-in-Java-(Subsets-Permutations-Combination-Sum-Palindrome-Partitioning)>)
|
||||
[Python](https://leetcode.com/problems/combination-sum/discuss/429538/General-Backtracking-questions-solutions-in-Python-for-reference-%3A)
|
||||
|
||||
- ### Dynamic Programming
|
||||
|
||||
- You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a
|
||||
problem as being a candidate for dynamic programming.
|
||||
- This subject can be pretty difficult, as each DP soluble problem must be defined as a recursion relation, and coming up with it can be tricky.
|
||||
|
@ -1004,6 +1037,7 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|||
- [ ] [Local pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment)
|
||||
|
||||
- ### Design patterns
|
||||
|
||||
- [ ] [Quick UML review (video)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3)
|
||||
- [ ] Learn these patterns:
|
||||
- [ ] strategy
|
||||
|
@ -1029,6 +1063,7 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|||
- [Handy reference: 101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips)
|
||||
|
||||
- ### Combinatorics (n choose k) & Probability
|
||||
|
||||
- [ ] [Math Skills: How to find Factorial, Permutation, and Combination (Choose) (video)](https://www.youtube.com/watch?v=8RRo6Ti9d0U)
|
||||
- [ ] [Make School: Probability (video)](https://www.youtube.com/watch?v=sZkAAk9Wwa4)
|
||||
- [ ] [Make School: More Probability and Markov Chains (video)](https://www.youtube.com/watch?v=dNaJg-mLobQ)
|
||||
|
@ -1039,6 +1074,7 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|||
- [ ] [Probability Explained (video)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19)
|
||||
|
||||
- ### NP, NP-Complete and Approximation Algorithms
|
||||
|
||||
- Know about the most famous classes of NP-complete problems, such as the traveling salesman and the knapsack problem,
|
||||
and be able to recognize them when an interviewer asks you them in disguise.
|
||||
- Know what NP-complete means.
|
||||
|
@ -1067,7 +1103,9 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|||
- [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU)
|
||||
- [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60)
|
||||
- [ ] [Instructions and Programs (video)](https://youtu.be/zltgXvg6r3k)
|
||||
|
||||
- ### Caches
|
||||
|
||||
- [ ] LRU cache:
|
||||
- [ ] [The Magic of LRU Cache (100 Days of Google Dev) (video)](https://www.youtube.com/watch?v=R5ON3iwx78M)
|
||||
- [ ] [Implementing LRU (video)](https://www.youtube.com/watch?v=bq6N7Ym81iI)
|
||||
|
@ -1077,6 +1115,7 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|||
- [ ] [MIT 6.004 L16: Cache Issues (video)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-)
|
||||
|
||||
- ### Processes and Threads
|
||||
|
||||
- [ ] Computer Science 162 - Operating Systems (25 videos):
|
||||
- for processes and threads see videos 1-11
|
||||
- [Operating Systems and System Programming (video)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c)
|
||||
|
@ -1114,6 +1153,7 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|||
- [ ] [Mutex in Python](https://www.youtube.com/watch?v=0zaPs8OtyKY)
|
||||
|
||||
- ### Testing
|
||||
|
||||
- To cover:
|
||||
- how unit testing works
|
||||
- what are mock objects
|
||||
|
@ -1129,6 +1169,7 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|||
- [ ] [How to write tests](http://jasonpolites.github.io/tao-of-testing/ch4-1.1.html)
|
||||
|
||||
- ### String searching & manipulations
|
||||
|
||||
- [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays)
|
||||
- [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4)
|
||||
- [ ] [1. Introduction to Substring Search](https://www.coursera.org/lecture/algorithms-part2/introduction-to-substring-search-n3ZpG)
|
||||
|
@ -1141,6 +1182,7 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|||
If you need more detail on this subject, see the "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects).
|
||||
|
||||
- ### Tries
|
||||
|
||||
- Note there are different kinds of tries. Some have prefixes, some don't, and some use strings instead of bits
|
||||
to track the path
|
||||
- I read through the code, but will not implement
|
||||
|
@ -1159,13 +1201,16 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|||
- [ ] [MIT, Advanced Data Structures, Strings (can get pretty obscure about halfway through) (video)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
|
||||
|
||||
- ### Floating Point Numbers
|
||||
|
||||
- [ ] simple 8-bit: [Representation of Floating Point Numbers - 1 (video - there is an error in calculations - see video description)](https://www.youtube.com/watch?v=ji3SfClm8TU)
|
||||
|
||||
- ### Unicode
|
||||
- [ ] [The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets]( http://www.joelonsoftware.com/articles/Unicode.html)
|
||||
|
||||
- [ ] [The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets](http://www.joelonsoftware.com/articles/Unicode.html)
|
||||
- [ ] [What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text](http://kunststube.net/encoding/)
|
||||
|
||||
- ### Endianness
|
||||
|
||||
- [ ] [Big And Little Endian](https://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/class/sum2003/cmsc311/Notes/Data/endian.html)
|
||||
- [ ] [Big Endian Vs Little Endian (video)](https://www.youtube.com/watch?v=JrNF0KRAlyo)
|
||||
- [ ] [Big And Little Endian Inside/Out (video)](https://www.youtube.com/watch?v=oBSuXP-1Tc0)
|
||||
|
@ -1240,6 +1285,7 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|||
- The crash course for LeetCode. Covers all the patterns condensed from thousands of questions.
|
||||
|
||||
Mock Interviews:
|
||||
|
||||
- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/#!/) - I used this and it helped me relax for the phone screen and on-site interview
|
||||
- [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - a peer-to-peer model to practice interviews
|
||||
- [interviewing.io: Practice mock interview with senior engineers](https://interviewing.io) - anonymous algorithmic/systems design interviews with senior engineers from FAANG anonymously
|
||||
|
@ -1334,7 +1380,7 @@ You're never really done.
|
|||
- This book is better as an algorithm reference, and not something you read cover to cover.
|
||||
- Can rent it on Kindle
|
||||
- Answers:
|
||||
- [Solutions](https://web.archive.org/web/20150404194210/http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition))
|
||||
- [Solutions](<https://web.archive.org/web/20150404194210/http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)>)
|
||||
- [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata)
|
||||
- [Algorithm](http://jeffe.cs.illinois.edu/teaching/algorithms/) (Jeff Erickson)
|
||||
- [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038)
|
||||
|
@ -1420,7 +1466,7 @@ You're never really done.
|
|||
- [ ] [What Led Amazon to its Own Microservices Architecture](http://thenewstack.io/led-amazon-microservices-architecture/)
|
||||
- [ ] [To Compress Or Not To Compress, That Was Uber's Question](https://eng.uber.com/trip-data-squeeze/)
|
||||
- [ ] [When Should Approximate Query Processing Be Used?](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html)
|
||||
- [ ] [Google's Transition From Single Datacenter To Failover, To A Native Multihomed Architecture]( http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html)
|
||||
- [ ] [Google's Transition From Single Datacenter To Failover, To A Native Multihomed Architecture](http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html)
|
||||
- [ ] [The Image Optimization Technology That Serves Millions Of Requests Per Day](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html)
|
||||
- [ ] [A Patreon Architecture Short](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html)
|
||||
- [ ] [Tinder: How Does One Of The Largest Recommendation Engines Decide Who You'll See Next?](http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html)
|
||||
|
@ -1474,12 +1520,14 @@ You're never really done.
|
|||
technologies and algorithms, so you'll have a bigger toolbox.
|
||||
|
||||
- ### Compilers
|
||||
|
||||
- [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg)
|
||||
- [Harvard CS50 - Compilers (video)](https://www.youtube.com/watch?v=CSZLNYF4Klo)
|
||||
- [C++ (video)](https://www.youtube.com/watch?v=twodd1KFfGk)
|
||||
- [Understanding Compiler Optimization (C++) (video)](https://www.youtube.com/watch?v=FnGCDLhaxKU)
|
||||
|
||||
- ### Emacs and vi(m)
|
||||
|
||||
- Familiarize yourself with a UNIX-based code editor
|
||||
- vi(m):
|
||||
- [Editing With Vim 01 - Installation, Setup, and The Modes (video)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr)
|
||||
|
@ -1502,6 +1550,7 @@ You're never really done.
|
|||
- [The Absolute Beginner's Guide to Emacs (notes by David Wilson)](https://systemcrafters.net/emacs-essentials/absolute-beginners-guide-to-emacs/)
|
||||
|
||||
- ### Unix command line tools
|
||||
|
||||
- I filled in the list below from good tools.
|
||||
- bash
|
||||
- cat
|
||||
|
@ -1516,6 +1565,7 @@ You're never really done.
|
|||
- [tcpdump](https://danielmiessler.com/study/tcpdump/)
|
||||
|
||||
- ### Information theory (videos)
|
||||
|
||||
- [Khan Academy](https://www.khanacademy.org/computing/computer-science/informationtheory)
|
||||
- More about Markov processes:
|
||||
- [Core Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation)
|
||||
|
@ -1524,6 +1574,7 @@ You're never really done.
|
|||
- See more in the MIT 6.050J Information and Entropy series below
|
||||
|
||||
- ### Parity & Hamming Code (videos)
|
||||
|
||||
- [Intro](https://www.youtube.com/watch?v=q-3BctoUpHE)
|
||||
- [Parity](https://www.youtube.com/watch?v=DdMcAUlxh1M)
|
||||
- Hamming Code:
|
||||
|
@ -1532,11 +1583,13 @@ You're never really done.
|
|||
- [Error Checking](https://www.youtube.com/watch?v=wbH2VxzmoZk)
|
||||
|
||||
- ### Entropy
|
||||
|
||||
- Also see the videos below
|
||||
- Make sure to watch information theory videos first
|
||||
- [Information Theory, Claude Shannon, Entropy, Redundancy, Data Compression & Bits (video)](https://youtu.be/JnJq3Py0dyM?t=176)
|
||||
|
||||
- ### Cryptography
|
||||
|
||||
- Also see the videos below
|
||||
- Make sure to watch information theory videos first
|
||||
- [Khan Academy Series](https://www.khanacademy.org/computing/computer-science/cryptography)
|
||||
|
@ -1544,6 +1597,7 @@ You're never really done.
|
|||
- [Cryptography: Encryption](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
|
||||
|
||||
- ### Compression
|
||||
|
||||
- Make sure to watch information theory videos first
|
||||
- Computerphile (videos):
|
||||
- [Compression](https://www.youtube.com/watch?v=Lto-ajuqW3w)
|
||||
|
@ -1556,6 +1610,7 @@ You're never really done.
|
|||
- [(optional) Google Developers Live: GZIP is not enough!](https://www.youtube.com/watch?v=whGwm0Lky2s)
|
||||
|
||||
- ### Computer Security
|
||||
|
||||
- [MIT (23 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
|
||||
- [Introduction, Threat Models](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
|
||||
- [Control Hijacking Attacks](https://www.youtube.com/watch?v=6bwzNg5qQ0o&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=2)
|
||||
|
@ -1571,15 +1626,18 @@ You're never really done.
|
|||
- [Side-Channel Attacks](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
|
||||
|
||||
- ### Garbage collection
|
||||
|
||||
- [GC in Python (video)](https://www.youtube.com/watch?v=iHVs_HkjdmI)
|
||||
- [Deep Dive Java: Garbage Collection is Good!](https://www.infoq.com/presentations/garbage-collection-benefits)
|
||||
- [Deep Dive Python: Garbage Collection in CPython (video)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3)
|
||||
|
||||
- ### Parallel Programming
|
||||
|
||||
- [Coursera (Scala)](https://www.coursera.org/learn/parprog1/home/week/1)
|
||||
- [Efficient Python for High-Performance Parallel Computing (video)](https://www.youtube.com/watch?v=uY85GkaYzBk)
|
||||
|
||||
- ### Messaging, Serialization, and Queueing Systems
|
||||
|
||||
- [Thrift](https://thrift.apache.org/)
|
||||
- [Tutorial](http://thrift-tutorial.readthedocs.io/en/latest/intro.html)
|
||||
- [Protocol Buffers](https://developers.google.com/protocol-buffers/)
|
||||
|
@ -1601,11 +1659,13 @@ You're never really done.
|
|||
- [MessagePack](http://msgpack.org/index.html)
|
||||
- [Avro](https://avro.apache.org/)
|
||||
|
||||
- ### A*
|
||||
- ### A\*
|
||||
|
||||
- [A Search Algorithm](https://en.wikipedia.org/wiki/A*_search_algorithm)
|
||||
- [A* Pathfinding (E01: algorithm explanation) (video)](https://www.youtube.com/watch?v=-L-WgKMFuhE)
|
||||
- [A\* Pathfinding (E01: algorithm explanation) (video)](https://www.youtube.com/watch?v=-L-WgKMFuhE)
|
||||
|
||||
- ### Fast Fourier Transform
|
||||
|
||||
- [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/)
|
||||
- [What is a Fourier transform? What is it used for?](http://www.askamathematician.com/2012/09/q-what-is-a-fourier-transform-what-is-it-used-for/)
|
||||
- [What is the Fourier Transform? (video)](https://www.youtube.com/watch?v=Xxut2PN-V8Q)
|
||||
|
@ -1613,6 +1673,7 @@ You're never really done.
|
|||
- [Understanding The FFT](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/)
|
||||
|
||||
- ### Bloom Filter
|
||||
|
||||
- Given a Bloom filter with m bits and k hashing functions, both insertion and membership testing are O(k)
|
||||
- [Bloom Filters (video)](https://www.youtube.com/watch?v=-SuTGoFYjZs)
|
||||
- [Bloom Filters | Mining of Massive Datasets | Stanford University (video)](https://www.youtube.com/watch?v=qBTdukbzc78)
|
||||
|
@ -1620,21 +1681,26 @@ You're never really done.
|
|||
- [How To Write A Bloom Filter App](http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/)
|
||||
|
||||
- ### HyperLogLog
|
||||
|
||||
- [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html)
|
||||
|
||||
- ### Locality-Sensitive Hashing
|
||||
|
||||
- Used to determine the similarity of documents
|
||||
- The opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same
|
||||
- [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html)
|
||||
|
||||
- ### van Emde Boas Trees
|
||||
|
||||
- [Divide & Conquer: van Emde Boas Trees (video)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6)
|
||||
- [MIT Lecture Notes](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2012/lecture-notes/MIT6_046JS12_lec15.pdf)
|
||||
|
||||
- ### Augmented Data Structures
|
||||
|
||||
- [CS 61B Lecture 39: Augmenting Data Structures](https://archive.org/details/ucberkeley_webcast_zksIj9O8_jc)
|
||||
|
||||
- ### Balanced search trees
|
||||
|
||||
- Know at least one type of balanced binary tree (and know how it's implemented):
|
||||
- "Among balanced search trees, AVL and 2/3 trees are now passé and red-black trees seem to be more popular.
|
||||
A particularly interesting self-organizing data structure is the splay tree, which uses rotations
|
||||
|
@ -1649,6 +1715,7 @@ You're never really done.
|
|||
- [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree)
|
||||
|
||||
- **AVL trees**
|
||||
|
||||
- In practice:
|
||||
From what I can tell, these aren't used much in practice, but I could see where they would be:
|
||||
The AVL tree is another structure supporting O(log n) search, insertion, and removal. It is more rigidly
|
||||
|
@ -1662,6 +1729,7 @@ You're never really done.
|
|||
- [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-)
|
||||
|
||||
- **Splay trees**
|
||||
|
||||
- In practice:
|
||||
Splay trees are typically used in the implementation of caches, memory allocators, routers, garbage collectors,
|
||||
data compression, ropes (replacement of string used for long text strings), in Windows NT (in the virtual memory,
|
||||
|
@ -1672,6 +1740,7 @@ You're never really done.
|
|||
- [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo)
|
||||
|
||||
- **Red/black trees**
|
||||
|
||||
- These are a translation of a 2-3 tree (see below).
|
||||
- In practice:
|
||||
Red–black trees offer worst-case guarantees for insertion time, deletion time, and search time.
|
||||
|
@ -1688,6 +1757,7 @@ You're never really done.
|
|||
- [[Review] Red-Black Trees (playlist) in 30 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZNqDI8qfOZgzbqahCUmUEin)
|
||||
|
||||
- **2-3 search trees**
|
||||
|
||||
- In practice:
|
||||
2-3 trees have faster inserts at the expense of slower searches (since height is more compared to AVL trees).
|
||||
- You would use 2-3 trees very rarely because its implementation involves different types of nodes. Instead, people use Red-Black trees.
|
||||
|
@ -1696,6 +1766,7 @@ You're never really done.
|
|||
- [2-3 Trees (student recitation) (video)](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
|
||||
|
||||
- **2-3-4 Trees (aka 2-4 trees)**
|
||||
|
||||
- In practice:
|
||||
For every 2-4 trees, there are corresponding red–black trees with data elements in the same order. The insertion and deletion
|
||||
operations on 2-4 trees are also equivalent to color-flipping and rotations in red–black trees. This makes 2-4 trees an
|
||||
|
@ -1706,6 +1777,7 @@ You're never really done.
|
|||
- [Top Down 234-Trees (video)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5)
|
||||
|
||||
- **N-ary (K-ary, M-ary) trees**
|
||||
|
||||
- note: the N or K is the branching factor (max branches)
|
||||
- binary trees are a 2-ary tree, with branching factor = 2
|
||||
- 2-3 trees are 3-ary
|
||||
|
@ -1723,48 +1795,53 @@ You're never really done.
|
|||
- [Introduction to B-Trees (video)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6)
|
||||
- [B-Tree Definition and Insertion (video)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
|
||||
- [B-Tree Deletion (video)](https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
|
||||
- [MIT 6.851 - Memory Hierarchy Models (video)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
|
||||
- covers cache-oblivious B-Trees, very interesting data structures
|
||||
- the first 37 minutes are very technical, and may be skipped (B is block size, cache line size)
|
||||
- [MIT 6.851 - Memory Hierarchy Models (video)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) - covers cache-oblivious B-Trees, very interesting data structures - the first 37 minutes are very technical, and may be skipped (B is block size, cache line size)
|
||||
- [[Review] B-Trees (playlist) in 26 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZNFPPv98DjTdD9X6UI9KMHz)
|
||||
|
||||
|
||||
- ### k-D Trees
|
||||
|
||||
- Great for finding a number of points in a rectangle or higher-dimensional object
|
||||
- A good fit for k-nearest neighbors
|
||||
- [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg)
|
||||
|
||||
- ### Skip lists
|
||||
|
||||
- "These are somewhat of a cult data structure" - Skiena
|
||||
- [Randomization: Skip Lists (video)](https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
|
||||
- [For animations and a little more detail](https://en.wikipedia.org/wiki/Skip_list)
|
||||
|
||||
- ### Network Flows
|
||||
|
||||
- [Ford-Fulkerson in 5 minutes — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs)
|
||||
- [Ford-Fulkerson Algorithm (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0)
|
||||
- [Network Flows (video)](https://www.youtube.com/watch?v=2vhN4Ice5jI)
|
||||
|
||||
- ### Disjoint Sets & Union Find
|
||||
|
||||
- [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI)
|
||||
- [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1)
|
||||
|
||||
- ### Math for Fast Processing
|
||||
|
||||
- [Integer Arithmetic, Karatsuba Multiplication (video)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
|
||||
- [The Chinese Remainder Theorem (used in cryptography) (video)](https://www.youtube.com/watch?v=ru7mWZJlRQg)
|
||||
|
||||
- ### Treap
|
||||
|
||||
- Combination of a binary search tree and a heap
|
||||
- [Treap](https://en.wikipedia.org/wiki/Treap)
|
||||
- [Data Structures: Treaps explained (video)](https://www.youtube.com/watch?v=6podLUYinH8)
|
||||
- [Applications in set operations](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf)
|
||||
|
||||
- ### Linear Programming (videos)
|
||||
|
||||
- [Linear Programming](https://www.youtube.com/watch?v=M4K6HYLHREQ)
|
||||
- [Finding minimum cost](https://www.youtube.com/watch?v=2ACJ9ewUC6U)
|
||||
- [Finding maximum value](https://www.youtube.com/watch?v=8AA_81xI3ik)
|
||||
- [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk)
|
||||
|
||||
- ### Geometry, Convex hull (videos)
|
||||
|
||||
- [Graph Alg. IV: Intro to geometric algorithms - Lecture 9](https://youtu.be/XIAQRlNkJAw?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3164)
|
||||
- [Geometric Algorithms: Graham & Jarvis - Lecture 10](https://www.youtube.com/watch?v=J5aJEcOr6Eo&index=10&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
|
||||
- [Divide & Conquer: Convex Hull, Median Finding](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2)
|
||||
|
@ -1783,6 +1860,7 @@ You're never really done.
|
|||
You want to get hired in this century, right?
|
||||
|
||||
- **SOLID**
|
||||
|
||||
- [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE)
|
||||
- [ ] S - [Single Responsibility Principle](http://www.oodesign.com/single-responsibility-principle.html) | [Single responsibility to each Object](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html)
|
||||
- [more flavor](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk)
|
||||
|
@ -1797,8 +1875,8 @@ You're never really done.
|
|||
- [Why Is The Dependency Inversion Principle And Why Is It Important](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important)
|
||||
- [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en)
|
||||
|
||||
|
||||
- **Union-Find**
|
||||
|
||||
- [Overview](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview)
|
||||
- [Naive Implementation](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations)
|
||||
- [Trees](https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees)
|
||||
|
@ -1807,6 +1885,7 @@ You're never really done.
|
|||
- [Analysis Options](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional)
|
||||
|
||||
- **More Dynamic Programming** (videos)
|
||||
|
||||
- [6.006: Dynamic Programming I: Fibonacci, Shortest Paths](https://www.youtube.com/watch?v=r4-cftqTcdI&ab_channel=MITOpenCourseWare)
|
||||
- [6.006: Dynamic Programming II: Text Justification, Blackjack](https://www.youtube.com/watch?v=KLBCUx1is2c&ab_channel=MITOpenCourseWare)
|
||||
- [6.006: DP III: Parenthesization, Edit Distance, Knapsack](https://www.youtube.com/watch?v=TDo3r5M1LNo&ab_channel=MITOpenCourseWare)
|
||||
|
@ -1816,10 +1895,12 @@ You're never really done.
|
|||
- [6.046: Dynamic Programming (student recitation)](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12)
|
||||
|
||||
- **Advanced Graph Processing** (videos)
|
||||
|
||||
- [Synchronous Distributed Algorithms: Symmetry-Breaking. Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27)
|
||||
- [Asynchronous Distributed Algorithms: Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=kQ-UQAzcnzA&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=28)
|
||||
|
||||
- MIT **Probability** (mathy, and go slowly, which is good for mathy things) (videos):
|
||||
|
||||
- [MIT 6.042J - Probability Introduction](https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B)
|
||||
- [MIT 6.042J - Conditional Probability](https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B)
|
||||
- [MIT 6.042J - Independence](https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B)
|
||||
|
@ -1832,6 +1913,7 @@ You're never really done.
|
|||
- [Simonson: Approximation Algorithms (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19)
|
||||
|
||||
- **String Matching**
|
||||
|
||||
- Rabin-Karp (videos):
|
||||
- [Rabin Karps Algorithm](https://www.coursera.org/lecture/data-structures/rabin-karps-algorithm-c0Qkw)
|
||||
- [Precomputing](https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation)
|
||||
|
@ -1911,6 +1993,7 @@ Sit back and enjoy.
|
|||
- [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/playlist?list=PL9D558D49CA734A02)
|
||||
|
||||
- [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy)
|
||||
|
||||
- [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/)
|
||||
|
||||
- [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV)
|
||||
|
@ -1926,7 +2009,6 @@ Sit back and enjoy.
|
|||
|
||||
- [Multiple Algorithms implementation by Princeton University](https://algs4.cs.princeton.edu/code)
|
||||
|
||||
|
||||
## Papers
|
||||
|
||||
- [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/)
|
||||
|
@ -1934,7 +2016,7 @@ Sit back and enjoy.
|
|||
- [implemented in Go](https://godoc.org/github.com/thomas11/csp)
|
||||
- [2003: The Google File System](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf)
|
||||
- replaced by Colossus in 2012
|
||||
- [2004: MapReduce: Simplified Data Processing on Large Clusters]( http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf)
|
||||
- [2004: MapReduce: Simplified Data Processing on Large Clusters](http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf)
|
||||
- mostly replaced by Cloud Dataflow?
|
||||
- [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf)
|
||||
- [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf)
|
||||
|
|
Loading…
Reference in New Issue