4 Steps to Solve Any Dynamic Programming (DP) Problem

แชร์
ฝัง
  • เผยแพร่เมื่อ 23 ม.ค. 2025

ความคิดเห็น •

  • @GregHogg
    @GregHogg  10 หลายเดือนก่อน +131

    Master Data Structures & Algorithms For FREE at AlgoMap.io!

    • @trusterzero6399
      @trusterzero6399 10 หลายเดือนก่อน +7

      Read this with ypur dirtiest mind

    • @jjpaq
      @jjpaq 10 หลายเดือนก่อน +4

      2 on 1* tutoring.
      I think that's why they call it "pair programming". 😉

    • @conundrum2u
      @conundrum2u 10 หลายเดือนก่อน +3

      reported for advertising

    • @xNothing2Lose
      @xNothing2Lose 9 หลายเดือนก่อน +2

      Ty for that great DP help. Couldn't do it alone. No matter how much I put into that.

    • @Skubidi-qy8hb
      @Skubidi-qy8hb 7 หลายเดือนก่อน +1

      How much money will I need for tutoring from you?

  • @rohitkumaram
    @rohitkumaram 10 หลายเดือนก่อน +673

    4th step sometimes not possible, but yeah up to 3 definitely.

    • @GregHogg
      @GregHogg  10 หลายเดือนก่อน +62

      Yes that's correct

    • @iiJDSii
      @iiJDSii 10 หลายเดือนก่อน +9

      When is the 4th step not possible I wonder? Maybe when the DP transition formula involves variable time step difference or something like that (i.e. something more dynamic that dp[i-1] and dp[i-2])

    • @rikthecuber
      @rikthecuber 10 หลายเดือนก่อน +38

      ​@@iiJDSiiThere are tons of problems where the space cannot be optimised to lower dimensions. It is basically when the value of a paticular entry in dp table doesnt depend on a predictable element, or maybe different values depend on different entries spanning the entire dp table.
      In the fibo case, we could already say that the value at the current position depends on just the last 2, so we could optimise the dimension down to 0.

    • @Dawid_NH
      @Dawid_NH 5 หลายเดือนก่อน +5

      @@iiJDSii for example: 322. Coin Change

  • @sonicjoy2002
    @sonicjoy2002 7 หลายเดือนก่อน +103

    very good summary of the step by step optimisation of DP problems, but it is hard for new learner to understand these 4 steps without a full blown explanation.

  • @SpidermansSymbiote
    @SpidermansSymbiote 3 หลายเดือนก่อน +37

    I'm just a tradesman and stumbled upon this vid. I have NO idea what's going on but it looks cool

    • @WorldSlash_
      @WorldSlash_ 2 หลายเดือนก่อน

      If you would like to learn cs I would recommend w3schools, a coding website.

    • @slipperytiger
      @slipperytiger หลายเดือนก่อน +6

      You know how physical labor makes your body ache, this is the same thing but you're doing it to yourself mentally instead of physically.

    • @RestIess.Gambler
      @RestIess.Gambler หลายเดือนก่อน +2

      It’s torture

    • @IPROBABLYMADEIT
      @IPROBABLYMADEIT หลายเดือนก่อน

      but the dopamine after solving a question

  • @TreeLuvBurdpu
    @TreeLuvBurdpu 2 หลายเดือนก่อน +15

    With these shorts, i should be able to become a code guru in one hour.

  • @azursmile
    @azursmile 10 หลายเดือนก่อน +22

    Great video demonstrating progressive code refinement. Still not sure if the first step should be called "recursive backtracking". As discussed in previous video, think this is just "naïve recursion".

  • @88Xrist
    @88Xrist 8 หลายเดือนก่อน +20

    I find that top-down solutions are easier to understand due to the decision tree nature of the solution as opposed to the bottom-up with dp that is sometimes harder to find the transition step.

    • @GregHogg
      @GregHogg  8 หลายเดือนก่อน +3

      I completely agree 💯

    • @phoneix24886
      @phoneix24886 3 หลายเดือนก่อน +2

      The trick I use is to first create the recursive approach to find what parameters need to get passed to the method that changes with each call.. those are your tabular row and columns. Then I try to find out what's the ending condition to the recursive function given minimum number of input (i write these two aside). Finally i write down what needs to be computed and returned from the recursive function. Thats the stuff you store in table.
      Then with these 3 information i try to reconstruct the top down table (which works in almost all cases leaving a few very difficult problems where I cant get my head around it even via recursion lol)

    • @dweblinveltz5035
      @dweblinveltz5035 29 วันที่ผ่านมา

      Within the last year, I rewrote a large algo involving many function calls that would recurse upon itself. It was taking a long time, and I knew the recursion was contributing to the duration, so refactoring to "bottom-up" would speed it up. It took some time to wrap my head around, but after that exercise, I now find the bottom-up approach more intuitive somehow. Basically, what it boiled down to in my case was keeping track of each "recursive" call (just a while loop now) by throwing the next set of arguments into my own "call stack." The base case simply didn't push any set of arguments onto the stack, so the loop ends when there is nothing left to work on.

  • @Karthik-h3r
    @Karthik-h3r 5 หลายเดือนก่อน +2

    What do DP do?:
    It actually selects one best solution from all the possibilities
    And the possibilities are reduced by reusing/Memorization/Tabulation,(when there are 2 or more subproblems overlapping then we can avoid those subproblems and substitute from the memorization 😎)

  • @ZYLYTYourCrazyAbility
    @ZYLYTYourCrazyAbility 14 วันที่ผ่านมา

    Great tips! What would your tips for nailing down a ZYLYTY code challenge?

  • @yassine-sa
    @yassine-sa 8 หลายเดือนก่อน +17

    What's complicated about DP IMO is figuring out what do the output depend on in such a way that it's memoizable, when facing new and complicated problems, It's not obvious at all

    • @GregHogg
      @GregHogg  8 หลายเดือนก่อน +2

      Yes that's definitely the tricky part

  • @tomislam
    @tomislam 9 หลายเดือนก่อน +1

    Hey Gregg, I'd love to see a deep dive into DP. Most importantly, I'd like to know how I can convert my naive approach progress from top-down to bottom-up to true dp solutions.
    Thanks in advance.

    • @GregHogg
      @GregHogg  9 หลายเดือนก่อน +1

      Thank you! Yes I am absolutely working on those longer form videos to discuss these topics :)

  • @anjalbinayakadhikari
    @anjalbinayakadhikari 2 หลายเดือนก่อน +1

    I am new to DS and I find this really beautiful ❤

  • @grumpyraytv7778
    @grumpyraytv7778 4 วันที่ผ่านมา

    I’ve seen most jobs wanting the degree in computer science, did you learn on your own or did you get your degree? I’m asking because I’m interesting in learning this skill!

  • @abiiranathan
    @abiiranathan 10 หลายเดือนก่อน +14

    I think the memo dict would be a new one for each stack frame. I might be wrong. You are better off using lru_cache from functools or make the dict global

    • @Gamiboi612
      @Gamiboi612 7 หลายเดือนก่อน +1

      I was confused as well. How would it work if each time fib is called, the memo object is reset?

    • @del6553
      @del6553 5 หลายเดือนก่อน +2

      The memo dict was instantiated inside fib(n) and its reference was stored in the name "memo"; The f(n) function calls itself, not fib(n).
      Python uses the LEGB (Local, Enclosing, Global, Built-in) rule for name resolution, when it look up the name "memo" within f(n) and find out that it's not there, it will look for that name in the enclosing scope aka fib(n).
      Since there are only lookups and no assignment to the name "memo" within f(n), the "memo" within f(n) is the essentially the same as "memo" in fib(n).

  • @CharlesLakes2001
    @CharlesLakes2001 หลายเดือนก่อน

    You could solve it in O(log(n)). Some say this problem could be solved in O(1), but they need to calculate the square root, and this costs O(log(n)).

  • @Aditya-ms1ll
    @Aditya-ms1ll 4 หลายเดือนก่อน

    🙏 bottom up approach saves me mostly

  • @lakshyamathur8808
    @lakshyamathur8808 หลายเดือนก่อน

    Hi! I am a beginner in DSA and can only do easy array and string questions.
    How to start learning DP and Graph?
    And from where to learn?
    Like I need a playlist that explains theory(so i can make notes) + codes
    If anyone is able to provide any links, much thanks😊

  • @foerza649
    @foerza649 10 หลายเดือนก่อน +2

    How to do the 4th step in antoher algorithm? For example the knapsack?

    • @GregHogg
      @GregHogg  9 หลายเดือนก่อน

      It's just about storing exactly what you'd need to store at each time, and this will vary per problem

    • @DjahanLatran
      @DjahanLatran 3 หลายเดือนก่อน +1

      I don't think that approach is suitable for the knapsack problem. Atleast not for the 0/1 knapsack problem

  • @petipeti2997
    @petipeti2997 10 หลายเดือนก่อน +3

    this is gold thank you

    • @GregHogg
      @GregHogg  9 หลายเดือนก่อน +1

      You're super welcome, sorry for the slow response!

  • @markokafor7432
    @markokafor7432 5 หลายเดือนก่อน

    For the last option, you didn’t use the i in the for loop?

  • @michaelporter7629
    @michaelporter7629 2 หลายเดือนก่อน

    As a computer science minor, I have no idea what any of that means, but it all looks about right. 👍

  • @balasujithpotineni8184
    @balasujithpotineni8184 10 หลายเดือนก่อน +3

    I feel like you just summed up one the first lecture on dynamic programming from an old mitocw series

    • @xingyuxiang1637
      @xingyuxiang1637 10 หลายเดือนก่อน +1

      Just think about the years it takes to summarize this classical intro DP problem. Another thing is to distinguish greedy and DP because they both ask for min/max and get results based on the previous results. So, I would stop at the Top-down DP and draw some trees due to @cache. I would use return at the leaf node.

  • @augustacybersolutions
    @augustacybersolutions 9 หลายเดือนก่อน

    how is example 1 "recursive backtracking" when it just produces the nth number of a fibonacci sequence?

    • @GregHogg
      @GregHogg  9 หลายเดือนก่อน

      Because it does it through recursive backtracking, or basically, the most brute force thing possible

    • @augustacybersolutions
      @augustacybersolutions 9 หลายเดือนก่อน

      @@GregHogg is that because it starts at f(6) and basically does a trickle down tree (horrible description) and then when it gets to the default cases of 0 and 1 it goes back up the tree to the actual f(6)? Sorry just trying to work through the terminology, i'm new to studying actual algorithms with programming

  • @onehmong9368
    @onehmong9368 หลายเดือนก่อน

    No time gotta check labview out then go back to mongodb then back to intune and active directory then cybersecurity

  • @tenshiaisu377
    @tenshiaisu377 หลายเดือนก่อน

    Is it memoization or memoRization?

  • @theasynch9549
    @theasynch9549 2 หลายเดือนก่อน

    hey @GregHogg I am you huge fan! And I use algo for learning programming. Could you also please suggest me some good books i should use to learn logical programming? I dont want a book for learning a language... just the logic behind prograaming. I would be hughely grateful.
    Much love from India

  • @as_if
    @as_if 4 หลายเดือนก่อน

    Thanks
    And i must also thank striver.

  • @danielniels22
    @danielniels22 9 หลายเดือนก่อน

    hi guys, im new in programming. on the 2nd approach, even though it results better in time complexity (lowered to O(n) ), doesn't it affect performance on the space complexity because it does memoization?

    • @GregHogg
      @GregHogg  9 หลายเดือนก่อน

      Correct. Although we usually care more about time :)

    • @danielniels22
      @danielniels22 9 หลายเดือนก่อน

      @@GregHogg thank you!

    • @dweblinveltz5035
      @dweblinveltz5035 29 วันที่ผ่านมา

      That is a great question to ask during an interview: "Am I constrained by memory?"

  • @ShinAkuma
    @ShinAkuma 2 หลายเดือนก่อน

    Everytime I get asked a DP problem in interviews. I find the lowest time complexity algorithm to find the shortest path out the interview room.

  • @Samuel0202
    @Samuel0202 10 หลายเดือนก่อน +166

    Just throw a HashMap on it

    • @thisisnotok2100
      @thisisnotok2100 10 หลายเดือนก่อน +17

      That's step 2 yes

    • @m96fa40
      @m96fa40 10 หลายเดือนก่อน +10

      You didn't understand the second step lol

    • @IvanRYTP
      @IvanRYTP 6 หลายเดือนก่อน +1

      guys, it's a thing Nicolas T. said in one of his videos lol

    • @RealCGH
      @RealCGH 6 หลายเดือนก่อน +1

      That's #2😂, it's a dictionary in Python but same exact thing

    • @Samuel0202
      @Samuel0202 6 หลายเดือนก่อน +3

      OMFG, it's an inside joke in the programming community 🙄. No wonder you all don't get it when you watch TH-cam tutorials.

  • @ishaanbhardwaj2313
    @ishaanbhardwaj2313 6 หลายเดือนก่อน

    Is 4th step limited to 1-D dynamic programming

    • @ishaanbhardwaj2313
      @ishaanbhardwaj2313 6 หลายเดือนก่อน

      ?

    • @zanies6288
      @zanies6288 3 หลายเดือนก่อน

      No it doesn't have to anything with dimensions. It depends on the information we are using for caching

  • @anoxyt3140
    @anoxyt3140 8 หลายเดือนก่อน +1

    Can u do this in C++

  • @carlgauss8545
    @carlgauss8545 10 หลายเดือนก่อน

    5th solution, solve it on O(ClogN) where C depends on the dp specific recursion

  • @eduardprivat9821
    @eduardprivat9821 10 หลายเดือนก่อน

    How perfect. 4h@uni vs your smart and small overview explenation. Thx

  • @faizalahmed648
    @faizalahmed648 8 หลายเดือนก่อน

    Why not use a hashmap?

    • @GregHogg
      @GregHogg  8 หลายเดือนก่อน

      For the memoization?

  • @YuvrajRaghuvanshiS
    @YuvrajRaghuvanshiS 8 หลายเดือนก่อน

    The ting sound resonated my soul

    • @GregHogg
      @GregHogg  8 หลายเดือนก่อน

      Good good 😂

  • @sarthakjain1824
    @sarthakjain1824 6 หลายเดือนก่อน

    I can usually think of a top down approach but not the bottom up

  • @abdalla4425
    @abdalla4425 10 หลายเดือนก่อน

    #4 should be optimized space complexity which includes O(1) for 1D DP instead of O(n) and O(n) for 2D DP instead of O(n^2)

    • @GregHogg
      @GregHogg  9 หลายเดือนก่อน

      You cannot guarantee this unfortunately!

  • @PaulSebastianM
    @PaulSebastianM 7 หลายเดือนก่อน

    What is considered as DP here!?

  • @kakimell101
    @kakimell101 10 หลายเดือนก่อน +116

    I thought I was good with Python until I saw this video

    • @polycrystallinecandy
      @polycrystallinecandy 10 หลายเดือนก่อน +25

      This isn't Python though, it's basic algorithms :)

    • @kakimell101
      @kakimell101 10 หลายเดือนก่อน

      @@polycrystallinecandy it's definitely python

    • @rikthecuber
      @rikthecuber 10 หลายเดือนก่อน +17

      This video has nothing specific to do with python.

    • @kakimell101
      @kakimell101 10 หลายเดือนก่อน +3

      Pretty sure I saw python

    • @polycrystallinecandy
      @polycrystallinecandy 10 หลายเดือนก่อน +10

      ​@@kakimell101Pretty sure I also saw vscode, doesn't mean it's got anything to do with it

  • @seasn5553
    @seasn5553 หลายเดือนก่อน

    Why is tabulation the way I would’ve done it. It seems the most straightforward

  • @soumyadeepghosh4197
    @soumyadeepghosh4197 4 หลายเดือนก่อน

    Tabulation is the best!

  • @ITseNano_YT
    @ITseNano_YT 4 หลายเดือนก่อน

    Yep get your full course for this at code camp

  • @ravimishra3169
    @ravimishra3169 5 หลายเดือนก่อน

    Gernalized an example for whole dp ,hence incorecct

  • @carlkarl
    @carlkarl 9 หลายเดือนก่อน

    i dont know about the caching thing thanks for telling and explaining

    • @GregHogg
      @GregHogg  9 หลายเดือนก่อน

      Yeah, pretty interesting stuff! You're very welcome :)

  • @nihalbhamrah4726
    @nihalbhamrah4726 6 หลายเดือนก่อน

    I dint understand 2nd one but other 3 were still understanable

  • @saltedskin
    @saltedskin 8 หลายเดือนก่อน

    I wonder if people having passed the dynamic-programming tests ever actually used it in their jobs?

    • @GregHogg
      @GregHogg  8 หลายเดือนก่อน

      They definitely don't 😂

  • @armandomendivil1117
    @armandomendivil1117 10 หลายเดือนก่อน +1

    If we want to go little further we can take a look at the Golden ratio

    • @joergsonnenberger6836
      @joergsonnenberger6836 10 หลายเดือนก่อน +3

      Yeah, why iterate when you can directly compute the result? :)

  • @shemmo
    @shemmo 7 วันที่ผ่านมา

    Let's take a moment to think about this-you’re working extremely hard and carrying massive student loans, all to land a job at a FAANG company, only to end up making others wealthier. Jeff sends his regards with a big hug.

  • @cinemaantepichi5480
    @cinemaantepichi5480 5 หลายเดือนก่อน +2

    East or West Striver is the best

  • @brockobama257
    @brockobama257 23 วันที่ผ่านมา

    “No memory dp” should be
    “Less memory dp” because it’s typically possible to get down from a table to a list or god forbid a 3d array to a table
    Maybe even call it
    “Reduced dimensions dp”

  • @blasterzm
    @blasterzm 8 หลายเดือนก่อน +1

    You totally missed the point of DP. You can pass just by explaining how you derive the solution and implement bottom up or top down with memo, which ever is easier for you

  • @sponge3757
    @sponge3757 10 หลายเดือนก่อน +1

    and 5 step use matrix

  • @parttimedude5440
    @parttimedude5440 2 หลายเดือนก่อน

    I have just started, so didn't understood a word that you said.

  • @ashraf_isb
    @ashraf_isb 10 หลายเดือนก่อน +1

    thanks man

  • @mostafagalal1584
    @mostafagalal1584 8 หลายเดือนก่อน

    I started studying programming for data science about two months ago and what h r saying sounds like Chinese to me, am soooo far 😂

    • @GregHogg
      @GregHogg  8 หลายเดือนก่อน +2

      Dynamic programming shares pretty much nothing in common with data science (although sadly still you might get asked it in an interview), so that's okay haha

    • @resresres1
      @resresres1 2 หลายเดือนก่อน

      Don't worry, i've made many programs in Python and there's been almost no instances where i've needed anything that he is talking about. Just use built in sort() and min()/max(), bisect, "in" operator or if dealing with dataframes using the built in vectorization methods in pandas and etc...... literally don't need to know what he is talking about.

  • @kishoregowda8210
    @kishoregowda8210 2 หลายเดือนก่อน

    Step 4 might not be possible for every problem but definitely till tabulation part.

  • @sergeiilin544
    @sergeiilin544 5 หลายเดือนก่อน

    Backtracking solution indeed o(2^n) but there is tighter upper bound

  • @HeatCode24
    @HeatCode24 8 หลายเดือนก่อน

    Just for folks. 4th is not greedy approach. It’s still a dp based.

    • @GregHogg
      @GregHogg  8 หลายเดือนก่อน +1

      Yes still dp just constant space where possible. Feels kinda greedy though

  • @revathivamshi7621
    @revathivamshi7621 10 หลายเดือนก่อน

    Does Devin will take over the jobs

  • @michalr2284
    @michalr2284 5 หลายเดือนก่อน

    Step 5, make it faster by using fast matrix exponentiation.

  • @Allthenameable
    @Allthenameable 9 หลายเดือนก่อน +1

    To solve dp you should solve dp 3 times.
    ..got it

    • @GregHogg
      @GregHogg  9 หลายเดือนก่อน +1

      At least the first couple times you learn about the concept, yes I believe so :)

  • @paw565
    @paw565 5 หลายเดือนก่อน

    So basically for loop is better than recursion 😊

    • @dweblinveltz5035
      @dweblinveltz5035 29 วันที่ผ่านมา

      In terms of performance, usually, but recursion lends itself to readability at times.

  • @AllanSavolainen
    @AllanSavolainen 10 หลายเดือนก่อน

    How is this dynamic programming? Looks like normal programming to me... 😅

    • @GregHogg
      @GregHogg  9 หลายเดือนก่อน

      Haha well it is still programming just a certain type of it

    • @AllanSavolainen
      @AllanSavolainen 9 หลายเดือนก่อน

      @@GregHogg sure sure, but I can't understand how it is anything different from normal programming where you divide the task into small sub tasks and solve those.

  • @natescode
    @natescode 9 หลายเดือนก่อน

    Recursion uses O(n) memory though

    • @GregHogg
      @GregHogg  9 หลายเดือนก่อน +1

      Indeed it does!

  • @frankfeng98
    @frankfeng98 14 วันที่ผ่านมา

    there's no need to inculcate such patterns, truth is in interview if you get DP is either you've done it and regurgitating it or you go blank

  • @keepNjoying
    @keepNjoying 9 หลายเดือนก่อน

    Is coding relevant in this AI era?

    • @GregHogg
      @GregHogg  9 หลายเดือนก่อน +1

      Yes

  • @CubingDeveloper
    @CubingDeveloper 2 หลายเดือนก่อน

    Memoization sounds like a baby tried to say memorisation 😂

  • @gigantopithecus8254
    @gigantopithecus8254 10 หลายเดือนก่อน

    the fastest method doesent use dp though

  • @slyace1301
    @slyace1301 10 หลายเดือนก่อน

    I wrote c#, i don't know if it can be done any other way than just using recursion with a limiting condition without making the code look like gibberish

  • @hepotitus
    @hepotitus 10 หลายเดือนก่อน

    me* watches how to solve dynamic programming problems
    also me* messes up f-strings

  • @samgraham6355
    @samgraham6355 9 หลายเดือนก่อน +1

    Step 5: Binet's formula and rounding

    • @GregHogg
      @GregHogg  9 หลายเดือนก่อน

      What's that?

    • @brandon.m
      @brandon.m 3 หลายเดือนก่อน

      @@GregHoggthe analytical solution to the Fibonacci sequence

  • @aertyty3900
    @aertyty3900 10 หลายเดือนก่อน

    D&C, cht, lambda optimization, optimizations using fft entered the chat...

  • @captainrex5457
    @captainrex5457 7 หลายเดือนก่อน +1

    Or just us the formula in O(1)…

  • @ProCodesMedia
    @ProCodesMedia 3 หลายเดือนก่อน

  • @brandon.m
    @brandon.m 3 หลายเดือนก่อน

    5th solution:
    Don’t use a program to solve a problem with an analytical solution. Takes the time complexity from O(n) to O(1).

  • @arambh-gaur
    @arambh-gaur 2 หลายเดือนก่อน

    sure, try doing all 4 of these steps in under 30 mins in an interview for a DP problem you have never seen before

  • @elirane85
    @elirane85 8 หลายเดือนก่อน

    Just remember: Dynamic Programming = Recursion + Memoizations

  • @onehmong9368
    @onehmong9368 หลายเดือนก่อน

    Dayem Greg

  • @BLMed1a
    @BLMed1a 7 หลายเดือนก่อน

    Personally don’t like this approach
    I think learning straight the way to dp with an array is the correct way, this is how we’re thought in the University
    The other are good ways to solve general problems, but not DP ones

  • @piyusharora5327
    @piyusharora5327 10 หลายเดือนก่อน

    It might be fun if I am employed by Netflix though.

  • @InvictusM0n
    @InvictusM0n 8 หลายเดือนก่อน

    Bro i can barely solve stacks medium. I am truly cooked.

    • @GregHogg
      @GregHogg  8 หลายเดือนก่อน

      You'll continue to improve, give it time 😄

  • @dweblinveltz5035
    @dweblinveltz5035 29 วันที่ผ่านมา

    I've heard "dynamic programming" so much over the years but had no idea it was just this, which I've been doing for years. I even recently wrote fib in Rust (arbitrarily chose it as a learning exercise) and immediately opted for bottom-up no-memory... because it makes the most sense. I remember first learning fib with recursion back in the day, but that's a pointless application.

  • @aheensolanki8956
    @aheensolanki8956 6 หลายเดือนก่อน

    Why is CDawgVA teaching coding😭?

  • @perenegro
    @perenegro 9 หลายเดือนก่อน

    Damn. I didn't understand a shit. Now I feel bad.

    • @danielniels22
      @danielniels22 9 หลายเดือนก่อน

      xD

    • @GregHogg
      @GregHogg  9 หลายเดือนก่อน

      60 seconds is a pretty short amount of time to learn 4 algorithms. This is a high level understanding video, it'll likely take more time than this to fully grasp :)

  • @erichlf
    @erichlf หลายเดือนก่อน

    For a mathematician the first two solutions of Fibonacci are just weird.

  • @polycrystallinecandy
    @polycrystallinecandy 10 หลายเดือนก่อน

    Why solve the problem 4 times? Just write down the DP formulation and then write the code. Also step 4 is just for special cases. You don't know if the solution will depend on a constant number of previous values.

    • @TheStrandedAlliance
      @TheStrandedAlliance 10 หลายเดือนก่อน

      What do you mean, step 4 is just for special cases? When wouldn't it work?

    • @polycrystallinecandy
      @polycrystallinecandy 10 หลายเดือนก่อน

      ​@@TheStrandedAlliance Like I said, when the current value doesn't depend on a constant number of previous values. Or when you don't know which values to maintain in advance.
      In the simple case of the fibonacci series, you only have to save exactly 2 values regardless of the current step, and you know which ones. In more complex problems you won't know in advance which values to save or how many. So you can't allocate O(1) memory for them and the only way is to maintain the whole table.

    • @TheStrandedAlliance
      @TheStrandedAlliance 10 หลายเดือนก่อน

      @@polycrystallinecandy Can't you just manage a dynamic list then? Also, in the recursive case, the values will just fill up the stack instead anyway, no? That would be pretty bad if you have a huge amount of values (-> stack overflow).

    • @polycrystallinecandy
      @polycrystallinecandy 10 หลายเดือนก่อน

      @@TheStrandedAlliance no, because you need to know ahead of time. By the time you get to the iteration where you know which values you should've saved, you've already lost them. You don't have to do recursive, you can do an iterative version (step 3), just save all the values in a table.

  • @phusicus_404
    @phusicus_404 8 หลายเดือนก่อน

    It's not steps, it's ways

    • @GregHogg
      @GregHogg  8 หลายเดือนก่อน

      Sometimes true. Agreed, you don't actually have to follow these steps if you know what you're doing. I'd argue it's a natural order to solving the problem, understanding it completely, and getting good practice in

  • @MdAshfakChowdhury
    @MdAshfakChowdhury 8 หลายเดือนก่อน

    🎁✅

    • @GregHogg
      @GregHogg  8 หลายเดือนก่อน

      Did you send me a gift haha

  • @Dd-do-and-dont
    @Dd-do-and-dont 8 หลายเดือนก่อน

    I spotted a trash, it is at the beginning, it resembles 🍎

    • @GregHogg
      @GregHogg  8 หลายเดือนก่อน

      What?

    • @Dd-do-and-dont
      @Dd-do-and-dont 8 หลายเดือนก่อน

      @@GregHogg I mean that logo in the center belonging to company engaged in slave labor in china.

  • @mdm9b
    @mdm9b 10 หลายเดือนก่อน

    cool

  • @calebclay2713
    @calebclay2713 7 หลายเดือนก่อน

    Anyone lost or just me

  • @denysdanov88
    @denysdanov88 10 หลายเดือนก่อน +7

    Good example but fibonacci could be solved with O(1) using math

    • @ismailseif6945
      @ismailseif6945 10 หลายเดือนก่อน

      precision issues will start to appear, also what if I want it modulo a large prime (like 10^9 + 7) and ask you to find the, for example, 748243191942148th Fibonacci number

    • @nikolatesla3376
      @nikolatesla3376 10 หลายเดือนก่อน +5

      impossible, logN runtime minimum

    • @xxsuper99xx
      @xxsuper99xx 10 หลายเดือนก่อน +1

      Show me the cpu that has a hardware integrated square root function. N64 doesn't count

    • @natescode
      @natescode 9 หลายเดือนก่อน

      ​@@nikolatesla3376no it isn't impossible. I did it on Leetcode. Unfortunately it depends on having an infinity accurate value for the golden ratio.

    • @DavideCanton
      @DavideCanton 6 หลายเดือนก่อน

      ​@@xxsuper99xx Square root of 5 can be precomputed and amortized, and it's not dependent on N

  • @diegotapiasilva7349
    @diegotapiasilva7349 9 หลายเดือนก่อน

    Had no clue what u just said

  • @michaeltruong405
    @michaeltruong405 10 หลายเดือนก่อน

    W

  • @Ashwinnbr
    @Ashwinnbr 10 หลายเดือนก่อน

    5th step cry

  • @mathtsai899
    @mathtsai899 9 หลายเดือนก่อน +1

    Too complex. Just learn the formal dp from Algorithm book.
    I suggest "Introduction to algorithm III".
    If there are overlapping subproblems and optimal substructure, then we can use dp.
    Both top-down and bottom-up dp are tabulation.
    (This vedio is not right.)
    Tabulation means memorize the result to calculate everything in only 1 time.
    Here are the steps to do dp problems:
    1. Define the definition of your dp.
    Ex. dp[i] means the minimum step to reach ith floor.
    2. Write down the recursion.
    Ex. dp[i] = dp[i-1]+dp[i-2] in Fibonacci.
    3. Write down boundry conditions.
    Ex. n = ?, then...
    Hope this can help someone learning dp. : )

  • @GPSingh-tn3zo
    @GPSingh-tn3zo 8 หลายเดือนก่อน

    5th solution - i think you are lagging.

    • @GregHogg
      @GregHogg  8 หลายเดือนก่อน

      Hmm?

  • @millenium2003
    @millenium2003 3 หลายเดือนก่อน

    Imma fail

  • @Apeuda
    @Apeuda 5 หลายเดือนก่อน

    chatgpt ahh content

    • @TheAcebyte
      @TheAcebyte 5 หลายเดือนก่อน

      Ungrateful brat