starstarstarstarstar_half
Many real-world algorithmic problems cannot be solved efficiently using traditional algorithmic tools, for example because the problems are NP-hard. The goal of this course is to become familiar with important algorithmic concepts and techniques needed to effectively deal with such problems. These techniques apply when we don't require the optimal solution to certain problems, but an approximation that is close to the optimal solution. We will see how to efficiently find such approximations. Prerequisites: In order to successfully take this course, you should already have a basic knowledge of algorithms and mathematics. Here's a short list of what you are supposed to know: - O-notation, Ω-notation, Θ-notation; how to analyze algorithms - Basic calculus: manipulating summations, solving recurrences, working with logarithms, etc. - Basic probability theory: events, probability distributions, random variables, expected values etc. - Basic data structures: linked lists, stacks, queues, heaps - (Balanced) binary search trees - Basic sorting algorithms, for example MergeSort, InsertionSort, QuickSort - Graph terminology, representations of graphs (adjacency lists and adjacency matrix), basic graph algorithms (BFS, DFS, topological sort, shortest paths) The material for this course is based on the course notes that can be found under the resources tab. We will not cover everything from the course notes. The course notes are there both for students who did not fully understand the lectures as well as for students who would like to dive deeper into the topics. The video lectures contain a few very minor mistakes. A list of these mistakes can be found under resources (in the document called "Errata"). If you think you found an error, report a problem by clicking the square flag at the bottom of the lecture or quiz where you found the error.
    star_border star_border star_border star_border star_border
    学习了基本的数据结构后,我们已经可以用程序来解决现实中的一些问题了。但是,怎样提升程序在运行效率呢? 如何快速地把图书按序号从小到大整理好?如何通过一个ID编号在数据库中高效地查找相对应的信息?如何迅速找到所有内容中含有“数据结构”的文档?《高级数据结构与算法》将通过使用高级的数据结构和高效的算法,让你学会如何解决这些对运行时间要求比较严格的问题。 高级数据结构和算法能够根据实际情况,满足一些复杂问题对数据规模、运行时间的要求,帮助我们更有效地解决问题。当我们面对实际问题的时候,高级数据结构和算法让我们有更广泛的空间,选择出与问题本身最为契合的数据结构,并利用相关算法来提升运行效率。 完成这门课之时,你将掌握多维数组、广义表、Trie树、AVL树、伸展树等高级数据结构,并结合内排序、外排序、检索、索引有关的算法,高效地解决现实生活中一些比较复杂的应用问题。合理使用这些高级数据结构和相关算法是程序运行效率的关键因素,学好这门课会让你在之后的计算机专业课程以及项目设计中更得心应手,同时也将让你站在更高的角度去理解问题、设计程序。
      starstarstarstarstar_half
      We invite you to a fascinating journey into Graph Theory — an area which connects the elegance of painting and the rigor of mathematics; is simple, but not unsophisticated. Graph Theory gives us, both an easy way to pictorially represent many major mathematical results, and insights into the deep theories behind them. In this course, among other intriguing applications, we will see how GPS systems find shortest routes, how engineers design integrated circuits, how biologists assemble genomes, why a political map can always be colored using a few colors. We will study Ramsey Theory which proves that in a large system, complete disorder is impossible! By the end of the course, we will implement an algorithm which finds an optimal assignment of students to schools. This algorithm, developed by David Gale and Lloyd S. Shapley, was later recognized by the conferral of Nobel Prize in Economics. As prerequisites we assume only basic math (e.g., we expect you to know what is a square or how to add fractions), basic programming in python (functions, loops, recursion), common sense and curiosity. Our intended audience are all people that work or plan to work in IT, starting from motivated high school students.
        starstarstarstarstar_half
        Cloud computing systems today, whether open-source or used inside companies, are built using a common set of core techniques, algorithms, and design philosophies – all centered around distributed systems. Learn about such fundamental distributed computing "concepts" for cloud computing. Some of these concepts include: clouds, MapReduce, key-value/NoSQL stores, classical distributed algorithms, widely-used distributed algorithms, scalability, trending areas, and much, much more! Know how these systems work from the inside out. Get your hands dirty using these concepts with provided homework exercises. In the programming assignments, implement some of these concepts in template code (programs) provided in the C++ programming language. Prior experience with C++ is required. The course also features interviews with leading researchers and managers, from both industry and academia. This course builds on the material covered in the Cloud Computing Concepts, Part 1 course.
          starstarstarstarstar_half
          Updated in November 2018 with brand new section on Dynamic Programming! This course crams months of computer science and interview prep material into 20 hours of video. The content is based directly on last semester of my in-person coding bootcamps , where my students go on to land 6-figure developer jobs . I cover the exact same computer science content that has helped my students ace interviews at huge companies like Google, Tesla, Amazon , and Facebook . Nothing is watered down for an online audience; this is the real deal :)   We start with the basics and then eventually cover “advanced topics” that similar courses shy away from like Heaps, Graphs , and Dijkstra’s Shortest Path Algorithm . I start by teaching you how to analyze your code’s time and space complexity using Big O notation .  We cover the ins and outs of Recursion .  We learn a 5-step approach to solving any difficult coding problem. We cover common programming patterns. We implement popular searching algorithms . We write 6 different sorting algorithms : Bubble, Selection, Insertion, Quick, Merge, and Radix Sort.   Then, we switch gears and implement our own data structures from scratch, including linked lists, trees, heaps, hash tables , and graphs .  We learn to traverse trees and graphs, and cover Dijkstra's Shortest Path Algorithm .  The course also includes an entire section devoted to Dynamic Programming . Here's why this course is worth your time: It's interactive -  I give you a chance to try every problem before I show you my solution. Every single problem has a complete solution walkthrough video as well as accompanying solution file. I cover helpful "tips and tricks" to solve common problems, but we also focus on building an approach to ANY problem. It's full of animations and beautiful diagrams! Are you looking to level-up your developer skills? Sign up today!
            starstarstarstarstar_border
            "Excellent! Thank you for all your hard work." - Mammoth Interactive student Inderpal "Great! Well explained and the instructor provides clear examples" - Mark T. Dive into a world of data science and analysis with a wide range of examples including the CIFAR 100 image dataset, Xcode development for Apple, Swift coding, CoreML, image recognition, and structuring data with pandas. This Mammoth Interactive course was funded by a #1 project on Kickstarter Learn Android Studio, Java, app development, Pycharm, Python coding, Tensforflow and more with Mammoth Interactive. Build advanced projects using machine learning including advanced the MNIST database with neuron functions. Build a text summarizer and learn object localization, object recognition and Tensorboard. Machine learning is a machine’s ability to make decisions or predictions based on previous exposure to data and extensive training. In other words, if a machine (program, app, etc.) improves its prediction accuracy through training then it has “learned”. Learn How Models Work Computational graphs consist of a network of connected nodes (often called neurons). Each of these nodes typically has a weight and a bias that helps determine, given an input, which path is the most likely. There are 4 main components to building a machine learning program: data gathering and formatting, model building, training, and testing and evaluating Data Gathering and Formatting You will learn to gather plenty of data for the model to learn from. All data should be formatted pretty much the same (images same size, same color scheme, etc.) and should be labelled. Also divide data into mutually exclusive training and testing sets. Model Building You will learn to figure out which kind of model scheme works best and what kinds of algorithms work best for the problem you’re trying to solve. Training, Testing and Evaluating The model can choose paths through the neural network or computational graph based upon the inputs for a particular run, as well as the weights and biases of neurons in the network. In supervised learning, we show the model what the correct outputs are for a given set of inputs and the model alters the weights and biases of neurons to minimize the difference between its output and the correct answer. Enroll Now to Learn with Mammoth Interactive
              starstarstarstarstar_half
              Computational thinking is the process of approaching a problem in a systematic manner and creating and expressing a solution such that it can be carried out by a computer. But you don't need to be a computer scientist to think like a computer scientist! In fact, we encourage students from any field of study to take this course. Many quantitative and data-centric problems can be solved using computational thinking and an understanding of computational thinking will give you a foundation for solving problems that have real-world, social impact. In this course, you will learn about the pillars of computational thinking, how computer scientists develop and analyze algorithms, and how solutions can be realized on a computer using the Python programming language. By the end of the course, you will be able to develop an algorithm and express it to the computer by writing a simple Python program. This course will introduce you to people from diverse professions who use computational thinking to solve problems. You will engage with a unique community of analytical thinkers and be encouraged to consider how you can make a positive social impact through computational thinking.
                starstarstarstarstar_half
                Programming is an increasingly important skill, whether you aspire to a career in software development, or in other fields. This course is the first in the specialization Introduction to Programming in C, but its lessons extend to any language you might want to learn. This is because programming is fundamentally about figuring out how to solve a class of problems and writing the algorithm, a clear set of steps to solve any problem in its class. This course will introduce you to a powerful problem-solving process—the Seven Steps—which you can use to solve any programming problem. In this course, you will learn how to develop an algorithm, then progress to reading code and understanding how programming concepts relate to algorithms.
                  starstarstarstarstar_half
                  Counting is one of the basic mathematically related tasks we encounter on a day to day basis. The main question here is the following. If we need to count something, can we do anything better than just counting all objects one by one? Do we need to create a list of all phone numbers to ensure that there are enough phone numbers for everyone? Is there a way to tell that our algorithm will run in a reasonable time before implementing and actually running it? All these questions are addressed by a mathematical field called Combinatorics. In this course we discuss most standard combinatorial settings that can help to answer questions of this type. We will especially concentrate on developing the ability to distinguish these settings in real life and algorithmic problems. This will help the learner to actually implement new knowledge. Apart from that we will discuss recursive technique for counting that is important for algorithmic implementations. One of the main `consumers’ of Combinatorics is Probability Theory. This area is connected with numerous sides of life, on one hand being an important concept in everyday life and on the other hand being an indispensable tool in such modern and important fields as Statistics and Machine Learning. In this course we will concentrate on providing the working knowledge of basics of probability and a good intuition in this area. The practice shows that such an intuition is not easy to develop. In the end of the course we will create a program that successfully plays a tricky and very counterintuitive dice game. As prerequisites we assume only basic math (e.g., we expect you to know what is a square or how to add fractions), basic programming in python (functions, loops, recursion), common sense and curiosity. Our intended audience are all people that work or plan to work in IT, starting from motivated high school students.
                    starstarstarstar_half star_border
                    This course is for all those people who want to learn data structure and Algorithm from absolute basic to Intermediate level. We don't expect you to have any prior knowledge on Data Structure or Algorithm, but a basic prior knowledge of any Programming Language(preferably C++) will be helpful. Thanks for stopping by !