Roadmap to becoming a developer in 2022
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

4228 lines
194 KiB

{
"tU4Umtnfu01t9gLlnlK6b": {
"title": "Pick a Language",
"description": "You need to pick a programming language to learn the Computer Science concepts. My personal recommendation would be to pick C++ or C and the reason for that is:\n\n* They allow 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.\n* You will be able to find a lot of resources for the topics listed in this roadmap using C or C++. You can find a lot of resources for Python and Java, but they are not as abundant as C++ and C.\n\nGiven below is the list of resources; pick ones relevant to the language of your choice.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Learn C++ - W3Schools",
"url": "https://www.w3schools.com/cpp/",
"type": "article"
},
{
"title": "Learn C++ - Tutorials Point",
"url": "https://www.tutorialspoint.com/cplusplus/index.htm",
"type": "article"
},
{
"title": "Learn C - W3Schools",
"url": "https://www.w3schools.com/c/",
"type": "article"
},
{
"title": "Learn C - Tutorials Point",
"url": "https://www.tutorialspoint.com/cprogramming/index.htm",
"type": "article"
},
{
"title": "C++ Programming Course - Beginner to Advanced",
"url": "https://www.youtube.com/watch?v=8jLOx1hD3_o",
"type": "video"
},
{
"title": "C++ Tutorial for Beginners - Full Course",
"url": "https://www.youtube.com/watch?v=vLnPwxZdW4Y",
"type": "video"
},
{
"title": "C Programming Tutorial for Beginners",
"url": "https://www.youtube.com/watch?v=KJgsSFOSQv0",
"type": "video"
},
{
"title": "Learn C Programming with Dr. Chuck",
"url": "https://www.youtube.com/watch?v=j-_s8f5K30I",
"type": "video"
}
]
},
"RlKZzs44biQPgxD0tK1qx": {
"title": "Python",
"description": "Python is a well known programming language which is both a strongly typed and a dynamically typed language. Being an interpreted language, code is executed as soon as it is written and the Python syntax allows for writing code in functional, procedural or object-oriented programmatic ways.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Visit Dedicated Python Roadmap",
"url": "https://roadmap.sh/python",
"type": "article"
},
{
"title": "Python Website",
"url": "https://www.python.org/",
"type": "article"
},
{
"title": "Python Getting Started",
"url": "https://www.python.org/about/gettingstarted/",
"type": "article"
},
{
"title": "Automate the Boring Stuff",
"url": "https://automatetheboringstuff.com/",
"type": "article"
},
{
"title": "Python principles - Python basics",
"url": "https://pythonprinciples.com/",
"type": "article"
},
{
"title": "W3Schools - Python Tutorial ",
"url": "https://www.w3schools.com/python/",
"type": "article"
},
{
"title": "Python Crash Course",
"url": "https://ehmatthes.github.io/pcc/",
"type": "article"
},
{
"title": "An Introduction to Python for Non-Programmers",
"url": "https://thenewstack.io/an-introduction-to-python-for-non-programmers/",
"type": "article"
},
{
"title": "Getting Started with Python and InfluxDB",
"url": "https://thenewstack.io/getting-started-with-python-and-influxdb/",
"type": "article"
},
{
"title": "Explore top posts about Python",
"url": "https://app.daily.dev/tags/python?ref=roadmapsh",
"type": "article"
}
]
},
"mWW88VnkqWgDz02qw5zU-": {
"title": "Go",
"description": "Go is an open source programming language supported by Google. Go can be used to write cloud services, CLI tools, used for API development, and much more.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Visit Dedicated Go Roadmap",
"url": "https://roadmap.sh/golang",
"type": "article"
},
{
"title": "A Tour of Go – Go Basics",
"url": "https://go.dev/tour/welcome/1",
"type": "article"
},
{
"title": "Go Reference Documentation",
"url": "https://go.dev/doc/",
"type": "article"
},
{
"title": "Go by Example - annotated example programs",
"url": "https://gobyexample.com/",
"type": "article"
},
{
"title": "W3Schools Go Tutorial ",
"url": "https://www.w3schools.com/go/",
"type": "article"
},
{
"title": "Making a RESTful JSON API in Go",
"url": "https://thenewstack.io/make-a-restful-json-api-go/",
"type": "article"
},
{
"title": "Go, the Programming Language of the Cloud",
"url": "https://thenewstack.io/go-the-programming-language-of-the-cloud/",
"type": "article"
},
{
"title": "Explore top posts about Golang",
"url": "https://app.daily.dev/tags/golang?ref=roadmapsh",
"type": "article"
}
]
},
"jHKCLfLml8oZyj4829gx0": {
"title": "C#",
"description": "C# (pronounced \"C sharp\") is a general purpose programming language made by Microsoft. It is used to perform different tasks and can be used to create web apps, games, mobile apps, etc.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "C# Learning Path",
"url": "https://docs.microsoft.com/en-us/learn/paths/csharp-first-steps/?WT.mc_id=dotnet-35129-website",
"type": "article"
},
{
"title": "C# on W3 schools",
"url": "https://www.w3schools.com/cs/index.php",
"type": "article"
},
{
"title": "Introduction to C#",
"url": "https://docs.microsoft.com/en-us/shows/CSharp-101/?WT.mc_id=Educationalcsharp-c9-scottha",
"type": "article"
},
{
"title": "Explore top posts about C# Programming",
"url": "https://app.daily.dev/tags/csharp?ref=roadmapsh",
"type": "article"
},
{
"title": "C# tutorials",
"url": "https://www.youtube.com/watch?v=gfkTfcpWqAY&list=PLTjRvDozrdlz3_FPXwb6lX_HoGXa09Yef",
"type": "video"
}
]
},
"1bDjg-KBDKRmE6f1MWY8l": {
"title": "Rust",
"description": "Rust is a modern systems programming language focusing on safety, speed, and concurrency. It accomplishes these goals by being memory safe without using garbage collection.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "The Rust Programming Language - online book",
"url": "https://doc.rust-lang.org/book/",
"type": "article"
},
{
"title": "Rust by Example - collection of runnable examples",
"url": "https://doc.rust-lang.org/stable/rust-by-example/index.html",
"type": "article"
},
{
"title": "Rust vs. Go: Why They’re Better Together",
"url": "https://thenewstack.io/rust-vs-go-why-theyre-better-together/",
"type": "article"
},
{
"title": "Rust by the Numbers: The Rust Programming Language in 2021",
"url": "https://thenewstack.io/rust-by-the-numbers-the-rust-programming-language-in-2021/",
"type": "article"
},
{
"title": "Explore top posts about Rust",
"url": "https://app.daily.dev/tags/rust?ref=roadmapsh",
"type": "article"
}
]
},
"1kQJs-3Aw8Bi7d_Xh67zS": {
"title": "C++",
"description": "C++ is a powerful general-purpose programming language. It can be used to develop operating systems, browsers, games, and so on. C++ supports different ways of programming like procedural, object-oriented, functional, and so on. This makes C++ powerful as well as flexible.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Learn C++",
"url": "https://learncpp.com/",
"type": "article"
},
{
"title": "Cpp Reference",
"url": "https://en.cppreference.com/",
"type": "article"
},
{
"title": "CPlusPlus",
"url": "https://cplusplus.com/",
"type": "article"
},
{
"title": "C++ TutorialsPoint",
"url": "https://www.tutorialspoint.com/cplusplus/index.htm",
"type": "article"
},
{
"title": "W3Schools C++",
"url": "https://www.w3schools.com/cpp/default.asp",
"type": "article"
},
{
"title": "C++ Roadmap",
"url": "https://roadmap.sh/cpp",
"type": "article"
},
{
"title": "Explore top posts about C++ Programming",
"url": "https://app.daily.dev/tags/c++?ref=roadmapsh",
"type": "article"
}
]
},
"n4IsklfYJXFIyF1rGWuEa": {
"title": "C",
"description": "C is a general-purpose computer programming language. It was created in the 1970s by Dennis Ritchie, and remains very widely used and influential. By design, C's features cleanly reflect the capabilities of the targeted CPUs.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Learn C - W3Schools",
"url": "https://www.w3schools.com/c/",
"type": "article"
},
{
"title": "Learn C - Tutorials Point",
"url": "https://www.tutorialspoint.com/cprogramming/index.htm",
"type": "article"
},
{
"title": "Explore top posts about C Programming",
"url": "https://app.daily.dev/tags/c?ref=roadmapsh",
"type": "article"
},
{
"title": "C Programming Tutorial for Beginners",
"url": "https://www.youtube.com/watch?v=KJgsSFOSQv0",
"type": "video"
},
{
"title": "Learn C Programming with Dr. Chuck",
"url": "https://www.youtube.com/watch?v=j-_s8f5K30I",
"type": "video"
},
{
"title": "C Programming Full Course (Bro Code)",
"url": "https://youtu.be/87SH2Cn0s9A",
"type": "video"
}
]
},
"1lQSUFrrIGq19nUnM92-I": {
"title": "Java",
"description": "Java is general-purpose language, primarily used for Internet-based applications. It was created in 1995 by James Gosling at Sun Microsystems and is one of the most popular options for backend developers.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Visit Dedicated Java Roadmap",
"url": "https://roadmap.sh/java",
"type": "article"
},
{
"title": "Java Website",
"url": "https://www.java.com/",
"type": "article"
},
{
"title": "W3 Schools Tutorials",
"url": "https://www.w3schools.com/java/",
"type": "article"
},
{
"title": "Explore top posts about Java",
"url": "https://app.daily.dev/tags/java?ref=roadmapsh",
"type": "article"
},
{
"title": "Java Crash Course",
"url": "https://www.youtube.com/watch?v=eIrMbAQSU34",
"type": "video"
}
]
},
"NM7q5REW1sJgMhxJhPpLT": {
"title": "Data Structures",
"description": "As the name indicates itself, a **Data Structure** is a way of organizing the data in the **memory** so that it can be used efficiently. Some common data structures are array, linked list, stack, hashtable, queue, tree, heap, and graph.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Data Structures and Algorithms By Google",
"url": "https://techdevguide.withgoogle.com/paths/data-structures-and-algorithms/",
"type": "course"
},
{
"title": "Data Structures and Algorithms",
"url": "https://www.javatpoint.com/data-structure-tutorial",
"type": "article"
},
{
"title": "Explore top posts about Data Structures",
"url": "https://app.daily.dev/tags/data-structures?ref=roadmapsh",
"type": "article"
},
{
"title": "Data Structures Illustrated",
"url": "https://www.youtube.com/watch?v=9rhT3P1MDHk&list=PLkZYeFmDuaN2-KUIv-mvbjfKszIGJ4FaY",
"type": "video"
},
{
"title": "Data Structures playlist",
"url": "https://youtube.com/playlist?list=PLDV1Zeh2NRsB6SWUrDFW2RmDotAfPbeHu&si=_EEf7x58G6lUcMGG",
"type": "video"
}
]
},
"gr8BK6vq4AVwp_aUozZmf": {
"title": "Linked List",
"description": "Arrays store elements in contiguous memory locations, resulting in easily calculable addresses for the elements stored and this allows faster access to an element at a specific index. Linked lists are less rigid in their storage structure and elements are usually not stored in contiguous locations, hence they need to be stored with additional tags giving a reference to the next element. This difference in the data storage scheme decides which data structure would be more suitable for a given situation.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Singly Linked Lists",
"url": "https://www.coursera.org/lecture/data-structures/singly-linked-lists-kHhgK",
"type": "course"
},
{
"title": "Core: Linked Lists vs Arrays",
"url": "https://www.coursera.org/lecture/data-structures-optimizing-performance/core-linked-lists-vs-arrays-rjBs9",
"type": "course"
},
{
"title": "In the Real World: Linked Lists vs Arrays",
"url": "https://www.coursera.org/lecture/data-structures-optimizing-performance/in-the-real-world-lists-vs-arrays-QUaUd",
"type": "course"
},
{
"title": "Doubly Linked Lists",
"url": "https://www.coursera.org/lecture/data-structures/doubly-linked-lists-jpGKD",
"type": "course"
},
{
"title": "Linked List Data Structure | Illustrated Data Structures",
"url": "https://www.youtube.com/watch?v=odW9FU8jPRQ",
"type": "video"
},
{
"title": "Linked Lists in 4 minutes",
"url": "https://www.youtube.com/watch?v=F8AbOfQwl1c",
"type": "video"
},
{
"title": "CS 61B Lecture 7: Linked Lists I",
"url": "https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0",
"type": "video"
},
{
"title": "CS 61B Lecture 7: Linked Lists II",
"url": "https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w",
"type": "video"
},
{
"title": "Why you should avoid Linked Lists?",
"url": "https://www.youtube.com/watch?v=YQs6IC-vgmo",
"type": "video"
}
]
},
"hJB5gO9tosRlC4UmdSNzl": {
"title": "Stack",
"description": "Stack is a linear collection of items where items are inserted and removed in a particular order. Stack is also called a LIFO Data Structure because it follows the \"Last In First Out\" principle i.e. the item that is inserted in the last is the one that is taken out first.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Stack Data Structure",
"url": "https://www.coursera.org/lecture/data-structures/stacks-UdKzQ",
"type": "course"
},
{
"title": "Stack Data Structure | Illustrated Data Structures",
"url": "https://www.youtube.com/watch?v=I5lq6sCuABE",
"type": "video"
},
{
"title": "Stack in 3 minutes",
"url": "https://www.youtube.com/watch?v=KcT3aVgrrpU",
"type": "video"
}
]
},
"JI990pDX2jjNe6IH_Y_t0": {
"title": "Queue",
"description": "Queue is a linear collection of items where items are inserted and removed in a particular order. The queue is also called a FIFO Data Structure because it follows the \"First In, First Out\" principle i.e., the item that is inserted in the first is the one that is taken out first.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Queues - Coursera",
"url": "https://www.coursera.org/lecture/data-structures/queues-EShpq",
"type": "course"
},
{
"title": "Circular Buffer - Wikipedia",
"url": "https://en.wikipedia.org/wiki/Circular_buffer",
"type": "article"
},
{
"title": "Queue Data Structure | Illustrated Data Structures",
"url": "https://www.youtube.com/watch?v=mDCi1lXd9hc",
"type": "video"
},
{
"title": "Queue in 3 Minutes",
"url": "https://www.youtube.com/watch?v=D6gu-_tmEpQ",
"type": "video"
}
]
},
"G2dN2FO0SN_I-5AhO_EUk": {
"title": "Hash Table",
"description": "Hash Table, Map, HashMap, Dictionary or Associative are all the names of the same data structure. It is one of the most commonly used data structures.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Hash Table | Illustrated Data Structures",
"url": "https://www.youtube.com/watch?v=jalSiaIi8j4",
"type": "video"
},
{
"title": "Hash Table in 4 Minutes",
"url": "https://youtu.be/knV86FlSXJ8",
"type": "video"
},
{
"title": "Hashing with Chaining",
"url": "https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9",
"type": "video"
},
{
"title": "Table Doubling, Karp-Rabin",
"url": "https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=10",
"type": "video"
},
{
"title": "Open Addressing, Cryptographic Hashing",
"url": "https://www.youtube.com/watch?v=rvdJDijO2Ro&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=11",
"type": "video"
},
{
"title": "PyCon 2010: The Mighty Dictionary",
"url": "https://www.youtube.com/watch?v=C4Kc8xzcA68",
"type": "video"
},
{
"title": "PyCon 2017: The Dictionary Even Mightier",
"url": "https://www.youtube.com/watch?v=66P5FMkWoVU",
"type": "video"
},
{
"title": "(Advanced) Randomization: Universal & Perfect Hashing",
"url": "https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11",
"type": "video"
},
{
"title": "(Advanced) Perfect hashing",
"url": "https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4",
"type": "video"
}
]
},
"TwW6SO2IXqkxJXVjLzdwU": {
"title": "Array",
"description": "Arrays store elements in contiguous memory locations, resulting in easily calculable addresses for the elements stored and this allows faster access to an element at a specific index.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Array Data Structure - Coursera",
"url": "https://www.coursera.org/lecture/data-structures/arrays-OsBSF",
"type": "course"
},
{
"title": "Dynamic Arrays - Coursera",
"url": "https://www.coursera.org/lecture/data-structures/dynamic-arrays-EwbnV",
"type": "course"
},
{
"title": "Array Data Structure | Illustrated Data Structures",
"url": "https://www.youtube.com/watch?v=QJNwK2uJyGs",
"type": "video"
},
{
"title": "UC Berkeley CS61B - Linear and Multi-Dim Arrays (Start watching from 15m 32s)",
"url": "https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE",
"type": "video"
},
{
"title": "Dynamic and Static Arrays",
"url": "https://www.youtube.com/watch?v=PEnFFiQe1pM&list=PLDV1Zeh2NRsB6SWUrDFW2RmDotAfPbeHu&index=6",
"type": "video"
},
{
"title": "Dynamic Array Code",
"url": "https://www.youtube.com/watch?v=tvw4v7FEF1w&list=PLDV1Zeh2NRsB6SWUrDFW2RmDotAfPbeHu&index=5",
"type": "video"
},
{
"title": "Jagged Arrays",
"url": "https://www.youtube.com/watch?v=1jtrQqYpt7g",
"type": "video"
}
]
},
"_eWqiWUmOj0zUo_Ix3j1O": {
"title": "Tree",
"description": "A tree is non-linear and a hierarchical data structure consisting of a collection of nodes such that each node of the tree stores a value and a list of references to other nodes (the “children”).\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Tree | Illustrated Data Structures",
"url": "https://www.youtube.com/watch?v=S2W3SXGPVyU",
"type": "video"
}
]
},
"G9dnegZ6zNvxrCZ3O_b_z": {
"title": "Binary Tree",
"description": "A binary tree is a tree data structure in which each node has at most two children, which are referred to as the left child and the right child.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Explore top posts about Binary Tree",
"url": "https://app.daily.dev/tags/binary-tree?ref=roadmapsh",
"type": "article"
},
{
"title": "Binary Trees - Part 1",
"url": "https://www.youtube.com/watch?v=76dhtgZt38A&list=PLUl4u3cNGP63EdVPNLG3ToM6LaEUuStEY&index=9",
"type": "video"
},
{
"title": "Binary Trees - Part 2",
"url": "https://www.youtube.com/watch?v=U1JYwHcFfso&list=PLUl4u3cNGP63EdVPNLG3ToM6LaEUuStEY&index=10",
"type": "video"
}
]
},
"et7l85gnxjvzD2tDyHT_T": {
"title": "Binary Search Tree",
"description": "A binary search tree, also called an ordered or sorted binary tree, is a rooted binary tree data structure with the key of each internal node being greater than all the keys in the respective node's left subtree and less than the ones in its right subtree.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Binary Search Trees - Coursera",
"url": "https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction",
"type": "course"
},
{
"title": "Explore top posts about General Programming",
"url": "https://app.daily.dev/tags/general-programming?ref=roadmapsh",
"type": "article"
},
{
"title": "Tree | Illustrated Data Structures",
"url": "https://www.youtube.com/watch?v=S2W3SXGPVyU",
"type": "video"
},
{
"title": "Binary Search Trees - MIT",
"url": "https://www.youtube.com/watch?v=76dhtgZt38A",
"type": "video"
},
{
"title": "Binary Search Tree Implementation in C++",
"url": "https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=29",
"type": "video"
},
{
"title": "BST implementation - memory allocation in stack and heap",
"url": "https://www.youtube.com/watch?v=hWokyBoo0aI&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=30",
"type": "video"
},
{
"title": "Find Min and Max Element in Binary Search Tree",
"url": "https://www.youtube.com/watch?v=Ut90klNN264&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=31",
"type": "video"
},
{
"title": "Check if Given Tree is Binary Search Tree or Not",
"url": "https://www.youtube.com/watch?v=yEwSGhSsT0U&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36",
"type": "video"
},
{
"title": "Delete an Element from Binary Search Tree",
"url": "https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=37",
"type": "video"
},
{
"title": "Inorder Successor in a binary search tree",
"url": "https://www.youtube.com/watch?v=5cPbNCrdotA&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=38",
"type": "video"
}
]
},
"Q8ZJNeTbc22Q08Mra-McY": {
"title": "Full Binary Tree",
"description": "A full Binary tree is a special type of binary tree in which every parent node/internal node has either two or no children. It is also known as a proper binary tree.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Full Binary Tree",
"url": "https://www.programiz.com/dsa/full-binary-tree",
"type": "article"
}
]
},
"Jx1WWCjm8jkfAGtHv15n1": {
"title": "Complete Binary Tree",
"description": "A complete binary tree is a special type of binary tree where all the levels of the tree are filled completely except the lowest level nodes which are filled from as left as possible.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Complete Binary Tree - Programiz",
"url": "https://www.programiz.com/dsa/complete-binary-tree",
"type": "article"
}
]
},
"ZaWGLvZyu4sIPn-zwVISN": {
"title": " Balanced Tree",
"description": "A balanced binary tree, also referred to as a height-balanced binary tree, is defined as a binary tree in which the height of the left and right subtree of any node differ by not more than 1.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Balanced Binary Tree",
"url": "https://www.programiz.com/dsa/balanced-binary-tree",
"type": "article"
}
]
},
"w4sxmZR1BjX6wlrZmuOlf": {
"title": "Unbalanced Tree",
"description": "An unbalanced binary tree is one that is not balanced.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Balanced Binary Tree",
"url": "https://www.programiz.com/dsa/balanced-binary-tree",
"type": "article"
}
]
},
"vQm046o6ozcvLoqg9L6eL": {
"title": "Graph",
"description": "Graphs in data structures are non-linear data structures made up of a finite number of nodes or vertices and the edges that connect them. Graphs in data structures are used to address real-world problems in which it represents the problem area as a network like telephone networks, circuit networks, and social networks.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Graph Data Structure",
"url": "https://www.simplilearn.com/tutorials/data-structure-tutorial/graphs-in-data-structure",
"type": "article"
},
{
"title": "Graph Data Structure | Illustrated Data Structures",
"url": "https://www.youtube.com/watch?v=0sQE8zKhad0",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 10 - Graph Data Structures",
"url": "https://www.youtube.com/watch?v=Sjk0xqWWPCc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=10",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 11 - Graph Traversal",
"url": "https://www.youtube.com/watch?v=ZTwjXj81NVY&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=11",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 12 - Depth First Search",
"url": "https://www.youtube.com/watch?v=KyordYB3BOs&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=12",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 13 - Minimum Spanning Trees",
"url": "https://www.youtube.com/watch?v=oolm2VnJUKw&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=13",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 14 - Minimum Spanning Trees (cont)",
"url": "https://www.youtube.com/watch?v=RktgPx0MarY&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=14",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 15 - Graph Algorithms (cont 2)",
"url": "https://www.youtube.com/watch?v=MUe5DXRhyAo&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=15",
"type": "video"
},
{
"title": "6.006 Single-Source Shortest Paths Problem",
"url": "https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb",
"type": "video"
}
]
},
"6Jy8SXHuYA08h9iLjKFWR": {
"title": "Directed Graph",
"description": "A directed graph is graph, i.e., a set of objects (called vertices or nodes) that are connected together, where all the edges are directed from one vertex to another. A directed graph is sometimes called a digraph or a directed network. In contrast, a graph where the edges are bidirectional is called an undirected graph.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Directed Graph",
"url": "https://en.wikipedia.org/wiki/Directed_graph",
"type": "article"
}
]
},
"QGx8it2N_85PiPVjpTGK_": {
"title": "Undirected Graph",
"description": "An undirected graph is graph, i.e., a set of objects (called vertices or nodes) that are connected together, where all the edges are bidirectional. An undirected graph is sometimes called an undirected network. In contrast, a graph where the edges point in a direction is called a directed graph.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Undirected Graph",
"url": "https://mathinsight.org/definition/undirected_graph",
"type": "article"
}
]
},
"L4xtWOdqGUf4SbJkoOsNM": {
"title": "Spanning Tree",
"description": "A spanning tree is a subset of Graph G, which has all the vertices covered with minimum possible number of edges. Hence, a spanning tree does not have cycles and it cannot be disconnected..\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Spanning Tree",
"url": "https://www.tutorialspoint.com/data_structures_algorithms/spanning_tree.htm",
"type": "article"
},
{
"title": "CSE373 2020 - Lecture 13 - Minimum Spanning Trees",
"url": "https://www.youtube.com/watch?v=oolm2VnJUKw&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=13",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 14 - Minimum Spanning Trees (cont)",
"url": "https://www.youtube.com/watch?v=RktgPx0MarY&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=14",
"type": "video"
},
{
"title": "Greedy Algorithms: Minimum Spanning Tree",
"url": "https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp",
"type": "video"
}
]
},
"HZ1kk0TQ13FLC9t13BZl5": {
"title": "Adjacency Matrix",
"description": "",
"links": []
},
"rTnKJcPniUtqvfOyC88N0": {
"title": "Adjacency List",
"description": "A graph can either be represented as an adjacency matrix or an adjacency list.\n\nThe adjacency matrix is a 2D array of size `V x V` where `V` is the number of vertices in a graph. Let the 2D array be `adj[][]`, a slot `adj[i][j] = 1` indicates that there is an edge from vertex `i` to vertex `j`.\n\nAdjacency list is an array of vectors. Size of the array is equal to the number of vertices. Let the array be `array[]`. An entry `array[i]` represents the list of vertices adjacent to the ith vertex. This representation can also be used to represent a weighted graph. The weights of edges can be represented as lists of pairs.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Adjacency Matrix - Graph Representation",
"url": "https://www.programiz.com/dsa/graph-adjacency-matrix",
"type": "article"
},
{
"title": "Adjacency List - Graph Representation",
"url": "https://www.programiz.com/dsa/graph-adjacency-list",
"type": "article"
}
]
},
"pw3ZCC3HKU7D5SQwte4vE": {
"title": "Heap",
"description": "Heap is a tree-based data structure that follows the properties of a complete binary tree and is either a Min Heap or a Max Heap.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Priority Queue - Introduction",
"url": "https://www.coursera.org/lecture/data-structures/introduction-2OpTs",
"type": "course"
},
{
"title": "CS 61B Lecture 24: Priority Queues",
"url": "https://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE",
"type": "article"
},
{
"title": "Heap | Illustrated Data Structures",
"url": "https://www.youtube.com/watch?v=F_r0sJ1RqWk",
"type": "video"
},
{
"title": "Heaps and Heap Sort",
"url": "https://www.youtube.com/watch?v=B7hVxCmfPtM&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=5",
"type": "video"
}
]
},
"UpBrpmrUwYUB9eesNxCq5": {
"title": "Asymptotic Notation",
"description": "The efficiency of an algorithm depends on the amount of time, storage and other resources required to execute the algorithm. The efficiency is measured with the help of asymptotic notations.\n\nAn algorithm may not have the same performance for different types of inputs. With the increase in the input size, the performance will change.\n\nThe study of change in performance of the algorithm with the change in the order of the input size is defined as asymptotic analysis.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Asymptotic Analysis: Big-O Notation and More",
"url": "https://www.programiz.com/dsa/asymptotic-notations",
"type": "article"
},
{
"title": "CS 61B Lecture 19: Asymptotic Analysis",
"url": "https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98",
"type": "article"
},
{
"title": "Big-O Cheat Sheet",
"url": "https://www.bigocheatsheet.com/",
"type": "article"
},
{
"title": "Big O Notation — Calculating Time Complexity",
"url": "https://www.youtube.com/watch?v=Z0bH0cMY0E8",
"type": "video"
},
{
"title": "Big O Notation in 5 Minutes",
"url": "https://www.youtube.com/watch?v=__vX2sjlpXU",
"type": "video"
},
{
"title": "Asymptotic Notation - CS50",
"url": "https://www.youtube.com/watch?v=iOq5kSKqeR4",
"type": "video"
}
]
},
"c-NrTtJuNihbHzyPEOKTW": {
"title": "Big O",
"description": "Big O Notation describes, how well an algorithm scales with the input size. It is used to describe the worst case scenario of an algorithm. It is used to compare algorithms and to determine which algorithm is better.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "moviesCS 61B Lecture 19: Asymptotic Analysis",
"url": "https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98",
"type": "article"
},
{
"title": "Big O Notation — Calculating Time Complexity",
"url": "https://www.youtube.com/watch?v=Z0bH0cMY0E8",
"type": "video"
},
{
"title": "Big O Notations",
"url": "https://www.youtube.com/watch?v=V6mKVRU1evU",
"type": "video"
},
{
"title": "Big Oh Notation (and Omega and Theta)",
"url": "https://www.youtube.com/watch?v=ei-A_wy5Yxw&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN&index=3",
"type": "video"
}
]
},
"ThLpVZQIJ4diY5m0dik8m": {
"title": "Big-Theta",
"description": "While Big O Notation refers to the upper bound of a function, Big Theta Notation refers to the exact bound of a function. Big Theta Notation is used to describe the exact growth rate of a function. It is denoted by the symbol Θ.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Big Oh Notation (and Omega and Theta)",
"url": "https://www.youtube.com/watch?v=ei-A_wy5Yxw&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN&index=3",
"type": "video"
},
{
"title": "Asymptotic Notation - CS50",
"url": "https://www.youtube.com/watch?v=iOq5kSKqeR4",
"type": "video"
}
]
},
"X33735aeAVSlJ6yv9GS-h": {
"title": "Big Omega",
"description": "Big Omega notation is used to describe the lower bound of a function. It is the opposite of Big O notation. While Big O is used to describe the worst case scenario of an algorithm, Big Omega is used to describe the best case scenario of an algorithm.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Big Oh Notation (and Omega and Theta)",
"url": "https://www.youtube.com/watch?v=ei-A_wy5Yxw&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN&index=3",
"type": "video"
},
{
"title": "Asymptotic Notation - CS50",
"url": "https://www.youtube.com/watch?v=iOq5kSKqeR4",
"type": "video"
}
]
},
"3F_QBv_sU39ehOxpurF88": {
"title": "Constant",
"description": "Constant time algorithms are the simplest and most efficient algorithms. They are algorithms that always take the same amount of time to run, regardless of the size of the input. This is the best case scenario for an algorithm, and is the goal of all algorithms.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Big O Notation — Calculating Time Complexity",
"url": "https://www.youtube.com/watch?v=Z0bH0cMY0E8",
"type": "video"
},
{
"title": "Big O Notations",
"url": "https://www.youtube.com/watch?v=V6mKVRU1evU",
"type": "video"
}
]
},
"nnlMNkQn1HU4U9yPbV9kQ": {
"title": "Logarithmic",
"description": "Logarithmic complexity algorithms are the second fastest algorithms. They are faster than linear algorithms, but slower than constant algorithms.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Big O Notation — Calculating Time Complexity",
"url": "https://www.youtube.com/watch?v=Z0bH0cMY0E8",
"type": "video"
},
{
"title": "Big O Notations",
"url": "https://www.youtube.com/watch?v=V6mKVRU1evU",
"type": "video"
}
]
},
"jymhjv8GiFALQpox6aZeu": {
"title": "Linear",
"description": "Linear algorithms are algorithms that have a runtime that is directly proportional to the size of the input. This means that the runtime of the algorithm will increase linearly with the size of the input. For example, if the input size is 10, the runtime will be 10 times the runtime of the algorithm when the input size is 1. If the input size is 100, the runtime will be 100 times the runtime of the algorithm when the input size is 1.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Big O Notation — Calculating Time Complexity",
"url": "https://www.youtube.com/watch?v=Z0bH0cMY0E8",
"type": "video"
},
{
"title": "Big O Notations",
"url": "https://www.youtube.com/watch?v=V6mKVRU1evU",
"type": "video"
}
]
},
"sVFvpsAO1_ZH9aliEj9aF": {
"title": "Polynomial",
"description": "Polynomial algorithms are algorithms that have a runtime that is a polynomial function of the input size. This means that the runtime is a function of the form `n^k` where `k` is a constant. For example, the runtime of the following algorithm is `n^2`:\n\n def polynomial_algorithm(n):\n for i in range(n):\n for j in range(n):\n print(i, j)\n \n\nVisit the following resources to learn more:",
"links": [
{
"title": "Big O Notation — Calculating Time Complexity",
"url": "https://www.youtube.com/watch?v=Z0bH0cMY0E8",
"type": "video"
},
{
"title": "Big O Notations",
"url": "https://www.youtube.com/watch?v=V6mKVRU1evU",
"type": "video"
}
]
},
"5mMLr6tWbiSZuox1lx0_B": {
"title": "Exponential",
"description": "Exponential algorithms are those that grow at a rate of 2^n. This means that for each additional input, the algorithm will take twice as long to run. The following function is an example of an exponential algorithm:\n\n def exponential(n):\n if n == 0:\n return 1\n return exponential(n - 1) + exponential(n - 1)\n \n\nAs you can see, the algorithm's runtime grows exponentially. For each additional input, the algorithm will take twice as long to run.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Big O Notation — Calculating Time Complexity",
"url": "https://www.youtube.com/watch?v=Z0bH0cMY0E8",
"type": "video"
},
{
"title": "Big O Notations",
"url": "https://www.youtube.com/watch?v=V6mKVRU1evU",
"type": "video"
}
]
},
"m0umGQNdvg95UiNpQZsQN": {
"title": "Factorial",
"description": "Factorial complexity algorithms have a runtime of `O(n!)`. This is the worst case scenario for an algorithm. Factorial complexity algorithms are very inefficient and should be avoided.\n\n def generate_permutations(s):\n # Base case: If the string length is 1, return a list containing the string\n if len(s) == 1:\n return [s]\n \n # Initialize the result list\n permutations = []\n \n # Recursively generate all permutations\n for i in range(len(s)):\n # Current character\n current_char = s[i]\n # Remaining characters\n remaining_chars = s[:i] + s[i+1:]\n # Generate all permutations of the remaining characters\n for perm in generate_permutations(remaining_chars):\n # Add the current character to the front of each generated permutation\n permutations.append(current_char + perm)\n \n return permutations",
"links": []
},
"7a6-AnBI-3tAU1dkOvPkx": {
"title": "Common Algorithms",
"description": "Here are some common algorithms that you should know. You can find more information about them in the [Algorithms](https://www.khanacademy.org/computing/computer-science/algorithms) section of the Computer Science course.\n\n* Sorting\n* Recursion\n* Searching\n* Cache Algorithms\n* Tree Algorithms\n* Graph Algorithms\n* Greedy Algorithms\n* Backtracking\n* Substring Search\n* Suffix Arrays\n* Dynamic Programming",
"links": []
},
"0_qNhprnXU3i8koW3XTdD": {
"title": "Tail Recursion",
"description": "Tail recursion is a special kind of recursion where the recursive call is the very last thing in the function. It's a function that does not do anything at all after recursing.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Tail Recursion",
"url": "https://www.coursera.org/lecture/programming-languages/tail-recursion-YZic1",
"type": "course"
},
{
"title": "What is tail recursion? Why is it so bad?",
"url": "https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad",
"type": "article"
},
{
"title": "Explore top posts about Recursion",
"url": "https://app.daily.dev/tags/recursion?ref=roadmapsh",
"type": "article"
}
]
},
"iLEOuQgUgU5Jc38iXDpp5": {
"title": "Non-Tail Recursion",
"description": "Tail recursion is when a function can directly return the result of a recursive call - there are no outstanding operations, and there is no need for the call stack frame to be preserved. So it can be translated to a “goto with arguments”, and the stack usage will be constant.\n\nIn “non-tail recursion”, there are outstanding operations after the recursive call, and the stack frame cannot be nuked.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "What is non-tail recursion?",
"url": "https://www.quora.com/What-is-non-tail-recursion",
"type": "article"
},
{
"title": "Tail vs Non-Tail Recursion",
"url": "https://www.baeldung.com/cs/tail-vs-non-tail-recursion",
"type": "article"
},
{
"title": "Explore top posts about Recursion",
"url": "https://app.daily.dev/tags/recursion?ref=roadmapsh",
"type": "article"
},
{
"title": "Recursion (Solved Problem 1)",
"url": "https://www.youtube.com/watch?v=IVLUGb_gDDE",
"type": "video"
},
{
"title": "Types of Recursion (Part 2) | Tail & Non-tail Recursion",
"url": "https://www.youtube.com/watch?v=HIt_GPuD7wk",
"type": "video"
}
]
},
"cEsboPT8nLvo0Zt0_oBq6": {
"title": "LRU Cache",
"description": "LRU cache is a cache that evicts the least recently used item first. It is a very common cache algorithm. It is used in many places, such as in the browser cache, the database cache, and the cache of the operating system.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "The Magic of LRU Cache (100 Days of Google Dev)",
"url": "https://www.youtube.com/watch?v=R5ON3iwx78M",
"type": "video"
},
{
"title": "Implementing LRU - Udacity",
"url": "https://www.youtube.com/watch?v=bq6N7Ym81iI",
"type": "video"
},
{
"title": "LeetCode | 146 LRU Cache | C++ | Explanation",
"url": "https://www.youtube.com/watch?v=8-FZRAjR7qU",
"type": "video"
}
]
},
"hna0HLu0l4NTNNpyGqlW5": {
"title": "MFU Cache",
"description": "MFU Cache is another cache algorithm. The difference is that instead of deleting the least frequently used entry, the MFU Cache deletes the most frequently used entry.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Comparison of MFU and LRU page replacement algorithms",
"url": "https://stackoverflow.com/questions/13597246/comparison-of-mfu-and-lru-page-replacement-algorithms",
"type": "article"
},
{
"title": "Why does cache use Most Recently Used (MRU) algorithm as evict policy?",
"url": "https://stackoverflow.com/questions/5088128/why-does-cache-use-most-recently-used-mru-algorithm-as-evict-policy",
"type": "article"
}
]
},
"8kTg4O9MrTHRUrp6U-ctA": {
"title": "Binary Search",
"description": "Binary search is a search algorithm that finds the position of a target value within a sorted array. Binary search compares the target value to the middle element of the array. If they are not equal, the half in which the target cannot lie is eliminated and the search continues on the remaining half, again taking the middle element to compare to the target value, and repeating this until the target value is found. If the search ends with the remaining half being empty, the target is not in the array.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Binary Search - Khan Academy",
"url": "https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search",
"type": "article"
},
{
"title": "Binary Search",
"url": "https://www.topcoder.com/thrive/articles/Binary%20Search",
"type": "article"
},
{
"title": "Explore top posts about Binary Search",
"url": "https://app.daily.dev/tags/binary-search?ref=roadmapsh",
"type": "article"
},
{
"title": "Binary Search in 4 Minutes",
"url": "https://www.youtube.com/watch?v=fDKIpRe8GW4&feature=youtu.be",
"type": "video"
},
{
"title": "Binary Search - CS50",
"url": "https://www.youtube.com/watch?v=D5SrAga1pno",
"type": "video"
}
]
},
"XwyqBK9rgP1MMcJrdIzm5": {
"title": "Linear Search",
"description": "Linear search is a very simple algorithm that is used to search for a value in an array. It sequentially checks each element of the array until a match is found or until all the elements have been searched.\n\nVisit the following resources to learn more:",
"links": []
},
"4wGBYFZpcdTt97WTbSazx": {
"title": "Bubble Sort",
"description": "Bubble sort is a simple sorting algorithm that repeatedly steps through the list, compares adjacent elements and swaps them if they are in the wrong order. The pass through the list is repeated until the list is sorted.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Bubble Sort",
"url": "https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB",
"type": "video"
},
{
"title": "Analyzing Bubble Sort",
"url": "https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB",
"type": "video"
},
{
"title": "Bubble sort in 2 minutes",
"url": "https://youtu.be/xli_FI7CuzA",
"type": "video"
}
]
},
"rOsHFXQm5jNz0RyZQ5ZGs": {
"title": "Selection Sort",
"description": "Selection sort is a sorting algorithm that selects the smallest unsorted item in the list and swaps it with index 0, then finds the next smallest and places it into index 1 and so on.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Selection Sort",
"url": "https://www.coursera.org/lecture/algorithms-part1/selection-UQxFT",
"type": "course"
},
{
"title": "Selection Sort in 3 Minutes",
"url": "https://www.youtube.com/watch?v=g-PGLbMth_g",
"type": "video"
}
]
},
"ujDCW6zZE8dV_fpNf-oIl": {
"title": "Insertion Sort",
"description": "Insertion sort is a simple sorting algorithm that builds the final sorted array one item at a time by comparisons. It is much less efficient on large lists than more advanced algorithms such as quicksort, heapsort, or merge sort.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Insertion Sort Algorithm",
"url": "https://www.programiz.com/dsa/insertion-sort",
"type": "article"
},
{
"title": "Insertion Sort — MIT",
"url": "https://www.youtube.com/watch?v=Kg4bqzAqRBM&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=4",
"type": "video"
},
{
"title": "Insertion Sort in 3 Minutes",
"url": "https://www.youtube.com/watch?v=JU767SDMDvA",
"type": "video"
}
]
},
"CovrRsBY-sYW_xSegcN6N": {
"title": "Heap Sort",
"description": "Heap sort is a comparison based sorting algorithm. It is similar to selection sort where we first find the maximum element and place the maximum element at the end. We repeat the same process for remaining element.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Heap Sort Algorithm",
"url": "https://www.coursera.org/lecture/data-structures/heap-sort-hSzMO",
"type": "course"
},
{
"title": "Heap Sort Algorithm",
"url": "https://www.programiz.com/dsa/heap-sort",
"type": "article"
},
{
"title": "Heap Sort in 4 Minutes",
"url": "https://www.youtube.com/watch?v=2DmK_H7IdTo",
"type": "video"
},
{
"title": "Heap Sort Algorithm - MIT",
"url": "https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291s",
"type": "video"
},
{
"title": "Lecture 4 - Heaps and Heap Sort",
"url": "https://www.youtube.com/watch?v=B7hVxCmfPtM&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=5",
"type": "video"
}
]
},
"be0Q8GW9ZX1JbPrBvbMji": {
"title": "Quick Sort",
"description": "Quick Sort is a divide and conquer algorithm. It picks an element as pivot and partitions the given array around the picked pivot. There are many different versions of quickSort that pick pivot in different ways.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Quick Sort Implementation in Python",
"url": "https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py",
"type": "opensource"
},
{
"title": "Quick Sort Algorithm",
"url": "https://www.programiz.com/dsa/quick-sort",
"type": "article"
},
{
"title": "Quick Sort Implementation in C",
"url": "http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c",
"type": "article"
},
{
"title": "Quick Sort in 4 Minutes",
"url": "https://www.youtube.com/watch?v=Hoixgm4-P4M&feature=youtu.be",
"type": "video"
}
]
},
"Bh-whDbcCjl3m6mRm9w02": {
"title": "Merge Sort",
"description": "Merge sort is a divide and conquer algorithm. It divides the input array into two halves, calls itself for the two halves, and then merges the two sorted halves. The `merge()` function is used for merging two halves. The `merge(arr, l, m, r)` is key process that assumes that `arr[l..m]` and `arr[m+1..r]` are sorted and merges the two sorted sub-arrays into one.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Merge Sort Algorithm",
"url": "https://www.programiz.com/dsa/merge-sort",
"type": "article"
},
{
"title": "Merge Sort in 3 Minutes",
"url": "https://www.youtube.com/watch?v=4VqmGXwpLqc",
"type": "video"
}
]
},
"psTN5N66xoFHFopgd5faW": {
"title": "Pre-Order Traversal",
"description": "Pre-order traversal is a tree traversal algorithm that visits the root node first, then recursively traverses the left subtree, followed by the right subtree.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Tree | Illustrated Data Structures",
"url": "https://www.youtube.com/watch?v=S2W3SXGPVyU",
"type": "video"
},
{
"title": "Pre-order tree traversal in 3 minutes",
"url": "https://www.youtube.com/watch?v=1WxLM2hwL-U",
"type": "video"
}
]
},
"KTrgf14Q6rg2f0v4dqq2s": {
"title": "In-Order Traversal",
"description": "In-order traversal is a tree traversal algorithm that visits the left subtree, the root, and then the right subtree. This is the most common way to traverse a binary search tree. It is also used to create a sorted list of nodes in a binary search tree.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Tree | Illustrated Data Structures",
"url": "https://www.youtube.com/watch?v=S2W3SXGPVyU",
"type": "video"
}
]
},
"4_oGXwjzSY5cX9n7L4iAA": {
"title": "Post Order Traversal",
"description": "Post-order traversal is a type of tree traversal that visits the left subtree, then the right subtree, and finally the root node. This is the opposite of pre-order traversal, which visits the root node first, then the left subtree, and finally the right subtree.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Tree | Illustrated Data Structures",
"url": "https://www.youtube.com/watch?v=S2W3SXGPVyU",
"type": "video"
}
]
},
"Ke_ch4fnuKIiGAXUM_LPP": {
"title": "Breadth First Search",
"description": "Breadth first search is a graph traversal algorithm that starts at the root node and explores all of the neighbor nodes at the present depth prior to moving on to the nodes at the next depth level.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Breadth-First Search (BFS) and Depth-First Search (DFS) for Binary Trees in Java",
"url": "https://www.digitalocean.com/community/tutorials/breadth-first-search-depth-first-search-bfs-dfs",
"type": "article"
},
{
"title": "BFS and DFS in a Binary Tree",
"url": "https://www.youtube.com/watch?v=uWL6FJhq5fM",
"type": "video"
},
{
"title": "Breadth-first search in 4 minutes",
"url": "https://www.youtube.com/watch?v=HZ5YTanv5QE",
"type": "video"
}
]
},
"chzP5_t2gMi6MstxEzCi5": {
"title": "Depth First Search",
"description": "Depth first search is a graph traversal algorithm that starts at a root node and explores as far as possible along each branch before backtracking.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Breadth-First Search (BFS) and Depth-First Search (DFS) for Binary Trees in Java",
"url": "https://www.digitalocean.com/community/tutorials/breadth-first-search-depth-first-search-bfs-dfs",
"type": "article"
},
{
"title": "BFS and DFS in a Binary Tree",
"url": "https://www.youtube.com/watch?v=uWL6FJhq5fM",
"type": "video"
},
{
"title": "Depth First Search in 4 Minutes",
"url": "https://www.youtube.com/watch?v=Urx87-NMm6c",
"type": "video"
}
]
},
"vcV6TEM_PqXxtThdfMKGw": {
"title": "Breadth First Search",
"description": "Breadth first search for a graph is a way to traverse the graph. It starts at the root node and explores all of the neighbor nodes at the present depth prior to moving on to the nodes at the next depth level.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Graph Algorithms II - DFS, BFS, Kruskals Algorithm, Union Find Data Structure - Lecture 7",
"url": "https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7",
"type": "video"
},
{
"title": "Breadth-first search in 4 minutes",
"url": "https://www.youtube.com/watch?v=HZ5YTanv5QE",
"type": "video"
}
]
},
"Yf5gOIe7oiL19MjEVcpdw": {
"title": "Depth First Search",
"description": "Depth first search is a graph traversal algorithm that starts at a root node and explores as far as possible along each branch before backtracking.\n\nVisit the following resources to learn more:",
"links": []
},
"eY4nK2lPYsrR-a_8y2sao": {
"title": "Bellman Ford's Algorithm",
"description": "Bellman ford's algorithm is a graph algorithm that finds the shortest path from a source vertex to all other vertices in a graph. It is a dynamic programming algorithm that uses a bottom-up approach to find the shortest path. It is similar to Dijkstra's algorithm but it can handle negative weights. It is also similar to Floyd-Warshall's algorithm but it can handle negative weights and it is faster than Floyd-Warshall's algorithm.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Explore top posts about Data Science",
"url": "https://app.daily.dev/tags/data-science?ref=roadmapsh",
"type": "article"
},
{
"title": "Bellman-Ford - MIT",
"url": "https://www.youtube.com/watch?v=f9cVS_URPc0&ab_channel=MITOpenCourseWare",
"type": "video"
},
{
"title": "Bellman-Ford in 4 Minutes",
"url": "https://www.youtube.com/watch?v=9PHkk0UavIM",
"type": "video"
}
]
},
"oJstm-8c-4seWbIWcNgDv": {
"title": "Dijkstra's Algorithm",
"description": "Dijkstra's algorithm is a graph traversal algorithm that finds the shortest path between two nodes in a graph. It is a weighted graph algorithm, meaning that each edge in the graph has a weight associated with it. The algorithm works by finding the shortest path from the starting node to all other nodes in the graph. It does this by keeping track of the distance from the starting node to each node, and then choosing the node with the shortest distance from the starting node to visit next. It then updates the distance of each node from the starting node, and repeats the process until all nodes have been visited.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Explore top posts about Data Science",
"url": "https://app.daily.dev/tags/data-science?ref=roadmapsh",
"type": "article"
},
{
"title": "Dijkstras Algorithm - MIT",
"url": "https://www.youtube.com/watch?v=NSHizBK9JD8&t=1731s&ab_channel=MITOpenCourseWare",
"type": "video"
},
{
"title": "Dijkstras Algorithm in 3 Minutes",
"url": "https://www.youtube.com/watch?v=_lHSawdgXpI",
"type": "video"
}
]
},
"Yrk2PLUa-_FAPlhCkMl3e": {
"title": "A* Algorithm",
"description": "A\\* is a graph traversal algorithm that is used to find the shortest path between two nodes in a graph. It is a modified version of Dijkstra's algorithm that uses heuristics to find the shortest path. It is used in pathfinding and graph traversal.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "A* Search Algorithm - Wikipedia",
"url": "https://en.wikipedia.org/wiki/A*_search_algorithm",
"type": "article"
},
{
"title": "Explore top posts about Data Science",
"url": "https://app.daily.dev/tags/data-science?ref=roadmapsh",
"type": "article"
},
{
"title": "A* Pathfinding (E01: algorithm explanation)",
"url": "https://www.youtube.com/watch?v=-L-WgKMFuhE",
"type": "video"
}
]
},
"aBjBHpq_OajgQjxdCobXD": {
"title": "Finding Hamiltonian Paths",
"description": "Hamiltonian paths are paths that visit every node in a graph exactly once. They are named after the famous mathematician [Hamilton](https://en.wikipedia.org/wiki/William_Rowan_Hamilton). Hamiltonian paths are a special case of [Hamiltonian cycles](https://en.wikipedia.org/wiki/Hamiltonian_cycle), which are cycles that visit every node in a graph exactly once.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Hamiltonian Path",
"url": "https://www.hackerearth.com/practice/algorithms/graphs/hamiltonian-path/tutorial/",
"type": "article"
},
{
"title": "Hamiltonian Paths and Cycles",
"url": "https://medium.com/stamatics-iit-kanpur/hamiltonian-paths-and-cycles-4f233bfbc53a",
"type": "article"
},
{
"title": "Hamiltonian Paths - Lecture 7",
"url": "https://people.csail.mit.edu/virgi/6.s078/lecture17.pdf",
"type": "article"
}
]
},
"HlAmTY1udqDT2mTfBU9P-": {
"title": "Solving N Queen Problem",
"description": "N Queen Problem is a famous problem in Computer Science. It is a problem of placing n queens on an n x n chessboard such that no two queens attack each other. The problem is to find all possible solutions to the problem.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "N-Queens problem using backtracking in Java/C++",
"url": "https://www.digitalocean.com/community/tutorials/n-queens-problem-java-c-plus-plus",
"type": "article"
},
{
"title": "6.1 N Queens Problem using Backtracking",
"url": "https://www.youtube.com/watch?v=xFv_Hl4B83A",
"type": "video"
}
]
},
"nODFT-i2YsxUVsgwWkIWn": {
"title": "Maze Solving Problem",
"description": "Maze solving problem is a classic problem in computer science. It is a problem where we have to find a path from a starting point to an end point in a maze. The maze is represented as a grid of cells. Each cell can be either a wall or a path. The path cells are connected to each other. The starting point and the end point are also given. The goal is to find a path from the starting point to the end point. The path can only be made up of path cells. The path cannot go through the wall cells.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Maze Solving Algorithms",
"url": "https://github.com/john-science/mazelib/blob/main/docs/MAZE_SOLVE_ALGOS.md",
"type": "opensource"
},
{
"title": "Maze Solving Algorithms",
"url": "https://kidscodecs.com/maze-solving-algorithms/",
"type": "article"
},
{
"title": "Maze Solving - Computerphile",
"url": "https://www.youtube.com/watch?v=rop0W4QDOUI",
"type": "video"
},
{
"title": "Python Maze Solving Tutorial (Using Recursion)",
"url": "https://www.youtube.com/watch?v=XP94WC_XnZc",
"type": "video"
}
]
},
"NcKW_3vJWL_rVlDBB_Qjs": {
"title": "The Knight's Tour Problem",
"description": "Knight's Tour Problem is a problem where we have to find a path for a knight to visit all the cells of a chessboard without visiting any cell twice.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Knights Tour",
"url": "https://bradfieldcs.com/algos/graphs/knights-tour/",
"type": "article"
},
{
"title": "Knights Tour Proble",
"url": "https://www.codesdope.com/course/algorithms-knights-tour-problem/",
"type": "article"
},
{
"title": "Backtracking: The Knight’s Tour Problem",
"url": "https://www.codingninjas.com/codestudio/library/backtracking-the-knights-tour-problem",
"type": "article"
}
]
},
"l3X9UrEYTWs5kBXI1NNCf": {
"title": "Dijkstra's Algorithm",
"description": "Dijkstra's algorithm is a greedy algorithm that finds the shortest path between two nodes in a graph. It is a very common algorithm used in computer science and is used in many applications such as GPS navigation, network routing, and finding the shortest path in a maze.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Explore top posts about Data Science",
"url": "https://app.daily.dev/tags/data-science?ref=roadmapsh",
"type": "article"
},
{
"title": "Dijkstras Algorithm in 3 Minutes",
"url": "https://www.youtube.com/watch?v=_lHSawdgXpI",
"type": "video"
},
{
"title": "Dijkstras Algorithm - MIT",
"url": "https://www.youtube.com/watch?v=NSHizBK9JD8&t=1731s&ab_channel=MITOpenCourseWare",
"type": "video"
},
{
"title": "Speeding Up Dijkstras Algorithm - MIT",
"url": "https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18",
"type": "video"
}
]
},
"QrcijPiVT3bgqfkF-6ssi": {
"title": "Huffman Coding",
"description": "Huffman coding is a lossless data compression algorithm. The idea is to assign variable-length codes to input characters, lengths of the assigned codes are based on the frequencies of corresponding characters. The most frequent character gets the smallest code and the least frequent character gets the largest code.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Huffman Coding",
"url": "https://www.programiz.com/dsa/huffman-coding",
"type": "article"
},
{
"title": "Huffman Coding - Greedy Method",
"url": "https://www.youtube.com/watch?v=co4_ahEDCho",
"type": "video"
}
]
},
"Wqhg7E-lOz1oNcRXjUej8": {
"title": "Kruskal's Algorithm",
"description": "Kruskal's algorithm is a greedy algorithm that finds a minimum spanning tree for a connected weighted graph. It is a minimum spanning tree algorithm that takes a graph as input and finds the subset of the edges of that graph which form a tree that includes every vertex, where the total weight of all the edges in the tree is minimized. If the graph is not connected, then it finds a minimum spanning forest (a minimum spanning tree for each connected component).\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Explore top posts about Data Science",
"url": "https://app.daily.dev/tags/data-science?ref=roadmapsh",
"type": "article"
},
{
"title": "Kruskals Algorithm in 2 Minutes",
"url": "https://www.youtube.com/watch?v=71UQH7Pr9kU",
"type": "video"
},
{
"title": "Graph Algorithms II - DFS, BFS, Kruskals Algorithm, Union Find Data Structure - Lecture 7",
"url": "https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8",
"type": "video"
}
]
},
"Hqw2eGtgfbVggqXBnIOdI": {
"title": "Ford-Fulkerson Algorithm",
"description": "Ford Fulkerson Algorithm is a greedy algorithm that is used to find the maximum flow in a flow network. It is also known as the Edmonds-Karp Algorithm.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Ford-Fulkerson Algorithm",
"url": "https://www.programiz.com/dsa/ford-fulkerson-algorithm",
"type": "article"
},
{
"title": "Explore top posts about Data Science",
"url": "https://app.daily.dev/tags/data-science?ref=roadmapsh",
"type": "article"
},
{
"title": "Ford-Fulkerson in 5 minutes",
"url": "https://www.youtube.com/watch?v=Tl90tNtKvxs",
"type": "video"
}
]
},
"znpFIKwMJlepKJ8dH3kvC": {
"title": "Prim's Algorithm",
"description": "Prim's algorithm is a greedy algorithm that finds a minimum spanning tree for a weighted undirected graph. A minimum spanning tree is a subset of the edges of a connected, edge-weighted undirected graph that connects all the vertices together, without any cycles and with the minimum possible total edge weight. A minimum spanning tree for a weighted undirected graph is also called a minimum weight spanning tree or minimum cost spanning tree.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Prims Algorithm",
"url": "https://www.programiz.com/dsa/prim-algorithm",
"type": "article"
},
{
"title": "Explore top posts about Data Science",
"url": "https://app.daily.dev/tags/data-science?ref=roadmapsh",
"type": "article"
},
{
"title": "Graph Algorithms I - Topological Sorting, Prims Algorithm - Lecture 6",
"url": "https://www.youtube.com/watch?v=i_AQT_XfvD8&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7",
"type": "video"
}
]
},
"l5--4opvZoc_seVn__5R3": {
"title": "Rabin-Karp Algorithm",
"description": "Rabin-Karp algorithm is a string searching algorithm that uses hashing to find any one of a set of pattern strings in a text. For strings of average length `n`, it performs in `O(n+m)` time with `O(m)` space, where `m` is the length of the pattern. It is often used in bioinformatics to search for DNA patterns.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Rabin Karps Algorithm",
"url": "https://www.coursera.org/lecture/data-structures/rabin-karps-algorithm-c0Qkw",
"type": "course"
},
{
"title": "Optimization: Precomputation",
"url": "https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation",
"type": "course"
},
{
"title": "Optimization: Implementation and Analysis",
"url": "https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis",
"type": "course"
},
{
"title": "Explore top posts about Data Science",
"url": "https://app.daily.dev/tags/data-science?ref=roadmapsh",
"type": "article"
},
{
"title": "Lecture 9: Table Doubling, Karp-Rabin",
"url": "https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9",
"type": "video"
},
{
"title": "Rolling Hashes, Amortized Analysis",
"url": "https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=33",
"type": "video"
}
]
},
"n11ujPI3of-52l2KW2CDQ": {
"title": "LFU Cache",
"description": "LFU Cache is a data structure that stores key-value pairs. It has a fixed size and when it is full, it removes the least frequently used key-value pair. It is a variation of the LRU Cache and is used in many applications such as caching web pages, caching database queries, and caching images.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "1117. Data Structure - LFU Cache",
"url": "https://jojozhuang.github.io/algorithm/data-structure-lfu-cache/",
"type": "article"
}
]
},
"NUWk-7IXmMU-4TT-oS8fF": {
"title": "String Search & Manipulations",
"description": "String search and manipulation is a very important topic in computer science. It is used in many different applications, such as searching or replacing a specific pattern, word or character in a string.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "String-searching algorithm",
"url": "https://en.wikipedia.org/wiki/String-searching_algorithm",
"type": "article"
}
]
},
"L4M5yFRKKR2axKXGcIA7d": {
"title": "Search Pattern in Text",
"description": "Searching pattern in text is a very common task in computer science. It is used in many applications like spell checkers, text editors, and many more.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Search Pattern in Text",
"url": "https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text",
"type": "course"
}
]
},
"Ld1TUNS8713coMNvwhNIJ": {
"title": "Suffix Arrays",
"description": "Suffix arrays are a data structure that allows us to quickly find all the suffixes of a string in lexicographical order. This is useful for many problems, such as finding the longest common substring between two strings, or finding the number of distinct substrings of a string.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Suffix Arrays - Coursera",
"url": "https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays",
"type": "course"
},
{
"title": "Suffix array introduction",
"url": "https://www.youtube.com/watch?v=zqKlL3ZpTqs",
"type": "video"
},
{
"title": "Advanced Data Structures: Suffix Arrays",
"url": "https://www.youtube.com/watch?v=IzMxbboPcqQ",
"type": "video"
},
{
"title": "Suffix arrays: building",
"url": "https://www.youtube.com/watch?v=ZWlbhBjjwyA",
"type": "video"
}
]
},
"g3b0kt1fCAjjYyS2WelWi": {
"title": "Brute Force Search",
"description": "Brute force search is a simple algorithm that checks for a pattern in a string by comparing each character of the string with the first character of the pattern. If the first character matches, it then compares the next character of the string with the next character of the pattern and so on. If all the characters of the pattern match, then the pattern is found. If the first character does not match, then the algorithm compares the second character of the string with the first character of the pattern and so on.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Brute-Force Substring Search",
"url": "https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search",
"type": "course"
},
{
"title": "A beginner guide to Brute Force Algorithm for substring search",
"url": "https://nulpointerexception.com/2019/02/10/a-beginner-guide-to-brute-force-algorithm-for-substring-search/",
"type": "article"
},
{
"title": "Brute Force Algorithm in Cybersecurity and String Search",
"url": "https://www.baeldung.com/cs/brute-force-cybersecurity-string-search",
"type": "article"
}
]
},
"8abFKMfaV9H8F38I0DcMT": {
"title": "Knuth-Morris Pratt",
"description": "Knuth morris pratt is a string searching algorithm that uses a precomputed array to find the substring in a string. This array is known as the prefix function. The prefix function is the longest prefix that is also a suffix of a substring. The prefix function is used to skip the characters that are already matched. The algorithm is as follows:\n\n* Compute the prefix function of the substring.\n* Traverse through the string and substring simultaneously.\n* If the characters match, increment the index of both the string and substring.\n* If the characters don't match, increment the index of the string by the value of the prefix function at the index of the substring.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Knuth-Morris Pratt",
"url": "https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt",
"type": "course"
},
{
"title": "The Knuth-Morris-Pratt (KMP)Algorithm",
"url": "https://www.javatpoint.com/daa-knuth-morris-pratt-algorithm",
"type": "article"
},
{
"title": "9.1 Knuth-Morris-Pratt KMP String Matching Algorithm",
"url": "https://www.youtube.com/watch?v=V5-7GzOfADQ",
"type": "video"
}
]
},
"p6qub32jcaGloHXUDUrlG": {
"title": "Boyer-Moore",
"description": "Boyer Moore algorithm is a string searching algorithm that is used to find the index of a substring in a string. It is a very efficient algorithm that is used in many applications. It is used in text editors, compilers, and many other applications.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Boyer Moore Algorithm",
"url": "https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore",
"type": "course"
},
{
"title": "The Boyer-Moore Algorithm",
"url": "https://www.javatpoint.com/daa-boyer-moore-algorithm",
"type": "article"
}
]
},
"Km5LvcJpyntrW2iA8h5e3": {
"title": "Robin-Karp",
"description": "Rabin-Karp algorithm is a string searching algorithm that uses hashing to find any one of a set of pattern strings in a text. For strings of average length `n`, it performs in `O(n+m)` time with `O(m)` space, where `m` is the length of the pattern. It is often used in bioinformatics to search for DNA patterns.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Rabin Karps Algorithm",
"url": "https://www.coursera.org/lecture/data-structures/rabin-karps-algorithm-c0Qkw",
"type": "course"
},
{
"title": "Optimization: Precomputation",
"url": "https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation",
"type": "course"
},
{
"title": "Optimization: Implementation and Analysis",
"url": "https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis",
"type": "course"
},
{
"title": "Lecture 9: Table Doubling, Karp-Rabin",
"url": "https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9",
"type": "video"
},
{
"title": "Rolling Hashes, Amortized Analysis",
"url": "https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=33",
"type": "video"
}
]
},
"E9hf1ux1KKGHvvAShm67w": {
"title": "Substring Search",
"description": "Substring search is the problem of finding a substring in a string. This is a very common problem in computer science, and there are many algorithms for solving it.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Introduction to Substring Search",
"url": "https://www.coursera.org/lecture/algorithms-part2/introduction-to-substring-search-n3ZpG",
"type": "course"
},
{
"title": "What is the fastest substring search algorithm?",
"url": "https://stackoverflow.com/questions/3183582/what-is-the-fastest-substring-search-algorithm",
"type": "article"
},
{
"title": "Substring Search - Exercises",
"url": "https://algs4.cs.princeton.edu/53substring/",
"type": "article"
}
]
},
"-bawIWfrYuAxy8cP-AGFS": {
"title": "Floating Point Math",
"description": "Floating point numbers are numbers that have a decimal point in them. They are used to represent real numbers. For example, 3.14 is a floating point number. 3 is not a floating point number because it does not have a decimal point in it.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Representation of Floating Point Numbers - 1",
"url": "https://www.youtube.com/watch?v=ji3SfClm8TU",
"type": "video"
},
{
"title": "Why 0.1 + 0.2 != 0.3? | Floating Point Math",
"url": "https://www.youtube.com/watch?v=RIiq4tTt6rI",
"type": "video"
}
]
},
"vjMqqFsTxSjaiYxmliwLi": {
"title": "Endianess",
"description": "Endianess is the order in which bytes are stored in memory. The two most common types of endianess are big endian and little endian. Big endian stores the most significant byte first, while little endian stores the least significant byte first.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Big Endian vs Little Endian.mp4",
"url": "https://www.youtube.com/watch?v=JrNF0KRAlyo",
"type": "video"
},
{
"title": "Endianness Explained With an Egg - Computerphile",
"url": "https://www.youtube.com/watch?v=NcaiHcBvDR4",
"type": "video"
}
]
},
"U8AgY6I-62mN5Ohg9MsG6": {
"title": "Big Endian",
"description": "Big endian is the most common type of endianness. In this type, the most significant byte is stored at the lowest memory address. This means that the most significant byte is stored first and the least significant byte is stored last.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Lecture 22. Big Endian and Little Endian",
"url": "https://www.youtube.com/watch?v=T1C9Kj_78ek",
"type": "video"
}
]
},
"rD_5n5bjiNMVC0cPhEVyG": {
"title": "Little Endian",
"description": "Little Endian is a way of storing data in memory. It is the opposite of Big Endian. In Little Endian, the least significant byte is stored first. In Big Endian, the most significant byte is stored first.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Big Endian vs Little Endian.mp4",
"url": "https://www.youtube.com/watch?v=JrNF0KRAlyo",
"type": "video"
},
{
"title": "Endianness Explained With an Egg - Computerphile",
"url": "https://www.youtube.com/watch?v=NcaiHcBvDR4",
"type": "video"
}
]
},
"DMuMsEowpevTCALtziwTB": {
"title": "Common UML Diagrams",
"description": "UML is a standard way of visualizing a software system. It is a general-purpose, developmental, modeling language in the field of software engineering that is intended to provide a standard way to visualize the design of a system.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "UML Diagrams Full Course (Unified Modeling Language)",
"url": "https://www.youtube.com/watch?v=WnMQ8HlmeXc",
"type": "video"
}
]
},
"04hpfxI2x958tQI-0clsp": {
"title": "Unicode",
"description": "Unicode is a standard for encoding characters. It is a superset of ASCII, which means that ASCII is a subset of Unicode. Unicode is a 16-bit encoding, which means that it can encode 2^16 = 65536 characters. This is a lot more than ASCII, which can only encode 128 characters.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "How Unicode Works: What Every Developer Needs to Know About Strings and 🦄",
"url": "https://deliciousbrains.com/how-unicode-works/",
"type": "article"
},
{
"title": "Characters, Symbols and the Unicode Miracle - Computerphile",
"url": "https://www.youtube.com/watch?v=MijmeoH9LT4",
"type": "video"
}
]
},
"hmwsNp60alS43kJg4A_Og": {
"title": "ASCII",
"description": "ASCII is a character encoding standard for electronic communication. It was developed from telegraph code and uses 7 bits to represent 128 different characters. The first 32 characters are non-printable control characters used to control devices like printers and typewriters. The remaining 96 characters are printable and include the letters of the English alphabet, numbers, punctuation, and various symbols.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Must Know about Character Encodings",
"url": "https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/",
"type": "article"
},
{
"title": "Character Encoding",
"url": "https://cs.lmu.edu/~ray/notes/charenc/",
"type": "article"
}
]
},
"DtG9EJonWi4_2oQ4fWOKY": {
"title": "Character Encodings",
"description": "Character encodings are a way of representing characters as numbers. They are used to store and transmit text. The most common character encoding is ASCII, which is a 7-bit encoding. This means that each character is represented by a number between 0 and 127. The ASCII character set contains 128 characters, including letters, numbers, punctuation, and control characters. The ASCII character set is a subset of the Unicode character set, which is a 16-bit encoding. Unicode is a superset of ASCII, so ASCII characters can be represented by Unicode. Unicode is the most common character encoding used on the web.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Must Know about Character Encodings",
"url": "https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/",
"type": "article"
},
{
"title": "Character Encoding",
"url": "https://cs.lmu.edu/~ray/notes/charenc/",
"type": "article"
}
]
},
"FZ8znJSz8PvQlnEyRLXmQ": {
"title": "Class Diagrams",
"description": "Class Diagrams are used to model the static structure of a system. They are used to show the classes, their attributes, operations (or methods), and the relationships between objects.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "UML Class Diagram Tutorial",
"url": "https://www.youtube.com/watch?v=UI6lqHOVHic",
"type": "video"
},
{
"title": "UML Class Diagram Tutorial",
"url": "https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLfoY2ARMh0hC2FcJKP5voAKCpk6PZXSd5&index=2",
"type": "video"
}
]
},
"dVvYbrcaxHLpvtX6HbS7g": {
"title": "Usecase Diagrams",
"description": "Usecase diagrams are a type of diagram that are used to model the interactions between the **actors** and the **usecases** of the system.\n\nAn actor is a person or a system that interacts with the system. Actors are represented by a rectangle with the name of the actor written inside it.\n\nA usecase is a task that the system performs. Usecases are represented by an ellipse with the name of the usecase written inside it.\n\nA usecase diagram is a diagram that shows the actors and the usecases of the system. The diagram is represented by a rectangle that contains the name of the system inside it. The actors are represented by rectangles and the usecases are represented by ellipses.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "UML Use Case Diagram Tutorial",
"url": "https://www.lucidchart.com/pages/uml-use-case-diagram",
"type": "article"
},
{
"title": "What is Use Case Diagram?",
"url": "https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-use-case-diagram/",
"type": "article"
},
{
"title": "UML Use Case Diagram Tutorial",
"url": "https://www.youtube.com/watch?v=zid-MVo7M-E",
"type": "video"
}
]
},
"ptfRNiU0mC0Q5SLA_FWZu": {
"title": "Activity Diagrams",
"description": "Activity diagrams are used to model the flow of control in a system. They are used in conjunction with use case diagrams to model the behavior of the system for each use case. They are also used to model the behavior of a single class.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "UML Activity Diagram Tutorial",
"url": "https://www.lucidchart.com/pages/uml-activity-diagram",
"type": "article"
},
{
"title": "What is Activity Diagram?",
"url": "https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-activity-diagram/",
"type": "article"
}
]
},
"X0CKM9LaJUrgI5gIdqFvU": {
"title": "Statemachine Diagrams",
"description": "State machine diagrams are used to show the different states an object can be in at a given time. The object can be in one and only one state at a given time. State machine diagrams are similar to activity diagrams, but they are more focused on the flow of an object's state rather than the flow of the object itself.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "What is State Machine Diagram?",
"url": "https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-state-machine-diagram/",
"type": "article"
},
{
"title": "State Machine Diagram Tutorial",
"url": "https://www.lucidchart.com/pages/uml-state-machine-diagram",
"type": "article"
},
{
"title": "State Machine Diagram",
"url": "https://www.sciencedirect.com/topics/computer-science/state-machine-diagram",
"type": "article"
}
]
},
"gaUT5K2xS-WQMrIA0Bkb_": {
"title": "Sequence Diagrams",
"description": "Sequence diagrams are a way to show how objects or systems interact with each other over time.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "How to Make a UML Sequence Diagram",
"url": "https://www.youtube.com/watch?v=pCK6prSq8aw",
"type": "video"
},
{
"title": "Sequence Diagrams Tutorial",
"url": "https://www.youtube.com/watch?v=cxG-qWthxt4&list=PLfoY2ARMh0hBthB9VqsQzogSouTjzkMHe&index=2",
"type": "video"
}
]
},
"-De1hU2ONGwhQmUpsyrCO": {
"title": "Design Patterns",
"description": "Design patterns are solutions to common problems in software design. They are formalized best practices that the programmer can use to solve common problems when designing an application or system.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Design Patterns for Humans",
"url": "https://github.com/kamranahmedse/design-patterns-for-humans",
"type": "opensource"
},
{
"title": "Design Patterns - Wikipedia",
"url": "https://en.wikipedia.org/wiki/Software_design_pattern",
"type": "article"
},
{
"title": "Refactoring Guru - Design Patterns",
"url": "https://refactoring.guru/design-patterns/",
"type": "article"
},
{
"title": "Explore top posts about Design Patterns",
"url": "https://app.daily.dev/tags/design-patterns?ref=roadmapsh",
"type": "article"
}
]
},
"iPN9mSyFwYZER5HSkj6oL": {
"title": "GoF Design Patterns",
"description": "Gang of Four (GoF) design patterns are a set of 23 design patterns that were first described in the book \"Design Patterns: Elements of Reusable Object-Oriented Software\" by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. The book is commonly referred to as the \"Gang of Four book\".\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Design Patterns for Humans",
"url": "https://github.com/kamranahmedse/design-patterns-for-humans",
"type": "opensource"
}
]
},
"BGhJNtszbYJtKyhqr2jax": {
"title": "Architectural Patterns",
"description": "Architectural patterns are a high-level design pattern that focuses on the overall structure of the system. They are similar to design patterns, but they are more concerned with the structure of the system. They are used to solve problems that are common to many software systems.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "10 Common Software Architectural Patterns in a nutshell",
"url": "https://towardsdatascience.com/10-common-software-architectural-patterns-in-a-nutshell-a0b47a1e9013",
"type": "article"
},
{
"title": "Architectural Pattern - Wikipedia",
"url": "https://en.wikipedia.org/wiki/Architectural_pattern",
"type": "article"
}
]
},
"J7DKRklMtJ94Y-18Jo50r": {
"title": "Dependency Injection",
"description": "Dependency injection is a software design pattern that allows us to decouple the dependencies of a class from the class itself. This allows us to write more flexible and testable code.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Dependency Injection - StackOverflow",
"url": "https://stackoverflow.com/questions/130794/what-is-dependency-injection",
"type": "article"
},
{
"title": "Explore top posts about Dependency Injection",
"url": "https://app.daily.dev/tags/dependency-injection?ref=roadmapsh",
"type": "article"
},
{
"title": "What is Dependency Injection?",
"url": "https://www.youtube.com/watch?v=0yc2UANSDiw",
"type": "video"
}
]
},
"PpFQ0zmObZLvmBvqhTEMz": {
"title": "Null Object Pattern",
"description": "Null object pattern is a design pattern that is used to represent a null value with an object. It is a way to avoid null reference exceptions by providing a default object that does nothing. It is a way to provide a default behavior in case data is not available.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Design Patterns - Null Object Pattern",
"url": "https://www.tutorialspoint.com/design_pattern/null_object_pattern.htm",
"type": "article"
}
]
},
"_2Jddpz_cdwyeIgrg5qt_": {
"title": "Type Object Pattern",
"description": "Type object pattern is a creational design pattern that allows us to create a new object of a type without exposing the object creation logic to the client. It is used when we need to create a new object of a type, but we don't know which type we need to create until runtime. It is like a factory pattern, but instead of returning a new object of a type, it returns a new object of a type that is already created.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Type Object Pattern",
"url": "https://gameprogrammingpatterns.com/type-object.html",
"type": "article"
}
]
},
"cdNi0EYrQ5nsgNxFVnXL8": {
"title": "Basic Math Skills",
"description": "Math is a fundamental skill for computer science.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Computer Science 70, 001 - Spring 2015 - Discrete Mathematics and Probability Theory",
"url": "http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html",
"type": "article"
},
{
"title": "Discrete Mathematics By IIT Ropar NPTEL",
"url": "https://nptel.ac.in/courses/106/106/106106183/",
"type": "article"
},
{
"title": "Explore top posts about Math",
"url": "https://app.daily.dev/tags/math?ref=roadmapsh",
"type": "article"
},
{
"title": "Lec 1 | MIT 6.042J Mathematics for Computer Science, Fall 2010",
"url": "https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B",
"type": "video"
},
{
"title": "Integer Arithmetic, Karatsuba Multiplication",
"url": "https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb",
"type": "video"
},
{
"title": "The Chinese Remainder Theorem (used in cryptography)",
"url": "https://www.youtube.com/watch?v=ru7mWZJlRQg",
"type": "video"
},
{
"title": "Discrete Mathematics by Shai Simonson (19 videos)",
"url": "https://www.youtube.com/playlist?list=PLWX710qNZo_sNlSWRMVIh6kfTjolNaZ8t",
"type": "video"
},
{
"title": "MIT 6.042J - Probability Introduction",
"url": "https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B",
"type": "video"
},
{
"title": "MIT 6.042J - Conditional Probability",
"url": "https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B",
"type": "video"
},
{
"title": "MIT 6.042J - Independence",
"url": "https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B",
"type": "video"
},
{
"title": "MIT 6.042J - Random Variables",
"url": "https://www.youtube.com/watch?v=MOfhhFaQdjw&list=PLB7540DEDD482705B&index=21",
"type": "video"
},
{
"title": "MIT 6.042J - Expectation I",
"url": "https://www.youtube.com/watch?v=gGlMSe7uEkA&index=22&list=PLB7540DEDD482705B",
"type": "video"
},
{
"title": "MIT 6.042J - Expectation II",
"url": "https://www.youtube.com/watch?v=oI9fMUqgfxY&index=23&list=PLB7540DEDD482705B",
"type": "video"
},
{
"title": "MIT 6.042J - Large Deviations",
"url": "https://www.youtube.com/watch?v=q4mwO2qS2z4&index=24&list=PLB7540DEDD482705B",
"type": "video"
},
{
"title": "MIT 6.042J - Random Walks",
"url": "https://www.youtube.com/watch?v=56iFMY8QW2k&list=PLB7540DEDD482705B&index=25",
"type": "video"
}
]
},
"HZ3_xyphbjhBPwwQo_rHH": {
"title": "Probability",
"description": "Probability is the study of how likely an event is to occur. It is a measure of how certain we are that an event will happen.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Explore top posts about Statistics",
"url": "https://app.daily.dev/tags/statistics?ref=roadmapsh",
"type": "article"
},
{
"title": "MIT 6.042J - Probability Introduction",
"url": "https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B",
"type": "video"
},
{
"title": "MIT 6.042J - Conditional Probability",
"url": "https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B",
"type": "video"
},
{
"title": "MIT 6.042J - Independence",
"url": "https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B",
"type": "video"
},
{
"title": "MIT 6.042J - Random Variables",
"url": "https://www.youtube.com/watch?v=MOfhhFaQdjw&list=PLB7540DEDD482705B&index=21",
"type": "video"
},
{
"title": "MIT 6.042J - Expectation I",
"url": "https://www.youtube.com/watch?v=gGlMSe7uEkA&index=22&list=PLB7540DEDD482705B",
"type": "video"
},
{
"title": "MIT 6.042J - Expectation II",
"url": "https://www.youtube.com/watch?v=oI9fMUqgfxY&index=23&list=PLB7540DEDD482705B",
"type": "video"
},
{
"title": "MIT 6.042J - Large Deviations",
"url": "https://www.youtube.com/watch?v=q4mwO2qS2z4&index=24&list=PLB7540DEDD482705B",
"type": "video"
},
{
"title": "MIT 6.042J - Random Walks",
"url": "https://www.youtube.com/watch?v=56iFMY8QW2k&list=PLB7540DEDD482705B&index=25",
"type": "video"
}
]
},
"lWnAY0DgrUOmT6yqnxeBN": {
"title": "Combinatorics",
"description": "Combinatorics is the study of counting. It is a branch of mathematics that is used to solve problems in a variety of fields, including computer science, statistics, and physics. In computer science, combinatorics is used to solve problems related to counting the number of possible outcomes of a given problem. For example, if you are given a set of 10 objects, how many different ways can you arrange them? Or, if you are given a set of 10 objects, how many different ways can you choose 3 objects from that set? These are examples of combinatorial problems.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Probability and Combinatorics Topic",
"url": "https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic",
"type": "article"
},
{
"title": "Math Skills: How to find Factorial, Permutation and Combination",
"url": "https://www.youtube.com/watch?v=8RRo6Ti9d0U",
"type": "video"
},
{
"title": "Make School: Probability",
"url": "https://www.youtube.com/watch?v=sZkAAk9Wwa4",
"type": "video"
},
{
"title": "Make School: More Probability and Markov Chains",
"url": "https://www.youtube.com/watch?v=dNaJg-mLobQ",
"type": "video"
}
]
},
"YLCmZvoLkhOk9wlgYW2Ms": {
"title": "Complexity Classes",
"description": "In computer science, there exist some problems whose solutions are not yet found, the problems are divided into classes known as Complexity Classes. In complexity theory, a Complexity Class is a set of problems with related complexity. These classes help scientists to groups problems based on how much time and space they require to solve problems and verify the solutions. It is the branch of the theory of computation that deals with the resources required to solve a problem.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Trying to understand P vs NP vs NP Complete vs NP Hard",
"url": "https://softwareengineering.stackexchange.com/questions/308178/trying-to-understand-p-vs-np-vs-np-complete-vs-np-hard",
"type": "article"
},
{
"title": "Complexity: P, NP, NP-completeness, Reductions",
"url": "https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22",
"type": "video"
},
{
"title": "Complexity: Approximation Algorithms",
"url": "https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24",
"type": "video"
},
{
"title": "Complexity: Fixed-Parameter Algorithms",
"url": "https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp",
"type": "video"
},
{
"title": "Lecture 23: Computational Complexity",
"url": "https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=24",
"type": "video"
},
{
"title": "Greedy Algs. II & Intro to NP Completeness",
"url": "https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939",
"type": "video"
},
{
"title": "NP Completeness II & Reductions",
"url": "https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm",
"type": "video"
},
{
"title": "NP Completeness III",
"url": "https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm",
"type": "video"
},
{
"title": "NP Completeness IV",
"url": "https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 23 - NP-Completeness",
"url": "https://www.youtube.com/watch?v=ItHp5laE1VE&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=23",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 24 - Satisfiability",
"url": "https://www.youtube.com/watch?v=inaFJeCzGxU&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=24",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 25 - More NP-Completeness",
"url": "https://www.youtube.com/watch?v=B-bhKxjZLlc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=25",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 26 - NP-Completeness Challenge",
"url": "https://www.youtube.com/watch?v=_EzetTkG_Cc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=26",
"type": "video"
}
]
},
"3aM17dPKNi8tRJsW8lesI": {
"title": "P",
"description": "The P in the P class stands for Polynomial Time. It is the collection of decision problems(problems with a “yes” or “no” answer) that can be solved by a deterministic machine in polynomial time.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Trying to understand P vs NP vs NP Complete vs NP Hard",
"url": "https://softwareengineering.stackexchange.com/questions/308178/trying-to-understand-p-vs-np-vs-np-complete-vs-np-hard",
"type": "article"
},
{
"title": "Complexity: P, NP, NP-completeness, Reductions",
"url": "https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22",
"type": "video"
},
{
"title": "Complexity: Approximation Algorithms",
"url": "https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24",
"type": "video"
},
{
"title": "Complexity: Fixed-Parameter Algorithms",
"url": "https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp",
"type": "video"
},
{
"title": "Lecture 23: Computational Complexity",
"url": "https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=24",
"type": "video"
},
{
"title": "Greedy Algs. II & Intro to NP Completeness",
"url": "https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939",
"type": "video"
},
{
"title": "NP Completeness II & Reductions",
"url": "https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm",
"type": "video"
},
{
"title": "NP Completeness III",
"url": "https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm",
"type": "video"
},
{
"title": "NP Completeness IV",
"url": "https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 23 - NP-Completeness",
"url": "https://www.youtube.com/watch?v=ItHp5laE1VE&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=23",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 24 - Satisfiability",
"url": "https://www.youtube.com/watch?v=inaFJeCzGxU&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=24",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 25 - More NP-Completeness",
"url": "https://www.youtube.com/watch?v=B-bhKxjZLlc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=25",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 26 - NP-Completeness Challenge",
"url": "https://www.youtube.com/watch?v=_EzetTkG_Cc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=26",
"type": "video"
}
]
},
"ewXUHpOnjm8YrLhce1dAQ": {
"title": "NP",
"description": "The NP in NP class stands for Non-deterministic Polynomial Time. It is the collection of decision problems that can be solved by a non-deterministic machine in polynomial time.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Trying to understand P vs NP vs NP Complete vs NP Hard",
"url": "https://softwareengineering.stackexchange.com/questions/308178/trying-to-understand-p-vs-np-vs-np-complete-vs-np-hard",
"type": "article"
},
{
"title": "Complexity: P, NP, NP-completeness, Reductions",
"url": "https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22",
"type": "video"
},
{
"title": "Complexity: Approximation Algorithms",
"url": "https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24",
"type": "video"
},
{
"title": "Complexity: Fixed-Parameter Algorithms",
"url": "https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp",
"type": "video"
},
{
"title": "Lecture 23: Computational Complexity",
"url": "https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=24",
"type": "video"
},
{
"title": "Greedy Algs. II & Intro to NP Completeness",
"url": "https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939",
"type": "video"
},
{
"title": "NP Completeness II & Reductions",
"url": "https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm",
"type": "video"
},
{
"title": "NP Completeness III",
"url": "https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm",
"type": "video"
},
{
"title": "NP Completeness IV",
"url": "https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 23 - NP-Completeness",
"url": "https://www.youtube.com/watch?v=ItHp5laE1VE&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=23",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 24 - Satisfiability",
"url": "https://www.youtube.com/watch?v=inaFJeCzGxU&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=24",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 25 - More NP-Completeness",
"url": "https://www.youtube.com/watch?v=B-bhKxjZLlc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=25",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 26 - NP-Completeness Challenge",
"url": "https://www.youtube.com/watch?v=_EzetTkG_Cc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=26",
"type": "video"
}
]
},
"mJJ8DGUpBuHEJ7I6UTy1T": {
"title": "NP Hard",
"description": "An NP-hard problem is at least as hard as the hardest problem in NP and it is the class of the problems such that every problem in NP reduces to NP-hard.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Trying to understand P vs NP vs NP Complete vs NP Hard",
"url": "https://softwareengineering.stackexchange.com/questions/308178/trying-to-understand-p-vs-np-vs-np-complete-vs-np-hard",
"type": "article"
},
{
"title": "Complexity: P, NP, NP-completeness, Reductions",
"url": "https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22",
"type": "video"
},
{
"title": "Complexity: Approximation Algorithms",
"url": "https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24",
"type": "video"
},
{
"title": "Complexity: Fixed-Parameter Algorithms",
"url": "https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp",
"type": "video"
},
{
"title": "Lecture 23: Computational Complexity",
"url": "https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=24",
"type": "video"
},
{
"title": "Greedy Algs. II & Intro to NP Completeness",
"url": "https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939",
"type": "video"
},
{
"title": "NP Completeness II & Reductions",
"url": "https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm",
"type": "video"
},
{
"title": "NP Completeness III",
"url": "https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm",
"type": "video"
},
{
"title": "NP Completeness IV",
"url": "https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 23 - NP-Completeness",
"url": "https://www.youtube.com/watch?v=ItHp5laE1VE&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=23",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 24 - Satisfiability",
"url": "https://www.youtube.com/watch?v=inaFJeCzGxU&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=24",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 25 - More NP-Completeness",
"url": "https://www.youtube.com/watch?v=B-bhKxjZLlc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=25",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 26 - NP-Completeness Challenge",
"url": "https://www.youtube.com/watch?v=_EzetTkG_Cc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=26",
"type": "video"
}
]
},
"Lwkz7qozXRlVNA20zJbSw": {
"title": "NP Complete",
"description": "A problem is NP-complete if it is both NP and NP-hard. NP-complete problems are the hard problems in NP.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Trying to understand P vs NP vs NP Complete vs NP Hard",
"url": "https://softwareengineering.stackexchange.com/questions/308178/trying-to-understand-p-vs-np-vs-np-complete-vs-np-hard",
"type": "article"
},
{
"title": "Complexity: P, NP, NP-completeness, Reductions",
"url": "https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22",
"type": "video"
},
{
"title": "P vs. NP and the Computational Complexity Zoo",
"url": "https://www.youtube.com/watch?v=YX40hbAHx3s",
"type": "video"
},
{
"title": "Complexity: Approximation Algorithms",
"url": "https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24",
"type": "video"
},
{
"title": "Complexity: Fixed-Parameter Algorithms",
"url": "https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp",
"type": "video"
},
{
"title": "Lecture 23: Computational Complexity",
"url": "https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=24",
"type": "video"
},
{
"title": "Greedy Algs. II & Intro to NP Completeness",
"url": "https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939",
"type": "video"
},
{
"title": "NP Completeness II & Reductions",
"url": "https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm",
"type": "video"
},
{
"title": "NP Completeness III",
"url": "https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm",
"type": "video"
},
{
"title": "NP Completeness IV",
"url": "https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 23 - NP-Completeness",
"url": "https://www.youtube.com/watch?v=ItHp5laE1VE&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=23",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 24 - Satisfiability",
"url": "https://www.youtube.com/watch?v=inaFJeCzGxU&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=24",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 25 - More NP-Completeness",
"url": "https://www.youtube.com/watch?v=B-bhKxjZLlc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=25",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 26 - NP-Completeness Challenge",
"url": "https://www.youtube.com/watch?v=_EzetTkG_Cc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=26",
"type": "video"
}
]
},
"0btHNkzWL1w_-pUgU_k2y": {
"title": "P = NP",
"description": "The P = NP problem is one of the most famous problems in computer science. It asks if the problem of determining if a given input belongs to a certain class of problems is as hard as the problem of solving the given input. In other words, it asks if the problem of determining if a given input belongs to a certain class of problems is as hard as the problem of determining if a given input belongs to a certain class of problems. This problem is also known as the Halting Problem.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Whats P=NP?, and why is it such a famous question?",
"url": "https://stackoverflow.com/questions/111307/whats-p-np-and-why-is-it-such-a-famous-question",
"type": "article"
}
]
},
"ZG-hWjVoS3p9XfrtBL0sD": {
"title": "Travelling Salesman Problem",
"description": "The Travelling Salesman Problem (TSP) is a classic problem in computer science. It is a problem that is NP-complete, which means that it is a problem that is hard to solve. It is also a problem that is used to test the efficiency of algorithms.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "What is the Traveling Salesman Problem?",
"url": "https://www.youtube.com/watch?v=1pmBjIZ20pE",
"type": "video"
},
{
"title": "4.7 Traveling Salesperson Problem - Dynamic Programming",
"url": "https://www.youtube.com/watch?v=XaXsJJh-Q5Y",
"type": "video"
},
{
"title": "Traveling Salesman Problem | Dynamic Programming | Graph Theory",
"url": "https://www.youtube.com/watch?v=cY4HiiFHO1o",
"type": "video"
}
]
},
"yHeCRPhfAOWiggZeUHPU9": {
"title": "Knapsack Problem",
"description": "KnapSack Problem is a classic problem in computer science. It is a problem in which we are given a set of items, each with a weight and a value, and we need to determine which items to include in a collection so that the total weight is less than or equal to a given limit and the total value is as large as possible.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "How to solve the Knapsack Problem with dynamic programming",
"url": "https://medium.com/@fabianterh/how-to-solve-the-knapsack-problem-with-dynamic-programming-eb88c706d3cf",
"type": "article"
},
{
"title": "3.1 Knapsack Problem - Greedy Method",
"url": "https://www.youtube.com/watch?v=oTTzNMHM05I",
"type": "video"
}
]
},
"4QVVYjDODMWsjnrE-4UBs": {
"title": "Longest Path Problem",
"description": "Longest path problem is a problem that asks us to find the longest path in a graph.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Shortest/Longest path on a Directed Acyclic Graph (DAG) | Graph Theory",
"url": "https://www.youtube.com/watch?v=TXkDpqjDMHA",
"type": "video"
},
{
"title": "Longest Simple Path - Intro to Algorithms",
"url": "https://www.youtube.com/watch?v=lRH0tax5dFA",
"type": "video"
}
]
},
"4qUVacMEz3XFiL_dMre6P": {
"title": "Tries",
"description": "Tries are a data structure that can be used to store strings. The idea is to store the characters of the string in a tree-like structure, where each node of the tree represents a single character. We can use this structure to store strings in a way that allows us to quickly search for strings with a common prefix.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "0. Tries - Coursera",
"url": "https://www.coursera.org/learn/algorithms-part2/home/week/4",
"type": "course"
},
{
"title": "1. R Way Tries",
"url": "https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries",
"type": "course"
},
{
"title": "2. Ternary Search Tries",
"url": "https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries",
"type": "course"
},
{
"title": "3. Character Based Operations",
"url": "https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations",
"type": "course"
},
{
"title": "Tries - DataStructure Notes",
"url": "http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Tries",
"type": "article"
},
{
"title": "The Trie: A Neglected Data Structure",
"url": "https://www.toptal.com/java/the-trie-a-neglected-data-structure",
"type": "article"
},
{
"title": "TopCoder - Using Tries",
"url": "https://www.topcoder.com/thrive/articles/Using%20Tries",
"type": "article"
},
{
"title": "Stanford Lecture (real world use case)",
"url": "https://www.youtube.com/watch?v=TJ8SkcUSdbU",
"type": "video"
},
{
"title": "MIT, Advanced Data Structures, Strings (can get pretty obscure about halfway through)",
"url": "https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf",
"type": "video"
}
]
},
"7DF3UhefOSqqTuccH8c8X": {
"title": "Balanced Search Trees",
"description": "Balanced search trees are a type of data structure that allow for fast insertion, deletion, and lookup of data. They are a type of self-balancing binary search tree, which means that they are a binary tree that maintains the binary search tree property while also keeping the tree balanced. This means that the tree is always approximately balanced, which allows for fast insertion, deletion, and lookup of data.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Self-balancing binary search tree - Wikipedia",
"url": "https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree",
"type": "article"
},
{
"title": "Balanced Search Trees Operations and Applications 11 min",
"url": "https://www.youtube.com/watch?v=IbNZ-x1I2IM",
"type": "video"
},
{
"title": "Balanced binary search tree rotations",
"url": "https://www.youtube.com/watch?v=q4fnJZr8ztY",
"type": "video"
}
]
},
"OUistS7H7hQQxVV-lOg39": {
"title": "AVL Trees",
"description": "AVL trees are a type of self-balancing binary search tree. They are named after their inventors, Adelson-Velskii and Landis. AVL trees are the most popular self-balancing binary search tree.\n\nIn 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 balanced than red–black trees, leading to slower insertion and removal but faster retrieval. This makes it attractive for data structures that may be built once and loaded without reconstruction, such as language dictionaries (or program dictionaries, such as the opcodes of an assembler or interpreter)\n\nVisit the following resources to learn more:",
"links": [
{
"title": "AVL Trees",
"url": "https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees",
"type": "course"
},
{
"title": "AVL Tree Implementation",
"url": "https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation",
"type": "course"
},
{
"title": "Split And Merge",
"url": "https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge",
"type": "course"
},
{
"title": "MIT AVL Trees / AVL Sort",
"url": "https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6",
"type": "video"
}
]
},
"eOL0_SzxBn7_xhNcBDi2D": {
"title": "Red / Black Trees",
"description": "In computer science, a red–black tree is a kind of self-balancing binary search tree. Each node stores an extra bit representing \"color\", used to ensure that the tree remains balanced during insertions and deletions.\n\nThese are a translation of a 2-3 tree (see below).\n\nIn practice: Red–black trees offer worst-case guarantees for insertion time, deletion time, and search time. Not only does this make them valuable in time-sensitive applications such as real-time applications, but it makes them valuable building blocks in other data structures which provide worst-case guarantees; for example, many data structures used in computational geometry can be based on red–black trees, and the Completely Fair Scheduler used in current Linux kernels uses red–black trees. In the version 8 of Java, the Collection HashMap has been modified such that instead of using a LinkedList to store identical elements with poor hashcodes, a Red-Black tree is used.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Red-Black Tree - Wikipedia",
"url": "https://en.wikipedia.org/wiki/Red%E2%80%93black_tree",
"type": "article"
},
{
"title": "An Introduction To Binary Search And Red Black Tree",
"url": "https://www.topcoder.com/thrive/articles/An%20Introduction%20to%20Binary%20Search%20and%20Red-Black%20Trees",
"type": "article"
},
{
"title": "Red-Black Trees (playlist) in 30 minutes",
"url": "https://www.youtube.com/playlist?list=PL9xmBV_5YoZNqDI8qfOZgzbqahCUmUEin",
"type": "video"
},
{
"title": "Aduni - Algorithms - Lecture 4 (link jumps to starting point)",
"url": "https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871",
"type": "video"
},
{
"title": "Aduni - Algorithms - Lecture 5",
"url": "https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5",
"type": "video"
}
]
},
"3jiV9R82qxpqIGfpEq_wK": {
"title": "2 3 Search Trees",
"description": "In practice: 2-3 trees have faster inserts at the expense of slower searches (since height is more compared to AVL trees).\n\nYou would use 2-3 tree very rarely because its implementation involves different types of nodes. Instead, people use Red Black trees.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "23-Tree Intuition and Definition",
"url": "https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2",
"type": "video"
},
{
"title": "Binary View of 23-Tree",
"url": "https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6",
"type": "video"
},
{
"title": "2-3 Trees (student recitation)",
"url": "https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp",
"type": "video"
}
]
},
"IaPd_zuLbiOCwoSHQLoIG": {
"title": "2 3 4 Trees",
"description": "In practice: For every 2-4 tree, 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 important tool for understanding the logic behind red–black trees, and this is why many introductory algorithm texts introduce 2-4 trees just before red–black trees, even though 2-4 trees are not often used in practice.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "CS 61B Lecture 26: Balanced Search Trees",
"url": "https://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q",
"type": "article"
},
{
"title": "Bottom Up 234-Trees",
"url": "https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6",
"type": "video"
},
{
"title": "Top Down 234-Trees",
"url": "https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5",
"type": "video"
}
]
},
"UOYeM-hqIKCrB9hGez4Q_": {
"title": "K-ary / M-ary Tree",
"description": "Note: the N or K is the branching factor (max branches)\n\nBinary trees are a 2-ary tree, with branching factor = 2\n\n2-3 trees are 3-ary\n\nVisit the following resources to learn more:",
"links": [
{
"title": "K-Ary Tree",
"url": "https://en.wikipedia.org/wiki/K-ary_tree",
"type": "article"
}
]
},
"s0Pi6CemUUsmZSEu2j2gH": {
"title": "B-Tree",
"description": "Fun fact: it's a mystery, but the B could stand for Boeing, Balanced, or Bayer (co-inventor).\n\nIn Practice: B-Trees are widely used in databases. Most modern filesystems use B-trees (or Variants). In addition to its use in databases, the B-tree is also used in filesystems to allow quick random access to an arbitrary block in a particular file. The basic problem is turning the file block i address into a disk block (or perhaps to a cylinder-head-sector) address\n\nVisit the following resources to learn more:",
"links": [
{
"title": "B-Tree - Wikipedia",
"url": "https://en.wikipedia.org/wiki/B-tree",
"type": "article"
},
{
"title": "B-Tree Datastructure",
"url": "http://btechsmartclass.com/data_structures/b-trees.html",
"type": "article"
},
{
"title": "Introduction to B-Trees",
"url": "https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6",
"type": "video"
},
{
"title": "B-Tree Definition and Insertion",
"url": "https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6",
"type": "video"
},
{
"title": "B-Tree Deletion",
"url": "https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6",
"type": "video"
},
{
"title": "MIT 6.851 - Memory Hierarchy Models",
"url": "https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf",
"type": "video"
},
{
"title": "B-Trees (playlist) in 26 minutes",
"url": "https://www.youtube.com/playlist?list=PL9xmBV_5YoZNFPPv98DjTdD9X6UI9KMHz",
"type": "video"
}
]
},
"w-fvEiSJysywR3AOAB0ve": {
"title": "System Design",
"description": "System design is the process of defining the architecture, modules, interfaces, and data for a system to satisfy specified requirements. It is a very broad topic, and there are many ways to approach it.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "System Design Primer",
"url": "https://github.com/donnemartin/system-design-primer",
"type": "opensource"
},
{
"title": "System Design: The complete course",
"url": "https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo",
"type": "article"
},
{
"title": "Explore top posts about Career",
"url": "https://app.daily.dev/tags/career?ref=roadmapsh",
"type": "article"
},
{
"title": "System Design 101",
"url": "https://www.youtube.com/watch?v=Y-Gl4HEyeUQ",
"type": "video"
},
{
"title": "Scaling the Unscalable",
"url": "https://www.youtube.com/watch?v=a2rcgzludDU",
"type": "video"
},
{
"title": "System design interview: Scale to 1 million users",
"url": "https://www.youtube.com/watch?v=YkGHxOg9d3M",
"type": "video"
}
]
},
"-34WGppX6QC5fkCvfCghp": {
"title": "Horizontal vs Vertical Scaling",
"description": "Horizontal scaling is the process of adding more machines to your system. This is also known as scaling out. Vertical scaling is the process of adding more power to a single machine. This is also known as scaling up.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Scaling Horizontally vs. Scaling Vertically",
"url": "https://www.digitalocean.com/resources/article/horizontal-scaling-vs-vertical-scaling",
"type": "article"
},
{
"title": "System Design Basics: Horizontal vs. Vertical Scaling",
"url": "https://www.youtube.com/watch?v=xpDnVSmNFX0",
"type": "video"
},
{
"title": "Vertical vs. Horizontal Scaling for Database Servers",
"url": "https://www.youtube.com/watch?v=R99R-SNbo9g",
"type": "video"
}
]
},
"xDiS0HmrEoPjkQg9x2O3o": {
"title": "Load Balancing",
"description": "Load balancing is the process of distributing network or application traffic across a cluster of servers. Load balancing is used to improve responsiveness and reliability of applications, maximize throughput, minimize response time, and avoid overload of any single server.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Load Balancers 101",
"url": "https://www.youtube.com/watch?v=galcDRNd5Ow",
"type": "video"
},
{
"title": "What is Load Balancing?",
"url": "https://www.youtube.com/watch?v=gGLophKzJs8",
"type": "video"
}
]
},
"wAsZ-M5N9ERufQnBaXbAE": {
"title": "Clustering",
"description": "At a high level, a computer cluster is a group of two or more computers, or nodes, that run in parallel to achieve a common goal. This allows workloads consisting of a high number of individual, parallelizable tasks to be distributed among the nodes in the cluster. As a result, these tasks can leverage the combined memory and processing power of each computer to increase overall performance.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "System Design: Clustering",
"url": "https://dev.to/karanpratapsingh/system-design-clustering-3726",
"type": "article"
}
]
},
"4u5w9QCptLWuY9O7_UU8V": {
"title": "Caching",
"description": "Caching is a way of storing data in a temporary storage to make future requests faster. It is one of the most important tools in the computer science toolbox.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "System Design - Caching",
"url": "https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo#caching",
"type": "article"
},
{
"title": "What is Caching | System Design Basics",
"url": "https://www.youtube.com/watch?v=joifNgoXXFk",
"type": "video"
}
]
},
"r8V9bZpc98SrLvXc070bZ": {
"title": "CDN",
"description": "A CDN is a network of servers that are distributed geographically. The servers are connected to each other and to the internet. The servers are used to deliver content to users. The content is delivered to the user from the server that is closest to the user. This is done to reduce latency and improve the performance of the content delivery.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Content Delivery Network (CDN) - System Design",
"url": "https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo#content-delivery-network-cdn",
"type": "article"
},
{
"title": "Content Delivery Networks",
"url": "https://www.youtube.com/watch?v=6DXEPcXKQNY",
"type": "video"
}
]
},
"qLLJ_ehC8tSRfXsorYMQz": {
"title": "Proxy",
"description": "A proxy server is an intermediary piece of hardware/software sitting between the client and the backend server. It receives requests from clients and relays them to the origin servers. Typically, proxies are used to filter requests, log requests, or sometimes transform requests (by adding/removing headers, encrypting/decrypting, or compression).\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Proxy - System Design",
"url": "https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo#proxy",
"type": "article"
},
{
"title": "Proxy Servers",
"url": "https://roadmap.sh/guides/proxy-servers",
"type": "article"
}
]
},
"GZI8EsEqiMJX3fSbO_E-7": {
"title": "CAP Theorem",
"description": "The CAP theorem states that it is impossible for a distributed data store to simultaneously provide more than two out of Consistency, Availability and Partition Tolerance.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "CAP Theorem - Wikipedia",
"url": "https://en.wikipedia.org/wiki/CAP_theorem",
"type": "article"
},
{
"title": "What is CAP Theorem?",
"url": "https://www.youtube.com/watch?v=_RbsFXWRZ10",
"type": "video"
}
]
},
"LCPEzpyAuHY3ggN3nYrNN": {
"title": "Queues",
"description": "Messaging queues are a common way to decouple systems. They are used to decouple the producer of a message from the consumer of a message. This allows the producer to send a message and not have to wait for the consumer to process it. It also allows the consumer to process the message at their own pace.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Message Queues - System Design",
"url": "https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo#message-queues",
"type": "article"
},
{
"title": "What is a Message Queue?",
"url": "https://www.youtube.com/watch?v=xErwDaOc-Gs",
"type": "video"
},
{
"title": "What is a Message Queue and Where is it used?",
"url": "https://www.youtube.com/watch?v=oUJbuFMyBDk",
"type": "video"
}
]
},
"X1wv7xV69IEzepg8bF8oZ": {
"title": "Architectural Styles",
"description": "Architectural patterns are the fundamental organization of a system, defining how the system is composed and how its components interact. Architectural patterns are identified by their name, like client-server, peer-to-peer, and layered.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "List of software architecture styles and patterns",
"url": "https://en.wikipedia.org/wiki/List_of_software_architecture_styles_and_patterns",
"type": "article"
}
]
},
"Kvz3Sn7L8CxP5ZXO1hlcU": {
"title": "REST",
"description": "REST, or REpresentational State Transfer, is an architectural style for providing standards between computer systems on the web, making it easier for systems to communicate with each other.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "What is a REST API?",
"url": "https://www.redhat.com/en/topics/api/what-is-a-rest-api",
"type": "article"
},
{
"title": "Roy Fieldings dissertation chapter, Representational State Transfer (REST)",
"url": "https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm",
"type": "article"
},
{
"title": "Learn REST: A RESTful Tutorial",
"url": "https://restapitutorial.com/",
"type": "article"
},
{
"title": "Explore top posts about REST API",
"url": "https://app.daily.dev/tags/rest-api?ref=roadmapsh",
"type": "article"
}
]
},
"DeE_dZecLmKCjePovTfFS": {
"title": "GraphQL",
"description": "GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Apollo GraphQL Tutorials",
"url": "https://www.apollographql.com/tutorials/",
"type": "article"
},
{
"title": "Explore top posts about GraphQL",
"url": "https://app.daily.dev/tags/graphql?ref=roadmapsh",
"type": "article"
}
]
},
"M4vdwAbjLPrLjWUsG_P1I": {
"title": "gRPC",
"description": "gRPC is a platform agnostic serialization protocol that is used to communicate between services. Designed by Google in 2015, it is a modern alternative to REST APIs. It is a binary protocol that uses HTTP/2 as a transport layer. It is a high performance, open source, general-purpose RPC framework that puts mobile and HTTP/2 first.\n\nIt's main use case is for communication between two different languages within the same application. You can use Python to communicate with Go, or Java to communicate with C#.\n\ngRPC uses the protocol buffer language to define the structure of the data that is\n\nVisit the following resources to learn more:",
"links": [
{
"title": "gRPC Website",
"url": "https://grpc.io/",
"type": "article"
},
{
"title": "gRPC Introduction",
"url": "https://grpc.io/docs/what-is-grpc/introduction/",
"type": "article"
},
{
"title": "gRPC Core Concepts",
"url": "https://grpc.io/docs/what-is-grpc/core-concepts/",
"type": "article"
},
{
"title": "Explore top posts about gRPC",
"url": "https://app.daily.dev/tags/grpc?ref=roadmapsh",
"type": "article"
},
{
"title": "Stephane Maarek - gRPC Introduction",
"url": "https://youtu.be/XRXTsQwyZSU",
"type": "video"
}
]
},
"YMO9oD_sbzyDZPNU2xZwe": {
"title": "Cloud Design Patterns",
"description": "These design patterns are useful for building reliable, scalable, secure applications in the cloud.\n\nThe link below has cloud design patterns where each pattern describes the problem that the pattern addresses, considerations for applying the pattern, and an example based on Microsoft Azure. Most patterns include code samples or snippets that show how to implement the pattern on Azure. However, most patterns are relevant to any distributed system, whether hosted on Azure or other cloud platforms.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Cloud Design Patterns",
"url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/",
"type": "article"
},
{
"title": "Explore top posts about Cloud",
"url": "https://app.daily.dev/tags/cloud?ref=roadmapsh",
"type": "article"
}
]
},
"XeJi6TwpI5Uaszj00Uv_2": {
"title": "Long Polling",
"description": "Long polling is a technique used to implement server push functionality over HTTP. It is a method of opening a request on the server and keeping it open until an event occurs, at which point the server responds. This is in contrast to a regular HTTP request, where the server responds immediately with whatever data is available at the time.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Long polling",
"url": "https://javascript.info/long-polling",
"type": "article"
},
{
"title": "What are Long-Polling, Websockets, Server-Sent Events (SSE) and Comet?",
"url": "https://stackoverflow.com/questions/11077857/what-are-long-polling-websockets-server-sent-events-sse-and-comet",
"type": "article"
}
]
},
"gGmNJ8dK28iqrlQHPz6md": {
"title": "Short Polling",
"description": "In short polling, the client requests information from the server. The server processes the request. If data is available for the request, server responds to the request with the required information. However, if the server has no data available for the client, server returns an empty response. In both the situation, the connection will be closed after returning the response. Clients keep issuing new requests even after server sends the empty responses. This mechanism increases the network cost on the server.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "What are Long-Polling, Websockets, Server-Sent Events (SSE) and Comet?",
"url": "https://stackoverflow.com/questions/11077857/what-are-long-polling-websockets-server-sent-events-sse-and-comet",
"type": "article"
}
]
},
"bVjI14VismTHNCyA0mEBP": {
"title": "Web Sockets",
"description": "Web sockets are a bidirectional communication protocol between a client and a server. They are used for real-time applications like chat, multiplayer games, and live data updates. Web sockets are also used to establish a connection between a server and a client. This connection is then used to send data in both directions.\n\nVisit the following resources to learn more:",
"links": []
},
"JckRqZA8C6IqQLPpTCgf4": {
"title": "SSE",
"description": "Server-Sent Events is a server push technology enabling a client to receive automatic updates from a server via an HTTP connection, and describes how servers can initiate data transmission towards clients once an initial client connection has been established.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "What is Server-Sent Events (SSE) and how to implement it?",
"url": "https://medium.com/yemeksepeti-teknoloji/what-is-server-sent-events-sse-and-how-to-implement-it-904938bffd73",
"type": "article"
},
{
"title": "Using server-sent events",
"url": "https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events",
"type": "article"
},
{
"title": "Explore top posts about Cryptography",
"url": "https://app.daily.dev/tags/cryptography?ref=roadmapsh",
"type": "article"
}
]
},
"zvlTQ0A-My4QDrslp_lru": {
"title": "Databases",
"description": "A database is a collection of useful data of one or more related organizations structured in a way to make data an asset to the organization. A database management system is a software designed to assist in maintaining and extracting large collections of data in a timely fashion.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Oracle: What is a Database?",
"url": "https://www.oracle.com/database/what-is-database/",
"type": "article"
},
{
"title": "Prisma.io: What are Databases?",
"url": "https://www.prisma.io/dataguide/intro/what-are-databases",
"type": "article"
},
{
"title": "Explore top posts about Backend Development",
"url": "https://app.daily.dev/tags/backend?ref=roadmapsh",
"type": "article"
},
{
"title": "DBMS by Stanford",
"url": "https://www.youtube.com/watch?v=D-k-h0GuFmE&list=PL9ysvtVnryGpnIj9rcIqNDxakUn6v72Hm",
"type": "video"
}
]
},
"nprZscHdC_RdRIcGeGyVk": {
"title": "SQL vs NoSQL Databases",
"description": "SQL stands for Structured Query Language. It's used for relational databases. A SQL database is a collection of tables that stores a specific set of structured data. Some examples are PostgreSQL, MySQL, MariaDB etc.\n\nNoSQL stands for Not Only SQL. It's used for non-relational databases. A NoSQL database is a collection of collections that stores a specific set of unstructured data. Some examples are MongoDB, CouchDB, Redis etc.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Explore top posts about NoSQL",
"url": "https://app.daily.dev/tags/nosql?ref=roadmapsh",
"type": "article"
},
{
"title": "SQL vs. NoSQL: Whats the difference?",
"url": "https://www.youtube.com/watch?v=Q5aTUc7c4jg",
"type": "video"
},
{
"title": "Database Design Tips | Choosing the Best Database in a System Design Interview",
"url": "https://www.youtube.com/watch?v=cODCpXtPHbQ&t=22s",
"type": "video"
},
{
"title": "NoSQL vs SQL – Which Type of Database Should You Use?",
"url": "https://www.youtube.com/watch?v=FzlpwoeSrE0",
"type": "video"
}
]
},
"Rw7QjLC8hLtXSwmU_9kHC": {
"title": "Normalization / Denormalization",
"description": "Database normalization is a process used to organize a database into tables and columns. The idea is that a table should be about a specific topic and that only those columns which support that topic are included. This limits the number of duplicate data contained within your database. This makes the database more flexible by eliminating issues stemming from database modifications.\n\nDenormalization is the opposite of normalization. It is the process of adding redundant data to a database to improve read performance. This is done by adding duplicate data into multiple tables to avoid expensive joins. This is done at the expense of increased storage and decreased write performance.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Normalization vs. Denormalization | Events and Event Streaming",
"url": "https://www.youtube.com/watch?v=sDU94hraq8g",
"type": "video"
},
{
"title": "Normalization - 1NF, 2NF, 3NF and 4NF",
"url": "https://www.youtube.com/watch?v=UrYLYV7WSHM",
"type": "video"
}
]
},
"XnxxEmr2TyW2kOpB4gtR5": {
"title": "Entity-Relationship Model",
"description": "Entity relationship model is a high-level data model that describes the logical structure of a database. It is a graphical representation of entities and their relationships to each other, typically used in modeling the organization of data within databases or information systems.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Entity Relationship Diagram (ERD) Tutorial - Part 1",
"url": "https://www.youtube.com/watch?v=QpdhBUYk7Kk",
"type": "video"
},
{
"title": "Entity Relationship Diagram (ERD) Tutorial - Part 2",
"url": "https://www.youtube.com/watch?v=-CuY5ADwn24",
"type": "video"
}
]
},
"ii1vF74u3yrFNlw_21b3B": {
"title": "DDL",
"description": "DDL or Data Definition Language actually consists of the SQL commands that can be used to define the database schema. It simply deals with descriptions of the database schema and is used to create and modify the structure of database objects in the database. DDL is a set of SQL commands used to create, modify, and delete database structures but not data. These commands are normally not used by a general user, who should be accessing the database via an application.\n\nVisit the following resources to learn more:",
"links": []
},
"tcQSH-eAvJUZuePTDjAIb": {
"title": "DML",
"description": "The SQL commands that deals with the manipulation of data present in the database belong to DML or Data Manipulation Language and this includes most of the SQL statements. It is the component of the SQL statement that controls access to data and to the database. Basically, DCL statements are grouped with DML statements.\n\nVisit the following resources to learn more:",
"links": []
},
"05lkb3B86Won7Rkf-8DeD": {
"title": "DQL",
"description": "DQL statements are used for performing queries on the data within schema objects. The purpose of the DQL Command is to get some schema relation based on the query passed to it. We can define DQL as follows it is a component of SQL statement that allows getting data from the database and imposing order upon it. It includes the SELECT statement. This command allows getting the data out of the database to perform operations with it. When a SELECT is fired against a table or tables the result is compiled into a further temporary table, which is displayed or perhaps received by the program i.e. a front-end.\n\nVisit the following resources to learn more:",
"links": []
},
"4bUmfuP2qgcli8I2Vm9zh": {
"title": "DCL",
"description": "DCL includes commands such as GRANT and REVOKE which mainly deal with the rights, permissions, and other controls of the database system.\n\nVisit the following resources to learn more:",
"links": []
},
"_sm63rZNKoibVndeNgOpW": {
"title": "Locking",
"description": "Locks are used to prevent data from being modified by multiple processes at the same time. This is important because if two processes are modifying the same data at the same time, the data can become corrupted. Locks are used to prevent this from happening.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Locking in Databases and Isolation Mechanisms",
"url": "https://medium.com/inspiredbrilliance/what-are-database-locks-1aff9117c290",
"type": "article"
},
{
"title": "Understanding Database Lock Timeouts and Deadlocks",
"url": "https://www.dbta.com/Columns/DBA-Corner/Understanding-Database-Lock-Timeouts-and-Deadlocks-148659.aspx",
"type": "article"
},
{
"title": "Row-Level Database Locks Explained - (Read vs Exclusive)",
"url": "https://www.youtube.com/watch?v=nuBi2XbHH18",
"type": "video"
}
]
},
"W5B-v-BFcCRmuN0L1m6PI": {
"title": "ACID Model",
"description": "ACID are the four properties of any database system that help in making sure that we are able to perform the transactions in a reliable manner. It's an acronym which refers to the presence of four properties: atomicity, consistency, isolation and durability\n\nVisit the following resources to learn more:",
"links": [
{
"title": "What is ACID Compliant Database?",
"url": "https://retool.com/blog/whats-an-acid-compliant-database/",
"type": "article"
},
{
"title": "What is ACID Compliance?: Atomicity, Consistency, Isolation",
"url": "https://fauna.com/blog/what-is-acid-compliance-atomicity-consistency-isolation",
"type": "article"
},
{
"title": "ACID Explained: Atomic, Consistent, Isolated & Durable",
"url": "https://www.youtube.com/watch?v=yaQ5YMWkxq4",
"type": "video"
}
]
},
"q3nRhTYS5wg9tYnQe2sCF": {
"title": "BASE",
"description": "The rise in popularity of NoSQL databases provided a flexible and fluidity with ease to manipulate data and as a result, a new database model was designed, reflecting these properties. The acronym BASE is slightly more confusing than ACID but however, the words behind it suggest ways in which the BASE model is different and acronym BASE stands for:-\n\n* **B**asically **A**vailable\n* **S**oft state\n* **E**ventual consistency\n\nVisit the following resources to learn more:",
"links": []
},
"uqfeiQ9K--QkGNwks4kjk": {
"title": "CAP Theorem",
"description": "CAP is an acronym for Consistency, Availability, and Partition Tolerance. According to the CAP theorem, any distributed system can only guarantee two of the three properties at any time. You can't guarantee all three properties at once.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "What is CAP Theorem?",
"url": "https://www.bmc.com/blogs/cap-theorem/",
"type": "article"
},
{
"title": "CAP Theorem - Wikipedia",
"url": "https://en.wikipedia.org/wiki/CAP_theorem",
"type": "article"
},
{
"title": "An Illustrated Proof of the CAP Theorem",
"url": "https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/",
"type": "article"
},
{
"title": "CAP Theorem and its applications in NoSQL Databases",
"url": "https://www.ibm.com/uk-en/cloud/learn/cap-theorem",
"type": "article"
},
{
"title": "What is CAP Theorem?",
"url": "https://www.youtube.com/watch?v=_RbsFXWRZ10",
"type": "video"
}
]
},
"g6HeyLptaAYx9QBKuHQyM": {
"title": "PACELC",
"description": "The PACELC Theorem is an extension of the CAP Theorem. One of the questions that CAP Theorem wasn’t able to answer was “what happens when there is no Partition, What Logical Combination then a Distributed System have?“. So to answer this, In addition to Consistency, Availability, and Partition Tolerance it also includes Latency as one of the desired properties of a Distributed System. The acronym PACELC stands for Partitioned, Availability, Consistency Else Latency, Consistency.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "PACELC Theorem",
"url": "https://www.scylladb.com/glossary/pacelc-theorem/",
"type": "article"
}
]
},
"BEbsUA39kZ5itqCwD585f": {
"title": "Indexes",
"description": "An index is a data structure that you build and assign on top of an existing table that basically looks through your table and tries to analyze and summarize so that it can create shortcuts.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Database Indexing Explained",
"url": "https://www.youtube.com/watch?v=-qNSXK7s7_w",
"type": "video"
}
]
},
"lOj_ReWI1kQ3WajJZYOWU": {
"title": "Views",
"description": "Views in SQL are kind of virtual tables. A view also has rows and columns as they are in a real table in the database. We can create a view by selecting fields from one or more tables present in the database. A View can either have all the rows of a table or specific rows based on certain condition.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Database Views",
"url": "https://www.ibm.com/docs/en/eamfoc/7.6.0?topic=structure-views",
"type": "article"
},
{
"title": "SQL Views - Wikipedia",
"url": "https://en.wikipedia.org/wiki/View_(SQL)",
"type": "article"
}
]
},
"KhvYJtSCUBOpEZXjHpQde": {
"title": "Transactions",
"description": "In short, a database transaction is a sequence of multiple operations performed on a database, and all served as a single logical unit of work — taking place wholly or not at all. In other words, there's never a case where only half of the operations are performed and the results saved.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "What are Transactions?",
"url": "https://fauna.com/blog/database-transaction",
"type": "article"
}
]
},
"FjhZGhzJjYyDn0PShKmpX": {
"title": "Stored Procedures",
"description": "Stored Procedures are created to perform one or more DML operations on Database. It is nothing but the group of SQL statements that accepts some input in the form of parameters and performs some task and may or may not returns a value.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "SQL Stored Procedures",
"url": "https://www.programiz.com/sql/stored-procedures",
"type": "article"
}
]
},
"3r21avMlo0xFB9i7PHccX": {
"title": "Database Federation",
"description": "Federation (or functional partitioning) splits up databases by function. The federation architecture makes several distinct physical databases appear as one logical database to end-users.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Database Federation",
"url": "https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo#database-federation",
"type": "article"
},
{
"title": "Explore top posts about Database",
"url": "https://app.daily.dev/tags/database?ref=roadmapsh",
"type": "article"
}
]
},
"WUEmEtlszbISSIWDKpvg6": {
"title": "Replication",
"description": "Replication is a process that involves sharing information to ensure consistency between redundant resources such as multiple databases, to improve reliability, fault-tolerance, or accessibility.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Database Replication",
"url": "https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo#database-replication",
"type": "article"
},
{
"title": "Replication (computing)",
"url": "https://en.wikipedia.org/wiki/Replication_(computing)",
"type": "article"
}
]
},
"3K65efPag2076dy-MeTg4": {
"title": "Sharding",
"description": "Database sharding is a method of distributing data across multiple machines. It is a horizontal scaling technique, as opposed to vertical scaling, which is scaling by adding more power to a single machine. Sharding is a common way to scale a database.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Sharding",
"url": "https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo#sharding",
"type": "article"
},
{
"title": "Explore top posts about Backend Development",
"url": "https://app.daily.dev/tags/backend?ref=roadmapsh",
"type": "article"
},
{
"title": "Sharding & Database Partitioning | System Design Basics",
"url": "https://www.youtube.com/watch?v=RynPj8C0BXA",
"type": "video"
},
{
"title": "Database Sharding - Watch",
"url": "https://www.youtube.com/watch?v=hdxdhCpgYo8",
"type": "video"
},
{
"title": "Database Sharding in 5 minutes",
"url": "https://www.youtube.com/watch?v=kSH4bt8ypOQ",
"type": "video"
}
]
},
"zG5t3HqbZnh9CGRqp1Sb-": {
"title": "Networking",
"description": "Networking is the process of connecting two or more computing devices together for the purpose of sharing data. In a data network, shared data may be as simple as a printer or as complex as a global financial transaction.\n\nIf you have networking experience or want to be a reliability engineer or operations engineer, expect questions from these topics. Otherwise, this is just good to know.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Khan Academy - Networking",
"url": "https://www.khanacademy.org/computing/code-org/computers-and-the-internet",
"type": "article"
},
{
"title": "Explore top posts about Networking",
"url": "https://app.daily.dev/tags/networking?ref=roadmapsh",
"type": "article"
},
{
"title": "Computer Networking Course - Network Engineering",
"url": "https://www.youtube.com/watch?v=qiQR5rTSshw",
"type": "video"
},
{
"title": "Networking Video Series (21 videos)",
"url": "https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j",
"type": "video"
}
]
},
"pZ5x_zDYGzW9VxYycyXtN": {
"title": "OSI Model",
"description": "The OSI and TCP/IP model is used to help the developer to design their system for interoperability. The OSI model has 7 layers while the TCP/IP model has a more summarized form of the OSI model only consisting 4 layers. This is important if you're are trying to design a system to communicate with other systems.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Cloudflare - What is the OSI model",
"url": "https://www.cloudflare.com/learning/ddos/glossary/open-systems-interconnection-model-osi/",
"type": "article"
},
{
"title": "TCP/IP and the OSI Model Explained!",
"url": "https://www.youtube.com/watch?v=e5DEVa9eSN0",
"type": "video"
}
]
},
"Fed5y1D95WPpqoVg7kmob": {
"title": "TCP/IP Model",
"description": "The OSI and TCP/IP model is used to help the developer to design their system for interoperability. The OSI model has 7 layers while the TCP/IP model has a more summarized form of the OSI model only consisting 4 layers. This is important if you're are trying to design a system to communicate with other systems.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Cloudflare - What is the OSI model",
"url": "https://www.cloudflare.com/learning/ddos/glossary/open-systems-interconnection-model-osi/",
"type": "article"
},
{
"title": "TCP/IP and the OSI Model Explained!",
"url": "https://www.youtube.com/watch?v=e5DEVa9eSN0",
"type": "video"
}
]
},
"fYjoXB4rnkM5gg46sqVz5": {
"title": "DNS",
"description": "The Domain Name System (DNS) is the phonebook of the Internet. Humans access information online through domain names, like [nytimes.com](http://nytimes.com) or [espn.com](http://espn.com). Web browsers interact through Internet Protocol (IP) addresses. DNS translates domain names to IP addresses so browsers can load Internet resources.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "What is DNS?",
"url": "https://www.cloudflare.com/en-gb/learning/dns/what-is-dns/",
"type": "article"
},
{
"title": "How DNS works (comic)",
"url": "https://howdns.works/",
"type": "article"
},
{
"title": "Explore top posts about DNS",
"url": "https://app.daily.dev/tags/dns?ref=roadmapsh",
"type": "article"
},
{
"title": "DNS and How does it Work?",
"url": "https://www.youtube.com/watch?v=Wj0od2ag5sk",
"type": "video"
},
{
"title": "DNS Records",
"url": "https://www.youtube.com/watch?v=7lxgpKh_fRY",
"type": "video"
},
{
"title": "Complete DNS mini-series",
"url": "https://www.youtube.com/watch?v=zEmUuNFBgN8&list=PLTk5ZYSbd9MhMmOiPhfRJNW7bhxHo4q-K",
"type": "video"
}
]
},
"2tUwl-br-SRuwADSzmQag": {
"title": "HTTP",
"description": "HTTP is the `TCP/IP` based application layer communication protocol which standardizes how the client and server communicate with each other. It defines how the content is requested and transmitted across the internet.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Everything you need to know about HTTP",
"url": "https://cs.fyi/guide/http-in-depth",
"type": "article"
},
{
"title": "What is HTTP?",
"url": "https://www.cloudflare.com/en-gb/learning/ddos/glossary/hypertext-transfer-protocol-http/",
"type": "article"
},
{
"title": "An overview of HTTP",
"url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview",
"type": "article"
},
{
"title": "HTTP/3 From A To Z: Core Concepts",
"url": "https://www.smashingmagazine.com/2021/08/http3-core-concepts-part1/",
"type": "article"
},
{
"title": "HTTP/1 to HTTP/2 to HTTP/3",
"url": "https://www.youtube.com/watch?v=a-sBfyiXysI",
"type": "video"
},
{
"title": "HTTP Crash Course & Exploration",
"url": "https://www.youtube.com/watch?v=iYM2zFP3Zn0",
"type": "video"
}
]
},
"3pu2bGhoCLFIs6kNanwtz": {
"title": "TLS & HTTPS",
"description": "TLS (Transport Layer Security) is a cryptographic protocol that provides privacy and data integrity between two communicating applications. It is widely used to secure HTTP, although it can be used with any protocol. TLS is often used in combination with HTTPS, which is HTTP over TLS.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "SSL and HTTPS",
"url": "https://www.youtube.com/watch?v=S2iBR2ZlZf0",
"type": "video"
},
{
"title": "SSL/TLS - Cristina Formaini",
"url": "https://www.youtube.com/watch?v=Rp3iZUvXWlM",
"type": "video"
}
]
},
"u-c-UFegRb7xqsmvj9gVb": {
"title": "Sockets",
"description": "A socket is an interface for network communication. It is a way for two programs to communicate with each other over a network. It is a way for a client to send a request to a server and for the server to send a response back to the client.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "A Beginners Guide to WebSockets",
"url": "https://www.youtube.com/watch?v=8ARodQ4Wlf4",
"type": "video"
},
{
"title": "WebSockets in 100 Seconds & Beyond with Socket.io",
"url": "https://www.youtube.com/watch?v=1BfCnjr_Vjg",
"type": "video"
}
]
},
"JnJbJtsqKbVETY2vdLqCO": {
"title": "Security",
"description": "Web security refers to the protective measures taken by the developers to protect the web applications from threats that could affect the business.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "OWASP Web Application Security Testing Checklist",
"url": "https://github.com/0xRadi/OWASP-Web-Checklist",
"type": "opensource"
},
{
"title": "Why HTTPS Matters",
"url": "https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https",
"type": "article"
},
{
"title": "Wikipedia - OWASP",
"url": "https://en.wikipedia.org/wiki/OWASP",
"type": "article"
},
{
"title": "OWASP Top 10 Security Risks",
"url": "https://sucuri.net/guides/owasp-top-10-security-vulnerabilities-2021/",
"type": "article"
},
{
"title": "OWASP Cheatsheets",
"url": "https://cheatsheetseries.owasp.org/cheatsheets/AJAX_Security_Cheat_Sheet.html",
"type": "article"
},
{
"title": "Content Security Policy (CSP)",
"url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP",
"type": "article"
},
{
"title": "Explore top posts about Security",
"url": "https://app.daily.dev/tags/security?ref=roadmapsh",
"type": "article"
},
{
"title": "MIT 6.858 Computer Systems Security, Fall 2014",
"url": "https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh",
"type": "video"
}
]
},
"bDZ34BPm3lX06ERSE10cY": {
"title": "Public Key Cryptography",
"description": "Public-key cryptography, or asymmetric cryptography, is the field of cryptographic systems that use pairs of related keys. Each key pair consists of a public key and a corresponding private key. Key pairs are generated with cryptographic algorithms based on mathematical problems termed one-way functions.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Public-key cryptography - Wikipedia",
"url": "https://en.wikipedia.org/wiki/Public-key_cryptography",
"type": "article"
},
{
"title": "Explore top posts about Cryptography",
"url": "https://app.daily.dev/tags/cryptography?ref=roadmapsh",
"type": "article"
},
{
"title": "Public Key Cryptography - Computerphile",
"url": "https://www.youtube.com/watch?v=GSIDS_lvRv4",
"type": "video"
},
{
"title": "Public Key Cryptography: RSA Encryption Algorithm",
"url": "https://www.youtube.com/watch?v=wXB-V_Keiu8",
"type": "video"
}
]
},
"7r7o8pYhFHVAJIv0wNT6X": {
"title": "Hashing / Encryption / Encoding",
"description": "Hashing is a one-way function that takes an input and produces a fixed-length output. The output is called a hash. The hash is a unique representation of the input. The hash is deterministic, meaning that the same input will always produce the same hash. The hash is irreversible, meaning that it is impossible to go from the hash back to the original input. The hash is not collision-resistant, meaning that it is possible to find two different inputs that produce the same hash.\n\nEncryption is a two-way function that takes an input and produces an output. The output is called ciphertext. The ciphertext is a unique representation of the input. The ciphertext is deterministic, meaning that the same input will always produce the same ciphertext. The ciphertext is reversible, meaning that it is possible to go from the ciphertext back to the original input. The ciphertext is collision-resistant, meaning that it is impossible to find two different inputs that produce the same ciphertext.\n\nEncoding is a two-way function that takes an input and produces an output. The output is called encoded text. The encoded text is a unique representation of the input. The encoded text is deterministic, meaning that the same input will always produce the same encoded text. The encoded text is reversible, meaning that it is possible to go from the encoded text back to the original input. The encoded text is collision-resistant, meaning that it is impossible to find two different inputs that produce the same encoded text.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Explore top posts about Encryption",
"url": "https://app.daily.dev/tags/encryption?ref=roadmapsh",
"type": "article"
},
{
"title": "Encoding, Encryption and Hashing -- Whats the Difference?",
"url": "https://www.youtube.com/watch?v=-bAnBzvMLig",
"type": "video"
}
]
},
"EX_e4B6G07zTb4JjJ7482": {
"title": "Hashing Algorithms",
"description": "Hashing algorithms are used to generate a unique value for a given input. This value is called a hash. Hashing algorithms are used to verify the integrity of data, to store passwords, and to generate unique identifiers for data.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Explore top posts about Algorithms",
"url": "https://app.daily.dev/tags/algorithms?ref=roadmapsh",
"type": "article"
},
{
"title": "Hashing Algorithms and Security - Computerphile",
"url": "https://www.youtube.com/watch?v=b4b8ktEV4Bg",
"type": "video"
},
{
"title": "Top Hashing Algorithms In Cryptography | MD5 and SHA 256 Algorithms Expalined | Simplilearn",
"url": "https://www.youtube.com/watch?v=Plp4F3ZfC7A",
"type": "video"
},
{
"title": "SHA: Secure Hashing Algorithm - Computerphile",
"url": "https://www.youtube.com/watch?v=DMtFhACPnTY",
"type": "video"
}
]
},
"3rPSp135TdSCyvXzEzn4p": {
"title": "OWASP Top 10",
"description": "OWASP or Open Web Application Security Project is an online community that produces freely-available articles, methodologies, documentation, tools, and technologies in the field of web application security.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "OWASP Web Application Security Testing Checklist",
"url": "https://github.com/0xRadi/OWASP-Web-Checklist",
"type": "opensource"
},
{
"title": "Wikipedia - OWASP",
"url": "https://en.wikipedia.org/wiki/OWASP",
"type": "article"
},
{
"title": "OWASP Top 10 Security Risks",
"url": "https://sucuri.net/guides/owasp-top-10-security-vulnerabilities-2021/",
"type": "article"
},
{
"title": "OWASP Cheatsheets",
"url": "https://cheatsheetseries.owasp.org/cheatsheets/AJAX_Security_Cheat_Sheet.html",
"type": "article"
}
]
},
"-emdKpD5uRNuvem5rbFXJ": {
"title": "How Computers Work",
"description": "Computers are everywhere. They are in our phones, our cars, our homes, and even in our pockets. But how do they actually work? How do they take in information, and how do they output information?\n\nVisit the following resources to learn more:",
"links": [
{
"title": "How CPU executes a program",
"url": "https://www.youtube.com/watch?v=XM4lGflQFvA",
"type": "video"
},
{
"title": "How computers calculate - ALU",
"url": "https://youtu.be/1I5ZMmrOfnA",
"type": "video"
},
{
"title": "Registers and RAM",
"url": "https://youtu.be/fpnE6UAfbtU",
"type": "video"
},
{
"title": "The Central Processing Unit (CPU)",
"url": "https://youtu.be/FZGugFqdr60",
"type": "video"
},
{
"title": "Instructions and Programs",
"url": "https://youtu.be/zltgXvg6r3k",
"type": "video"
}
]
},
"1eglba39q426Nh0E0qcdj": {
"title": "How CPU Executes Programs",
"description": "Visit the following resources to learn more:",
"links": [
{
"title": "Explore top posts about Computing",
"url": "https://app.daily.dev/tags/computing?ref=roadmapsh",
"type": "article"
},
{
"title": "How CPU executes a program",
"url": "https://www.youtube.com/watch?v=XM4lGflQFvA",
"type": "video"
}
]
},
"GDLKJkKgB-i7n0YcV2NDa": {
"title": "How Computers Calculate",
"description": "Visit the following resources to learn more:",
"links": [
{
"title": "How computers calculate - ALU",
"url": "https://youtu.be/1I5ZMmrOfnA",
"type": "video"
}
]
},
"U3379F4AO1KSmGtVmPr27": {
"title": "Registers and RAM",
"description": "**_Registers_** are the smallest data-holding elements built into the processor itself. Registers are the memory locations that are directly accessible by the processor. The registers hold the instruction or operands currently accessed by the CPU.\n\nRegisters are the high-speed accessible storage elements. The processor accesses the registers within one CPU clock cycle. The processor can decode the instructions and perform operations on the register contents at more than one operation per CPU clock cycle.\n\n**_Memory_** is a hardware device that stores computer programs, instructions, and data. The memory that is internal to the processor is primary memory (RAM), and the memory that is external to the processor is secondary (**Hard Drive**). Primary memory or RAM is a volatile memory, meaning the primary memory data exist when the system's power is on, and the data vanishes as the system is switched off. The primary memory contains the data required by the currently executing program in the CPU. If the data required by the processor is not in primary memory, then the data is transferred from secondary storage to primary memory, and then it is fetched by the processor.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Registers and RAM",
"url": "https://youtu.be/fpnE6UAfbtU",
"type": "video"
}
]
},
"AxiGqbteK7ZSXEUt_zckH": {
"title": "Instructions and Programs",
"description": "Visit the following resources to learn more:",
"links": [
{
"title": "Instructions and Programs",
"url": "https://youtu.be/zltgXvg6r3k",
"type": "video"
}
]
},
"DjTQjMbika4_yTzrBpcmB": {
"title": "CPU Cache",
"description": "Visit the following resources to learn more:",
"links": [
{
"title": "Explore top posts about Computing",
"url": "https://app.daily.dev/tags/computing?ref=roadmapsh",
"type": "article"
},
{
"title": "MIT 6.004 L15: The Memory Hierarchy",
"url": "https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24",
"type": "video"
},
{
"title": "MIT 6.004 L16: Cache Issues",
"url": "https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-",
"type": "video"
}
]
},
"ETEUA7jaEGyOEX8tAVNWs": {
"title": "Processes and Threads",
"description": "Processes and threads are the basic building blocks of a computer program. They are the smallest units of execution in a program. A process is an instance of a program that is being executed. A thread is a sequence of instructions within a process that can be executed independently of other code.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Whats the difference between Process and a Thread?",
"url": "https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread",
"type": "article"
},
{
"title": "Operating Systems and System Programming",
"url": "https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c",
"type": "article"
},
{
"title": "25 hour Operating Systems Course - freecodecamp",
"url": "https://youtu.be/yK1uBHPdp30?si=gGPdK7cM4KlP6Qq0",
"type": "video"
}
]
},
"RbdT5MOE4L-E7PPWKRITX": {
"title": "Process Forking",
"description": "Process forking is a way to create a new process from an existing process. The new process is a copy of the existing process. The new process is called a child process and the existing process is called a parent process.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Understanding fork() system call for new process creation",
"url": "https://www.youtube.com/watch?v=PwxTbksJ2fo",
"type": "video"
},
{
"title": "fork() and exec() System Calls",
"url": "https://www.youtube.com/watch?v=IFEFVXvjiHY",
"type": "video"
},
{
"title": "The fork() function in C",
"url": "https://www.youtube.com/watch?v=cex9XrZCU14",
"type": "video"
}
]
},
"jVsZFTzyrYEDyR8LiBQL0": {
"title": "Memory Management",
"description": "Memory management is the process of allocating and deallocating memory. It is a very important part of any programming language.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "MIT 6.004 L15: The Memory Hierarchy",
"url": "https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24",
"type": "video"
},
{
"title": "MIT 6.004 L16: Cache Issues",
"url": "https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-",
"type": "video"
}
]
},
"O6-vG3FuoYet4D0hbiyrv": {
"title": "Lock / Mutex / Semaphore",
"description": "A lock allows only one thread to enter the part that's locked and the lock is not shared with any other processes.\n\nA mutex is the same as a lock but it can be system wide (shared by multiple processes).\n\nA semaphore does the same as a mutex but allows x number of threads to enter, this can be used for example to limit the number of cpu, io or ram intensive tasks running at the same time.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "What is the difference between lock, mutex and semaphore?",
"url": "https://stackoverflow.com/questions/2332765/what-is-the-difference-between-lock-mutex-and-semaphore",
"type": "article"
},
{
"title": "What is a Semaphore",
"url": "https://stackoverflow.com/questions/34519/what-is-a-semaphore/40238#40238",
"type": "article"
}
]
},
"xUo5Ox_HTgGyeQMDIkVyK": {
"title": "Concurrency in Multiple Cores",
"description": "Visit the following resources to learn more:",
"links": [
{
"title": "What is the difference between multicore and concurrent programming?",
"url": "https://stackoverflow.com/questions/5372861/what-is-the-difference-between-multicore-and-concurrent-programming",
"type": "article"
},
{
"title": "Concurrency in Multicore systems",
"url": "https://cs.stackexchange.com/questions/140793/concurrency-in-multiple-core",
"type": "article"
}
]
},
"Ge2nagN86ofa2y-yYR1lv": {
"title": "Scheduling Algorithms",
"description": "CPU Scheduling is the process of selecting a process from the ready queue and allocating the CPU to it. The selection of a process is based on a particular scheduling algorithm. The scheduling algorithm is chosen depending on the type of system and the requirements of the processes.\n\nHere is the list of some of the most commonly used scheduling algorithms:\n\n* **First Come First Serve (FCFS):** The process that arrives first is allocated the CPU first. It is a non-preemptive algorithm.\n* **Shortest Job First (SJF):** The process with the smallest execution time is allocated the CPU first. It is a non-preemptive algorithm.\n* **Shortest Remaining Time First (SRTF):** The process with the smallest remaining execution time is allocated the CPU first. It is a preemptive algorithm.\n* **Round Robin (RR):** The process is allocated the CPU for a fixed time slice. The time slice is usually 10 milliseconds. It is a preemptive algorithm.\n* **Priority Scheduling:** The process with the highest priority is allocated the CPU first. It is a preemptive algorithm.\n* **Multi-level Queue Scheduling:** The processes are divided into different queues based on their priority. The process with the highest priority is allocated the CPU first. It is a preemptive algorithm.\n* **Multi-level Feedback Queue Scheduling:** The processes are divided into different queues based on their priority. The process with the highest priority is allocated the CPU first. If a process is preempted, it is moved to the next queue. It is a preemptive algorithm.\n* **Highest Response Ratio Next(HRRN):** CPU is allotted to the next process which has the highest response ratio and not to the process having less burst time. It is a Non-Preemptive algorithm.\n* **Lottery Scheduling:** The process is allocated the CPU based on a lottery system. It is a preemptive algorithm.\n\nVisit the following resources to learn more :",
"links": [
{
"title": "CPU Scheduling in Operating Systems - geeksforgeeks",
"url": "https://www.geeksforgeeks.org/cpu-scheduling-in-operating-systems/",
"type": "article"
},
{
"title": "Lottery Scheduling for Operating Systems - geeksforgeeks",
"url": "https://www.geeksforgeeks.org/lottery-process-scheduling-in-operating-system/",
"type": "article"
},
{
"title": "Program for Round Robin Scheduling for the same Arrival time - geeksforgeeks",
"url": "https://www.geeksforgeeks.org/program-for-round-robin-scheduling-for-the-same-arrival-time/",
"type": "article"
},
{
"title": "Introduction to CPU Scheduling",
"url": "https://youtu.be/EWkQl0n0w5M?si=Lb-PxN_t-rDfn4JL",
"type": "video"
}
]
},
"cpQvB0qMDL3-NWret7oeA": {
"title": "CPU Interrupts",
"description": "CPU Interrupts are a way for the CPU to communicate with the rest of the computer. They are a way for the CPU to tell the rest of the computer that it needs to do something. For example, if the CPU is running a program and it needs to read from the keyboard, it will send an interrupt to the keyboard to tell it to send the data to the CPU. The CPU will then wait for the keyboard to send the data and then continue running the program.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Explore top posts about Computing",
"url": "https://app.daily.dev/tags/computing?ref=roadmapsh",
"type": "article"
},
{
"title": "Video on Interrupts",
"url": "https://youtu.be/iKlAWIKEyuw",
"type": "video"
}
]
},
"IEX6v_MYpE5Ylk_28K2ZU": {
"title": "Processes vs Threads",
"description": "Processes and threads are the basic building blocks of a computer program. They are the smallest units of execution in a program. A process is an instance of a program that is being executed. A thread is a sequence of instructions within a process that can be executed independently of other code.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Whats the difference between Process and a Thread?",
"url": "https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread",
"type": "article"
},
{
"title": "Operating Systems and System Programming",
"url": "https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c",
"type": "article"
}
]
},
"C1eNsPjiQo8INbvL2Lt7L": {
"title": "K-D Trees",
"description": "K-D Trees are a data structure that allow for fast nearest neighbor search in high dimensional spaces. They are a generalization of binary search trees, and are used in a variety of applications, including computer vision and computational geometry.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "K-D Tree Algorithm",
"url": "https://www.youtube.com/watch?v=Y4ZgLlDfKDg",
"type": "video"
},
{
"title": "K-d Trees - Computerphile",
"url": "https://www.youtube.com/watch?v=BK5x7IUTIyU",
"type": "video"
}
]
},
"K96ggeWqd5OwoNnkL04pc": {
"title": "Skip Lists",
"description": "Skip lists are a data structure that allows you to perform operations on a sorted list in O(log n) time. Skip lists are a probabilistic data structure, which means that the probability of a certain operation taking a certain amount of time is a certain value. In the case of skip lists, the probability of an operation taking O(log n) time is 1.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Skip Lists - Wikipedia",
"url": "https://en.wikipedia.org/wiki/Skip_list",
"type": "article"
},
{
"title": "Randomization: Skip Lists",
"url": "https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp",
"type": "video"
}
]
},
"pLBfkzi0qfgVRqi_4AmMI": {
"title": "Co-NP",
"description": "Co-NP stands for the complement of NP Class. It means if the answer to a problem in Co-NP is No, then there is proof that can be checked in polynomial time.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Trying to understand P vs NP vs NP Complete vs NP Hard",
"url": "https://softwareengineering.stackexchange.com/questions/308178/trying-to-understand-p-vs-np-vs-np-complete-vs-np-hard",
"type": "article"
},
{
"title": "Complexity: P, NP, NP-completeness, Reductions",
"url": "https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22",
"type": "video"
},
{
"title": "Complexity: Approximation Algorithms",
"url": "https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24",
"type": "video"
},
{
"title": "Complexity: Fixed-Parameter Algorithms",
"url": "https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp",
"type": "video"
},
{
"title": "Lecture 23: Computational Complexity",
"url": "https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=24",
"type": "video"
},
{
"title": "Greedy Algs. II & Intro to NP Completeness",
"url": "https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939",
"type": "video"
},
{
"title": "NP Completeness II & Reductions",
"url": "https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm",
"type": "video"
},
{
"title": "NP Completeness III",
"url": "https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm",
"type": "video"
},
{
"title": "NP Completeness IV",
"url": "https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 23 - NP-Completeness",
"url": "https://www.youtube.com/watch?v=ItHp5laE1VE&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=23",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 24 - Satisfiability",
"url": "https://www.youtube.com/watch?v=inaFJeCzGxU&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=24",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 25 - More NP-Completeness",
"url": "https://www.youtube.com/watch?v=B-bhKxjZLlc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=25",
"type": "video"
},
{
"title": "CSE373 2020 - Lecture 26 - NP-Completeness Challenge",
"url": "https://www.youtube.com/watch?v=_EzetTkG_Cc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=26",
"type": "video"
}
]
},
"hTPLcuOW7eEE5oYhNfmOG": {
"title": "Bitwise Operators",
"description": "Bitwise operators are used to perform operations on individual bits of a number. They are used in cryptography, image processing, and other applications.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Bit Manipulation",
"url": "https://www.youtube.com/watch?v=7jkIUgLC29I",
"type": "video"
},
{
"title": "Binary: Plusses & Minuses (Why We Use Twos Complement) - Computerphile",
"url": "https://www.youtube.com/watch?v=lKTsv6iVxV4",
"type": "video"
},
{
"title": "Algorithms: Bit Manipulation",
"url": "https://www.youtube.com/watch?v=NLKQEOgBAnw",
"type": "video"
}
]
}
}