Из-за периодической блокировки нашего сайта РКН сервисами, просим воспользоваться резервным адресом:
Загрузить через ClipSave.ruУ нас вы можете посмотреть бесплатно The Recursive Staircase - Top Down & Bottom Up Dynamic Programming ("Climbing Stairs" on LeetCode) или скачать в максимальном доступном качестве, которое было загружено на ютуб. Для скачивания выберите вариант из формы ниже:
Если кнопки скачивания не
загрузились
НАЖМИТЕ ЗДЕСЬ или обновите страницу
Если возникают проблемы со скачиванием, пожалуйста напишите в поддержку по адресу внизу
страницы.
Спасибо за использование сервиса savevideohd.ru
Free 5-Day Mini-Course: https://backtobackswe.com Try Our Full Platform: https://backtobackswe.com/pricing 📹 Intuitive Video Explanations 🏃 Run Code As You Learn 💾 Save Progress ❓New Unseen Questions 🔎 Get All Solutions Question: You are climbing a staircase. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? (n is always a positive integer). This is a classic problem. Let us tackle it thoroughly, there are many ways to do this that form the basis for how we do other problems bottom up with a DP table or top down with memoization. The key with a problem like this is to instantly recognize that this turns into a series of subproblems, it is very similar to the Fibonacci sequence calculations. Approach 1 (Top Down Recursion w/o Memoization) Example: n = 4 Let f(n) be the number of ways to climb n steps if we can take 1 or 2 steps. f(4) = f(3) + f(2) f(3) = f(2) + f(1) f(2) = f(1) + f(0) Base case: f(0) = 1 and f(any negative number) = 0 Notice that we are resolving subproblems that we already have an answer to and hence we are wasting time. Complexities Time: O( 2 ^ n ) Each recursive call can spawn 2 more calls, depth of the recursion tree is n. This is a loose bound, a tighter one is around O( 1.62 ^ n ) Space: O( n ) Call stack max depth. Max depth of the recursion tree goes n calls deep. Approach 2 (Use Memoization On Top Down) Memoization: An optimization technique used primarily to speed up computer programs by storing the results of expensive function calls and returning the cached result when the same inputs occur again. Dynamic programming is all about storing the answers to previous sub-problems to speed up our runtimes by avoiding repeating work that has already been done. Complexities Time: O( n ) We cancel out many of the repeated calls that we might have made leading to us to have a linear time complexity. Space: O( n ) Call stack max depth. And we will still have the dp table. Approach 3 (Dynamic Programming Array) DP is all about caching the answers to previous work and using it in current work. dp[n] denotes the number of ways to climb n steps if we can take 1 or 2 steps. dp[n] = dp[n - 2] + dp[n - 1] The answer to n is the sum of the answer between two things: our last step to n is 2 long our last step to n is 1 long Base Cases: dp[1] = 1 and dp[2] = 2 Complexities Time: O( n ) A for loop making n - 2 iterations Space: O( n ) We will be holding n + 1 entries in a dp array Approach 4 (Fibonacci Number) We notice that this is just the Fibonacci series. We can just use local variables to keep track of the items 1 and 2 behind where we stand. Complexities Time: O( n ) Still solve up to n subproblems. Space: O( 1 ) No more dp array, we just use constant local variables All other approaches are esoteric and are not practical in an interview, these include: - Using Binets Method & matrix multiplication - Using the mathematical, non-recursive, version of the Fibonacci Formula ++++++++++++++++++++++++++++++++++++++++++++++++++ HackerRank: / @hackerrankofficial Tuschar Roy: / tusharroy2525 GeeksForGeeks: / @geeksforgeeksvideos Jarvis Johnson: / vsympathyv Success In Tech: / @successintech