Tries - CS50 Shorts

Поделиться
HTML-код
  • Опубликовано: 27 дек 2024

Комментарии • 88

  • @rubabzahber5990
    @rubabzahber5990 7 лет назад +96

    god bless cs50

    • @UpperKS
      @UpperKS 5 лет назад +2

      No kidding

  • @BryceChudomelka
    @BryceChudomelka 4 года назад +12

    Doug is great. CS50 is an excellent resource.

  • @jasonbellis9128
    @jasonbellis9128 3 года назад +17

    Another great vid. But, I also feel using Year as key to lookup schools is an odd example, and causes confusion for many...
    Not only for collision potential. Also, it's not a real world use case to say "I know Harvard was founded in 1636, so look it up by 1636 and see if Harvard is there".
    I know - it's just an example with 4 digits for simplicity... It's just easier to comprehend examples with real-world use cases.

    • @sogarriz
      @sogarriz 5 месяцев назад

      exactly! as i went thru even i was like what if 1701 was used again for say standford but then the key is exhausted so how do we handle collision? plus this would fail over large data sets according to the example.

    • @SlowDancer
      @SlowDancer 4 месяца назад +2

      I was thining of something like a social security number as a key so that the demonstration made more sense to me. Entering it would search retrieve a possible name for example.

    • @SachinGuy
      @SachinGuy 2 месяца назад

      @@SlowDancer I similarly thought of the letters of alphabets!

  • @mohammedhamed7466
    @mohammedhamed7466 Год назад +2

    actually the example David uses in the lecture is more clear than this one, I understood the concept, but where is the code to do so? i still have to look for other resources to find out

  • @charlielin188
    @charlielin188 3 года назад +12

    sir, what if there are two schools founded at the same year? Or should i use hash table instead

    • @oruchkin
      @oruchkin 3 года назад +7

      you can use letters as keys
      and years as values
      it will work

  • @eleos11
    @eleos11 8 месяцев назад +1

    Guys I have a question, because I don't quite understand the purpose of these videos. While an intro to "tries" seems really interesting, there isn't any parctice with them. In addition, there aren't any suggestions about freeing the nodes of a try... Am I being reasonable here?

  • @jingtao1181
    @jingtao1181 4 года назад +24

    I’m afraid this video, as with some other videos, contains assumptions that are subtle and may be not known to CS beginners. As some comments have pointed out, what happens if there is a collision of year? Maybe a reemphasis on the original assumption is able to make viewers clear or give a solution to how to solve a collision.

    • @fdc4810
      @fdc4810 4 года назад +4

      Normally such data structure is assumed to have bijective relationships, namely if x != y, then f(x) != f(y). However in the cases where you really want to make a tries such that it contains multiple values, you can always call realloc() at the last step to reallocate the string array size.

    • @jaaan2914
      @jaaan2914 2 года назад

      @@fdc4810 If x != y, then f(x) != f(y) is necessary but not sufficient for bijectivity. What you're describing is injectivity.

    • @fdc4810
      @fdc4810 2 года назад

      ​@@jaaan2914 The "onto" condition is implicitly assumed here, as the the x and f(x) come in pairs in the example of the data structure in the video (x = year, f(x)=university name), hence each f(x) is defined to be mapped upon.

  • @quotcode
    @quotcode 4 года назад +6

    Thank u so much sir for this really insightful lecture.

  • @kellingc
    @kellingc 2 года назад +6

    I've seen this before, but as file structures and using a 2-3-4 method. Your first level has two choices, second level you have three choices; and third level you have four. Same concept, just different amounts of oaths.
    One thing that popped out at me is your use of ten digits perceisly describes the arm of the Strowger dialer. The only thing not depicted with this example is the relays to find the next available Strowger device, to signal the last digit in the number, and a few other cases.
    This also shows how using a digit for a single use (like 0 for Opertor or 1 for long distance) takes (10^x)-2 posable lines away. Man, I love computer science.
    Oh, and how would you handle collisions. Say two schools were founded in 1836? Simular tk a has table?

  • @seanlee566
    @seanlee566 2 года назад +3

    Man Doug is such a great teacher. But why does the intro have to be so loud and his voice so soft. RIP Headphone users.

  • @_dr_ake
    @_dr_ake 4 года назад +15

    I'm not sure I understand. Wouldn't you get collisions using the year as a key? If so why use that as an example.
    Can someone clarify for me?

    • @AllanPichardo
      @AllanPichardo 4 года назад +4

      If the key is the same, then essentially you're replacing an item in your trie. The same would happen in a hash table. In a hash table, a collision is not referring to when you repeat a key. Repeating a key is simply replacing something. A collision in a hash table occurs when, even though the key is different, the hashing function maps it to the same storage location as another existing item. On a trie, if you search for a key like 1750 and 1890, they're never going to collide because you're going first to 1, then branching to 7 then branching to 5 then branching to 0.

    • @goatdwarfs
      @goatdwarfs 4 года назад +9

      @@AllanPichardo I think the question is referring to what happens if you need to store University A and University B in a trie if they were both founded in 1750? What solutions resolve that collision in a trie data structure?

    • @AllanPichardo
      @AllanPichardo 4 года назад +6

      @@goatdwarfs Yes, I see. In that case, I would suggest either not using a simple year as the key. Or perhaps, every node can contain, rather than one university name, a collection of universities. You can customize this to fit your specific use case.

    • @germaniothesmart-alec6056
      @germaniothesmart-alec6056 4 года назад

      I'm not CS guy, but I think its about having a hash-function that cannot collide. In this video the year represent the output of that hashfunction. I am thinking for example of using the ASCII int representation of each char in the string and user that as the key. (use separator character between each int or use fixed length with null padding so you know how the ints are grouped together in order to construct the 'roadmap' correctly) My approach would ofcourse use a lot more memory. Each node would hold an array of at least sizeof(int)*26 if we ignore casing.

  • @VinceAggrippino
    @VinceAggrippino 2 года назад +2

    Your arrows and colorful boxes are pretty but without some related code it does nothing to help me understand how to utilize it.

  • @ABO_GHANIM1
    @ABO_GHANIM1 Год назад

    How about if I want to insert another university that founded in 1636? Do I have to insert it in 0 after I reach Harvard, so it make a list?

  • @atrain3793
    @atrain3793 2 года назад +1

    This is not the way that Professor Malan described tries in the lecture, so I am confused. In the lecture, he never mentioned anything about key value pairs, but rather that a trie just had a array of the values that needed to be stored, and each index in the array was a letter plus a pointer to the another array.

  • @itsmikeneas
    @itsmikeneas 7 лет назад +26

    What happens if you have a different school founded in 1636 after you've inserted Harvard?

    • @marjanp
      @marjanp 7 лет назад +14

      He says the key (year) is guaranteed to be unique. Otherwise it would overwrite previous value with the new one.

    • @itsmikeneas
      @itsmikeneas 7 лет назад +9

      marjanp okay so in his example he gaurentees uniqueness but in the real world what happens?

    • @marjanp
      @marjanp 7 лет назад +6

      The key has to be unique.

    • @itsmikeneas
      @itsmikeneas 7 лет назад +14

      @marjanp Practically, how are you going to guarantee uniqueness...If you were going to index all the universities by their date founded you will find collisions.
      University of Pittsburgh - 1787
      Franklin & Marshall College - 1787
      The larger the data set the more likely a collision.
      I just wanted to know the common way to deal with situations like this.

    • @marjanp
      @marjanp 7 лет назад +39

      It's a bad example. founding year isn't guaranteed unique. You have guaranteed unique keys in real life like SSN, ISBN etc.

  • @BOTAimBotz
    @BOTAimBotz 3 месяца назад

    I wish the intro music wasn't so loud.

  • @knightrec869
    @knightrec869 4 года назад +1

    Cs50 is best channel on utube.for that student's who r studying.

  • @shashanksharma21
    @shashanksharma21 6 лет назад +2

    Explained brilliantly ! Thanks for sharing

  • @ahmedkamal9695
    @ahmedkamal9695 4 года назад

    thanks for CS50 Team

  • @thomasmo98
    @thomasmo98 2 года назад

    thanks doug ily!

  • @NeelSandellISAWESOME
    @NeelSandellISAWESOME 4 года назад

    Why does he say chaining is more preferable to probing as a collision strategy?

  • @RenanBecker
    @RenanBecker 3 года назад

    If I want the number 123 but I dont want to store 12? How do that?

  • @zyadalharbi180
    @zyadalharbi180 4 года назад

    Thank you. Very helpful.

  • @KnowWhatTheyKnow
    @KnowWhatTheyKnow 5 лет назад +4

    What happens if you have collision?

  • @NeelSandellISAWESOME
    @NeelSandellISAWESOME 4 года назад

    Why is he saying trie is constant time if it depends on the size of the number?

    • @lew162
      @lew162 3 года назад +1

      Because that number is constant. No matter how many new elements you insert into the trie, a particular element will always take the same amount of time to be looked up. This is different from something like a linked list where with each added element you need to iterate over an additional node (in the worst case) so the lookup time grows with the list size.

    • @NeelSandellISAWESOME
      @NeelSandellISAWESOME 3 года назад

      @@lew162 thank you!

  • @chrischoir3594
    @chrischoir3594 2 года назад +1

    These CS50 are great videos but you should number them so we know what order to watch them....duh

  • @GOODBOY-vt1cf
    @GOODBOY-vt1cf 4 года назад

    THANK YOUR Doug Lloyd

  • @8o8inSquares
    @8o8inSquares 7 лет назад +2

    A subbox spam that I am actually happy to see, thanks for all those videos

  • @kalleskit
    @kalleskit 7 лет назад +1

    Is this related to Bloom filters?

    • @Evangielis
      @Evangielis 7 лет назад

      They share a use case, though tries are deterministic as an indicator of set membership and bloom filters are not.

  • @not_amanullah
    @not_amanullah 8 месяцев назад

    Thanks

  • @jingtao1181
    @jingtao1181 4 года назад +6

    In essence, I feel this video makes easy things complicated and complicated things easy. For instance, tries is just a data structure that allows us to store multiplayer of information as long as we make sure that each element has a unique representation. It can have more branches than hash tables and arrays.

    • @vaibhav3874
      @vaibhav3874 4 года назад +2

      What are you on about? I'm new to CS and this was perfectly clear to me.

    • @jingtao1181
      @jingtao1181 4 года назад +3

      @@vaibhav3874 my main question was the university name and university year. University founding years might be the same, but in this video, it was assumed to be different. So that kind of compels to ask what happens when university founding years are different, how can you store the information in tries?

    • @jingtao1181
      @jingtao1181 4 года назад +1

      @@vaibhav3874 I don't mean this video series is not good. In fact, they are very helpful. I'm just saying it's confusing for me sometimes.

    • @r3xtez987
      @r3xtez987 4 года назад

      @@jingtao1181 It's just a simple example to help understand. In the real world you wouldn't use keys which enable collisions so easily

    • @ns8928
      @ns8928 4 года назад

      You should lookup the replies on the comment Michael Neas has putted in this video.

  • @nguyenthanhdat93
    @nguyenthanhdat93 6 лет назад

    It's over-complicated. Trie is a combination of multi-rooted trees.
    View this video for easier visualization: ruclips.net/video/-urNrIAQnNo/видео.html

  • @SujaySiddarth
    @SujaySiddarth 3 года назад +1

    You miss one word, you wont be able to get through the rest of the video.

  • @rasinshort4817
    @rasinshort4817 5 лет назад

    thanks sir

  • @rishavjain5087
    @rishavjain5087 6 месяцев назад

    i thought tree and tries were two different data structures😂😂

  • @juwenzel1
    @juwenzel1 Год назад +2

    Unfortunately, this was not a good example for tries 😕

  • @anfield6321
    @anfield6321 6 лет назад

    Maut in cs50 lul...

  • @enisten
    @enisten Год назад

    The explanations were maddeningly verbose and repetitive in this video.

  • @Dejoblue
    @Dejoblue 7 лет назад +1

    Are you going to regularly spam literally 50 videos? Deciding if I should ubsub. This isn't a petulant inquiry/threat, I genuinely need to know if this is going to be a regular occurrence and disruption for me. Thank you in advance.

  • @krypto7264
    @krypto7264 6 лет назад +1

    How do you expect someone to understand the rules that you are saying in the beginning of the video if you haven't even mentioned a single example. This video is more appropriate for people who have a basic understanding of the trie data structure. Otherwise the first part of the video will only sound gibbersih.

    • @Antonio_611
      @Antonio_611 5 лет назад +22

      this is for edX platform where you're supposed to watch the videos in a specific order

    • @zerosandones701
      @zerosandones701 5 лет назад +16

      and the lecture that proceeds this touches on tries as well