Understanding and implementing a Hash Table (in C)

Поделиться
HTML-код
  • Опубликовано: 12 июн 2024
  • Patreon ➤ / jacobsorber
    Courses ➤ jacobsorber.thinkific.com
    Website ➤ www.jacobsorber.com
    ---
    Understanding and implementing a Hash Table (in C). //. What is a hash table, and how do I implement one? Hash tables are a fundamental data structure that all student programmers need to have in their toolbox. This video describes the basics of hash tables, why they're useful, and how you implement them in C.
    Related Videos:
    Linked lists: • Understanding and impl...
    Doubly-linked lists: • Doubly Linked List (in C)
    Modulus operator: • Is the modulus operato...
    ***
    Welcome! I post videos that help you learn to program and become a more confident software developer. I cover beginner-to-advanced systems topics ranging from network programming, threads, processes, operating systems, embedded systems and others. My goal is to help you get under-the-hood and better understand how computers work and how you can use them to become stronger students and more capable professional developers.
    About me: I'm a computer scientist, electrical engineer, researcher, and teacher. I specialize in embedded systems, mobile computing, sensor networks, and the Internet of Things. I teach systems and networking courses at Clemson University, where I also lead the PERSIST research lab.
    More about me and what I do:
    www.jacobsorber.com
    people.cs.clemson.edu/~jsorber/
    persist.cs.clemson.edu/
    To Support the Channel:
    + like, subscribe, spread the word
    + contribute via Patreon --- [ / jacobsorber ]
    + rep the channel with nerdy merch --- [teespring.com/stores/jacob-so...]
    Source code is also available to Patreon supporters. --- [jsorber-youtube-source.heroku...]

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

  • @leokiller123able
    @leokiller123able 2 года назад +306

    The fastest guy to solve a segfault on earth x)

    • @ramprasad7
      @ramprasad7 2 года назад +5

      Absolutely.

    • @dimi5862
      @dimi5862 2 года назад +8

      It's not hard lol, you just get used to it after some time in c

    • @leokiller123able
      @leokiller123able 2 года назад +20

      @@dimi5862 yeah now I ve reached this level its been 10 month since the comment 😂

    • @julengirard8611
      @julengirard8611 Год назад +4

      I'm dead 💀

    • @Ryan-xq3kl
      @Ryan-xq3kl Год назад +8

      there is no segfault, only bad code

  • @RustedCroaker
    @RustedCroaker Год назад +237

    For those who might get the idea of storing age as a data field literally, never do that! Store the date of birth instead, and calculate the age at the time of the output, otherwise your data will be invalid in less than a year.

    • @Amy-mo9ki
      @Amy-mo9ki Год назад +4

      thank you for reminding me

    • @urisinger3412
      @urisinger3412 Год назад +9

      Its better to check every frame if the year changed

    • @RustedCroaker
      @RustedCroaker Год назад +9

      @@urisinger3412 I'm sure you know that not everyone was born on January 1, right?

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

      @@RustedCroaker then ask for age in years and days

    • @RustedCroaker
      @RustedCroaker Год назад +15

      @@urisinger3412... or just date of birth as I said in the first comment.

  • @drcl7429
    @drcl7429 Год назад +10

    best typing sound of all tutorials on youtube

  • @ileanagheorghisor
    @ileanagheorghisor 3 года назад +85

    It's amazing how nicely you explained this! You didn't just dump some code on us, you explained the whole thinking process, making adjustments on the way, teaching us how to think the hashtable, not just how to copy it. I am so looking forward to watch your other videos, I really hope they will help me improve my data structures implementing abilities. Online college classes weren't too favorable for me and I am having a hard time doing my assignments in time.

    • @JacobSorber
      @JacobSorber  3 года назад +3

      Glad it was helpful!

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

      He did exactly the opposite. Started off good but messed it throughput the way. Not the best at teaching I guess, however it was a valiant effort to show people how to be shit at teaching.

  • @mario7501
    @mario7501 3 года назад +147

    Man, I’m surprised you don’t have a million subscribers yet. This is the best channel on programming out there. I am currently reading “the Linux programming interface” which is a massive book and I always find myself coming to your channel if I don’t quite understand a certain topic! I hope a lot more people will recognize the value you provide here!

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

      Good move to go through Linux Programming Interface, which you can always refer to, for Programming on the Linux Platform.

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

      He is held back by his loud keyboard ;)

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

      @@Daniel95221 mario or jacob ? or both !

  • @otterowen2867
    @otterowen2867 3 года назад +34

    deym! You code really fast. I'm getting movie hacker vibes whenever I hear you typing the code

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

      It’s fastforwarded

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

      @@soroushmasoodian Nope, he utilized the text editor well and has fast hands.

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

      he definitely fastforwards at some points

  • @smrtfasizmu6161
    @smrtfasizmu6161 2 года назад +14

    These videos make me fall in love more and more into programming. Although programming was my love at first sight. Great, clear and fun explanation. It was a pleasure to code along. As a beginner it was a miracle to me that you got only 1 segmentation fault (as I am not used to that lol).

  • @elpatotengu31
    @elpatotengu31 3 года назад +13

    Love the video, but i absolutely love watching you code with that keyboard sound. Its so satisfying

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

    Wow, this is an excellent tutorial. Trying to brush up on my C and this content is exactly what I wanted!

  • @karimkohel3240
    @karimkohel3240 4 года назад +67

    i love that you started on data structures thank you so much this is helping me in my courses a lot

    • @JacobSorber
      @JacobSorber  4 года назад +7

      Glad I could help.

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

      i dont mean to be off topic but does anyone know of a way to get back into an Instagram account??
      I was dumb forgot my password. I would love any assistance you can offer me

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

    This is the best video on Hash Tables that i ever encountered. Thank you so much for making it so clear to understand.

  • @ayoubmentag9883
    @ayoubmentag9883 Год назад +37

    In 11:44 in strncmp() function You need to put MAX_NAME instead of TABLE_SIZE ;
    Thanks a lot Jacob that was super useful :)

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

      I instantly saw this as well lol.

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

      yeah was confused for a bit there as to why put the table size

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

    probably the only channel I watch at speed of .75! Thanks for the great tutorial!

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

    best introduction video Ive seen in the internet for that matter. thank you!

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

    That was super awesome. Working on a small project that uses all this info. THANK YOU.

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

    Been bumping across channels looking for... this! Best hash table tutorial vid out there right now. Thank you!

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

      You're welcome. Thanks for the support.

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

    great explanation, of a hash table by starting out with a simple example and building on it.!!!!

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

    This is the best video on RUclips on this topic. Thanks very much sir

  • @user-vs9uf3ny8z
    @user-vs9uf3ny8z 2 года назад

    Fantastic coverage of this! Thanks so much!

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

    Your videos have taught me a lot !! THANK YOU !

  • @md.hossain693
    @md.hossain693 Год назад

    I was looking for this exact thing. Thank you very much for Explaining this concept in the most effective way.

  • @youthfull3616
    @youthfull3616 Год назад +1

    Hello Jacob, I am already subscriber of your channel and I find it very informative everytime I watch your videos. Though i have been working in C from last 16 years, but still I learn something new every time I watch your videos. Keep up your good work and keep adding good stuffs as you have been doing, for your fans like me.

  • @RT-od2ct
    @RT-od2ct Год назад

    This was really helpful for me, thanks! I started my project using arrays for hash table and I could already tell midway I was gonna have a hard time doing anything with the elements.

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

    Very clear and great example!!!

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

    Explained well and good example. Thanks!

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

    This video is SOOOO helpful to me!!! Thank you so much!

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

    Perfect tutorial! helped me a lot, thanks!

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

    You are an excellent teacher. Thank you for these videos.

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

    Thank you so much! To me this is the best explaination ! It actually helps me a lot with my project at university.

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

    Fantastic explanation Jacob.

  • @AkshayKumar-nm4ci
    @AkshayKumar-nm4ci 3 года назад

    Nice Explanation, your video help me to do my assignment!

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

    You've helped me tremendously in my computer science course, thank you.

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

    Super clear explanation! The playback speed is such a great feature.. I normally use it while trying to pick up on a fast guitar lick and here it helps to slow your speedy typing down. Easier to follow ;-) Thanks

  • @Wanderlust073
    @Wanderlust073 4 месяца назад

    Excellent video, thanks.

  • @OneBoyIs2Big
    @OneBoyIs2Big 4 года назад +7

    Man I love the way you teach

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

    Great video! Thanks a lot

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

    This video is very helpful to me, thank so much!

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

    Your videos are fantastic - lucky us!!!
    Congrats and keep posting ;)

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

    Awesome-ly put! Great explanations

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

    Thanks a Lot Sir. Very Nice Explaination.

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

    This is just blowing me mind

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

    Fantastic explanation. Thank.

  • @aldairacosta4393
    @aldairacosta4393 10 месяцев назад

    I just love how your keyboard sounds

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

    Initially, I was looking for a simple explanation for hash tables for my CS50 class; they barely touched on it and it felt a bit ambiguous; yet, you are making it almost water-clear simple, thank you good sir for this great content and deep knowledge.
    I actually took an excessive tour in your very informative channel that I completely forgot about the problem set.
    Love you

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

      Thanks. I'm glad it helped.

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

    I love the way you explain. Thanks a lot. God bless you

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

    very good explain

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

    Simply awesome.. C is even more beautiful with your code ..

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

      Thanks. Glad you're enjoying it.

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

    Super creative! Thank you for opening my mind limits! :D

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

    Priceless!!

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

    Best explanation.....don't need better than this. thumsp up!!!!

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

    The other day I read the chapter in CLRS about hash tables and it left me quite confused at some points now everything is clearer thanks alot !

  • @user-io3fp4bw6h
    @user-io3fp4bw6h 6 месяцев назад

    Leaving a comment is like, helping others that need help as this increases the reach of the video as well as the like,
    so make a habit of commenting on videos you find helpful even if it's just a period '.'
    and also, remind others with that

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

    very good explanation

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

    very nicely done

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

    Thank you for giving this tutorial...man you are awesome.....

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

      Thanks. Glad it was helpful!

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

    Great video, thanks!

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

    this is so helpful.Thank you so much

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

      Hi Edwin. Glad you enjoyed it.

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

    Very nice!👍👍👍Thank you! As an undergrad, we mostly used sedgewick's algorithms book(in java). Nice to see it done in c!

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

    Great content. You've earned another subscriber :)

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

    Great video, i loved how you avoided using pointers to keep things simple

  • @austecon6818
    @austecon6818 2 года назад +5

    This is so freaking great! Thank you for this! I'm a python programmer but I am always taking a peek at C because I have unaddressed urges to dabble in low-level programming sometime (maybe for C extensions to optimize my python projects). What a great way to learn C - making hash tables.

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

      You're welcome. Let me know if there are other topics you would like to see on here.

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

      C is amazing!

    • @BonelishOfficial
      @BonelishOfficial Год назад +1

      Scripting language programmers, including the unix shell, are a bit spoiled because the interpreters ships with excellent built-in hash-like data structures, like Bash associative arrays, Perl hashes, and Ruby and Python dictionaries. Even Windows Powershell ships with a fast associative array implementation. It's very useful, and practically mandatory, for certain algorithms in C to implement hashtables, and I wonder how the gcrypt library "stacks" up against simpler home-brewed hashing functions. You can't memoize a function without a implementing a hashtable in your program.

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

      the more i have experience in c and c++ the less i think about it as low level programming. There should be another term for that. Most of time when programming in C you are disconnected from cpu architecture.

  • @Nia-sk8qo
    @Nia-sk8qo 2 года назад

    Your videos are great. I need to watch them to do CS50's data structure problem.

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

    Thanks for sharing, you just earned another subscriber

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

    That's definitely helpful!

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

    good quality content, thanks

  • @ayu12641
    @ayu12641 4 года назад +13

    The best tutorial so far on hash function in C. Thank you. How do we come up with an optimal hash function for the data structure? Is maximum randomness the target?

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

      Usually. If you're trying to minimize collisions, then maximum randomness (and fast) is usually the goal.

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

      Is there a procedure one can follow to find a good/optimal hash function? I usually use something like Effective Java's hashcode impl like the one mentioned in [1] and assume it's good enough.
      [1] stackoverflow.com/questions/113511/best-implementation-for-hashcode-method-for-a-collection

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

      FYI: There is a thing called a "perfect hash." This is a hash that is tailored for a specific set of inputs, and will produce distinct values for each of them. If you know *all* the possible inputs in advance -- like when you are parsing language keywords -- then perfect hashes can be useful. (Ask the Duck about "gperf" for a software package that provides these functions.)
      For any other scenario, you are looking at doing the best you can with what you've got. Some "cryptographic hash" functions are really good at providing seemingly random output for small changes in input, but they are slow. Now you're trading off speed vs. behavior. Most commonly-used hash functions opt for some simple rules: use 2**n buckets, use prime numbers to multiply, etc.
      If you really want to find good hash functions, look at the source code for programming languages that provide "associative array" or "hash" or "dictionary" data types: awk, perl, ruby, python, java, c++. You can find hash functions that have been looked at and tweaked by a lot of people over many years, which hopefully provides a good performance vs. behavior.

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

      @@austinhastings8793 Just one note. you do not use simply 'prime numbers', to multiply, you need a number that is relatively prime to the table size. If you have a size 100 table, you do not want to use 5 as your multiplier as it will map 100 objects into 20 spaces which will give more collisions. Now 3 or 7 in that case will be better.

  • @marcotroster8247
    @marcotroster8247 Год назад +1

    I'm really impressed how casually you're hacking this code. I was always afraid of implementing my own dictionary. Maybe I'll give it a try next time I need a dict. Well done!
    Of course you've still got lots of issues:
    - dynamic table size
    - table memory management (create / destroy / grow / shrink)
    - abstract linked list node as struct for carrying arbitrary data
    - create hash function for arbitrary data
    - ...

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

    thank you.

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

    Are you a professional teacher because you explained this perfectly. Subscriber and waiting for more data structures and C videos.

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

      Thanks. Glad you enjoyed it. And, yes, I'm a professor by day.

  • @48_subhambanerjee22
    @48_subhambanerjee22 Год назад +1

    Thanks bro... Love from india

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

    simply awesome.. !!

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

    I saw your video because i had no other choice for hashing implementation in C. I was scared of you being fast So I had to watch it at 0.8 x.Now I have implemented my first hash code because if your help.Thank You so much .
    God Bless You. And one more thing You are really HandSome.

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

      Wow. There are comments, and then there are comments. I'm glad you enjoyed it. :)

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

    U deserve more popularity n views sir....

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

    This mad lad is actually writing his own hash functions! Egads!

  • @ssisispei
    @ssisispei 3 года назад +6

    Your thoughts is super fast! lol It's helpful for me to do cs50 problem set 5, thanks!

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

      lmao, I'm also doing it for pset5. What do you think was the hardest pset you've done in cs50 (except for tideman)?

  • @funkykong9001
    @funkykong9001 4 года назад +89

    Thank for this great tutorial. For future videos, please give an additional second or two after writing a function to allow the viewer time to pause to see the code. It's extremely distracting with all the Visual Studio Code popups that cover the code you're writing as well and it's sometimes tough to find a split second to pause the video to see the code before you jump to something else.

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

      I was coding in parallel with him and I had no problem pausing videos. I was suprirsed I wasn't getting segmentation faults all the time, but that's because every time I would wrote code which ended up being different than his, I would rewrite that part of the code lol

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

      You can run the video slower!

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

      Why though? You can just pause the video? Or the play speed.

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

      @@futuza I usually do pause videos, but the cut happens quickly from when the last line of code is written and the next scene begins, so it's more challenging than should be to pause just in time

    • @RyanMartinRAM
      @RyanMartinRAM Год назад +1

      He probably wants you to pay for his Patreon to view the code.

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

    Wow I don’t even know C and I understand this video perfectly! Clear concise explanation ! Probably also because every language I know is based on C in some shape or form haha.

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

    Hope to get a loads of video one by one
    Thanks

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

    Well done to say the least!

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

    Woot! Was that sped up a bit? Strangely enough it seems like it makes it easier to understand. ( I'll be watching it again )

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

    great video! thankss u are a lifesaver

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

    thanks

  • @KDOERAK
    @KDOERAK 11 месяцев назад

    very good👍👍

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

    I finally get it. For a long time I've been 'accepting' that hash tables have faster look ups than arrays without understanding why that is.

  • @HansBezemer
    @HansBezemer Год назад +5

    My favorite "hash" structure is either an array (fixed size) or (when allocating) a binary tree. If I use an array I add a binary search. Sure, you keep on moving memory when inserting or deleting, but [a] searching is O(log n) and [b] the code is pretty straight forward. Binary trees also feature a O(log n) lookup, but due to the pointers, it requires about twice the memory. Both structures hardly suffer from performance degradation.
    My favorite hash is FNV-1a. It's got both 32bit and 64bit versions, easy to implement, very fast and collisions are very rare. E.g. costarring collides with liquid, declinate collides with macallums, altarage collides with zinke. I think you catch my drift. ;-)
    I did "classical" hash tables, but buckets are simply too much of a hassle - so I can't bother anymore. I find myself using the binary search/hashtable cross-over most of the time. Very often "good is good enough".

  • @Rafa-tt8ee
    @Rafa-tt8ee Год назад +2

    You r a BIG TOP G.

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

    it takes time, but someday ALOT of people will start subscribing to u

  • @barisbasar3909
    @barisbasar3909 10 месяцев назад

    lol I saw this videotitle and asked myself "would I be able to implement a hashtable all bymyself with as little library use as possible?"
    A few evenings later I finished my implementation of a very naive ht but it works just fine. Lol that was a refreshing exercise. Now I'll check your video out, thanks

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

    I never thought about hash functions, or tables, in that way; which is surprising because i used to be quite enthusiastic about brown rocks from morrocco.

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

    Phenomenal video. Very clear explanation and code, also, I had a feeling as if I was watching 3blue1brown, but for programming.

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

    Hash tables is a favourite. watch out for modulo bias!

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

    Mans is a BEAST

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

    I was lately studying data structures wondering my head around what witchcraftery hash tables use and this video just pop out in my recommends lol

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

    what Mario said.. "Amazing no one teaches programming like you do" - Must've taken a lot of hard work on your part.. Love the content.

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

    Been a while since i done hash tables, used a few before in work though, i do prefer external chaining think they were called buckets, quadratic is the way to go though, in large structures you can get bad clustering so what i used to do was have a variable quadratic based on the amount of objects with room to add more then just rehash when it filled up to much, the rehashing was inefficient but it did keep the structure performant for lookups and clustering to a minimum. Nice video

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

      Thanks. Glad you enjoyed it. And, thanks for the added perspective.

  • @joaogabrielonofre7297
    @joaogabrielonofre7297 3 года назад +8

    Thanks for the video, man! I'm doing Harvad's CS50 course, we have to use a hashtable in one of the problems and your explanation is much clearer and more in depth than the one provided in the course =) I have a silly question that is not relationed to hashtables itself, but I think will help me understand more of C in general: why in this video you used strnlen/strncmp and not the usual strlen and strcmp? What do the 'n' in the strnlen method stands for? I've read a bit of it online but couldn't understand it well.

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

      Thanks, Joao. Glad it helped. For the question, check out this video about strings and security concerns. ruclips.net/video/7mKfWrNQcj0/видео.html

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

      Good job noticing the "n" in strnlen! I was also wondering why MAX_NAME was passed to the function and came here to post the question in the comments. Glad I went trough them first.
      I am also doing the CS50 and try to go line by line with Jacob's hash first to better undestand the implementation of the data structures. His examples were quite useful troughout the course.
      The stnlen() function though cannot be used by the makefile CS50x implemented as default since strnlen seems not to be a part of the standard C99. You can compile the code differently of course, but for the sake of playing around in CS50x I'm not sure that is necessary. In real world implementation strnlen is quite important as Jacob explains in the video.

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

    Thank you!!

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

    Thanks for the comprehensive tutorial, EXTREMELY helper for understanding hash table with practices. [QUESTION]: For the hash_table_lookup function, why are you using *hash_table_lookup (the address)? I am a bit confuse on that. Otherwise, great work! Looking forward for the next update!

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

    Great video! I wish you were my teacher.

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

      I thought I was. :)
      Thanks for watching.

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

    Not mentioned is that clients using this facility to retrieve & modify any 'person record' must NOT change the value(s) in the field(s) used by the hash function. Correcting the spelling of "Jane" to "June" would likely leave that person's record filed in the wrong location, never to be found again...
    Because delete() returns the ptr to the record, to modify safely is to delete, {modify} and re-insert.
    The "Open" version mistakenly used "TABLE_SIZE" for strncmp().
    Corrected to "MAX_NAME" in "linear probing" version.