Understanding and implementing a Hash Table (in C)

  Рет қаралды 364,644

Jacob Sorber

Jacob Sorber

Күн бұрын

Пікірлер: 511
@RustedCroaker
@RustedCroaker Жыл бұрын
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 Жыл бұрын
thank you for reminding me
@urisinger3412
@urisinger3412 Жыл бұрын
Its better to check every frame if the year changed
@RustedCroaker
@RustedCroaker Жыл бұрын
@@urisinger3412 I'm sure you know that not everyone was born on January 1, right?
@urisinger3412
@urisinger3412 Жыл бұрын
@@RustedCroaker then ask for age in years and days
@RustedCroaker
@RustedCroaker Жыл бұрын
@@urisinger3412... or just date of birth as I said in the first comment.
@ileanagheorghisor
@ileanagheorghisor 3 жыл бұрын
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 жыл бұрын
Glad it was helpful!
@velim6597
@velim6597 11 ай бұрын
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.
@leokiller123able
@leokiller123able 3 жыл бұрын
The fastest guy to solve a segfault on earth x)
@ramprasad7
@ramprasad7 2 жыл бұрын
Absolutely.
@dimi5862
@dimi5862 2 жыл бұрын
It's not hard lol, you just get used to it after some time in c
@leokiller123able
@leokiller123able 2 жыл бұрын
@@dimi5862 yeah now I ve reached this level its been 10 month since the comment 😂
@julengirard8611
@julengirard8611 2 жыл бұрын
I'm dead 💀
@Ryan-xq3kl
@Ryan-xq3kl Жыл бұрын
there is no segfault, only bad code
@mario7501
@mario7501 4 жыл бұрын
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 3 жыл бұрын
Good move to go through Linux Programming Interface, which you can always refer to, for Programming on the Linux Platform.
@Daniel95221
@Daniel95221 2 жыл бұрын
He is held back by his loud keyboard ;)
@edwardmacnab354
@edwardmacnab354 2 жыл бұрын
@@Daniel95221 mario or jacob ? or both !
@karimkohel3240
@karimkohel3240 4 жыл бұрын
i love that you started on data structures thank you so much this is helping me in my courses a lot
@JacobSorber
@JacobSorber 4 жыл бұрын
Glad I could help.
@cadenjosiah9515
@cadenjosiah9515 3 жыл бұрын
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
@rafaelbrustolin4687
@rafaelbrustolin4687 2 күн бұрын
Probably the best video i've seen about hash tables recently
@ayoubmentag9883
@ayoubmentag9883 2 жыл бұрын
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 Жыл бұрын
I instantly saw this as well lol.
@blankspace1959
@blankspace1959 Жыл бұрын
yeah was confused for a bit there as to why put the table size
@smrtfasizmu6161
@smrtfasizmu6161 2 жыл бұрын
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).
@otterowen2867
@otterowen2867 3 жыл бұрын
deym! You code really fast. I'm getting movie hacker vibes whenever I hear you typing the code
@soroushmasoodian
@soroushmasoodian 3 жыл бұрын
It’s fastforwarded
@Mythic_Echoes
@Mythic_Echoes 3 жыл бұрын
@@soroushmasoodian Nope, he utilized the text editor well and has fast hands.
@pasy_g
@pasy_g 3 жыл бұрын
he definitely fastforwards at some points
@drcl7429
@drcl7429 Жыл бұрын
best typing sound of all tutorials on youtube
@demoosaad8579
@demoosaad8579 4 жыл бұрын
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 4 жыл бұрын
Thanks. I'm glad it helped.
@elpatotengu31
@elpatotengu31 4 жыл бұрын
Love the video, but i absolutely love watching you code with that keyboard sound. Its so satisfying
@rosiearasa9818
@rosiearasa9818 3 жыл бұрын
probably the only channel I watch at speed of .75! Thanks for the great tutorial!
@LoayAl-Said-o9v
@LoayAl-Said-o9v 11 ай бұрын
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
@AshleyBaker75
@AshleyBaker75 Жыл бұрын
Everything is going so quickly I had to slow it down to 0.75x playtime, so then you sounded drunk so I thought I'd have a beer too. Now I'm watching Star Wars drunk.
@RPBiohazard
@RPBiohazard 2 жыл бұрын
Wow, this is an excellent tutorial. Trying to brush up on my C and this content is exactly what I wanted!
@AkimboFennec
@AkimboFennec 11 ай бұрын
This is the best video on Hash Tables that i ever encountered. Thank you so much for making it so clear to understand.
@silvermonad1
@silvermonad1 4 жыл бұрын
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 !
@JacobSorber
@JacobSorber 4 жыл бұрын
Glad I could help.
@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 жыл бұрын
Wow. There are comments, and then there are comments. I'm glad you enjoyed it. :)
@cheseremtitus5989
@cheseremtitus5989 2 жыл бұрын
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.
@JacobSorber
@JacobSorber 2 жыл бұрын
Thanks.
@funkykong9001
@funkykong9001 4 жыл бұрын
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.
@Schannel012
@Schannel012 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 жыл бұрын
You can run the video slower!
@futuza
@futuza 2 жыл бұрын
Why though? You can just pause the video? Or the play speed.
@funkykong9001
@funkykong9001 2 жыл бұрын
@@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 2 жыл бұрын
He probably wants you to pay for his Patreon to view the code.
@OneBoyIs2Big
@OneBoyIs2Big 4 жыл бұрын
Man I love the way you teach
@JacobSorber
@JacobSorber 4 жыл бұрын
Thanks.
@ntuindip5042
@ntuindip5042 Жыл бұрын
This is the best video on KZbin on this topic. Thanks very much sir
@adityachandran7002
@adityachandran7002 2 жыл бұрын
the speed is a little faster for me, like i wasnt able to keep up with the speed of typing. but i understood the whole concept. so this video is a miracle for me.
@youthfull3616
@youthfull3616 Жыл бұрын
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.
@JacobSorber
@JacobSorber Жыл бұрын
Thanks. I'm glad it's helped.
@rustycherkas8229
@rustycherkas8229 2 жыл бұрын
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.
@marcotroster8247
@marcotroster8247 Жыл бұрын
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 - ...
@aldairacosta4393
@aldairacosta4393 Жыл бұрын
I just love how your keyboard sounds
@austecon6818
@austecon6818 3 жыл бұрын
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 3 жыл бұрын
You're welcome. Let me know if there are other topics you would like to see on here.
@drkwrk5229
@drkwrk5229 2 жыл бұрын
C is amazing!
@BonelishOfficial
@BonelishOfficial 2 жыл бұрын
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 Жыл бұрын
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.
@vladimirleon2487
@vladimirleon2487 9 ай бұрын
That was super awesome. Working on a small project that uses all this info. THANK YOU.
@MrMikeydrum
@MrMikeydrum 3 жыл бұрын
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.
@HansBezemer
@HansBezemer Жыл бұрын
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".
@khomo12
@khomo12 9 ай бұрын
Very nice!👍👍👍Thank you! As an undergrad, we mostly used sedgewick's algorithms book(in java). Nice to see it done in c!
@theandrefilipe90
@theandrefilipe90 3 жыл бұрын
best introduction video Ive seen in the internet for that matter. thank you!
@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.
@ighsight
@ighsight 3 жыл бұрын
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.
@pseudolemon8272
@pseudolemon8272 Жыл бұрын
very well explained. the only thing i think could've been clarified better was the optimization with "deleted". it was brushed off as obvious but i had to pause and think why
@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.
@owenwexler7214
@owenwexler7214 Жыл бұрын
This mad lad is actually writing his own hash functions! Egads!
@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.
@velmaniranganathan930
@velmaniranganathan930 3 жыл бұрын
Simply awesome.. C is even more beautiful with your code ..
@JacobSorber
@JacobSorber 3 жыл бұрын
Thanks. Glad you're enjoying it.
@ayu12641
@ayu12641 4 жыл бұрын
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 4 жыл бұрын
Usually. If you're trying to minimize collisions, then maximum randomness (and fast) is usually the goal.
@joseville
@joseville 4 жыл бұрын
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 жыл бұрын
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 жыл бұрын
@@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.
@ssisispei
@ssisispei 4 жыл бұрын
Your thoughts is super fast! lol It's helpful for me to do cs50 problem set 5, thanks!
@megaraph5551
@megaraph5551 4 жыл бұрын
lmao, I'm also doing it for pset5. What do you think was the hardest pset you've done in cs50 (except for tideman)?
@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 жыл бұрын
Thanks. Glad you enjoyed it. And, yes, I'm a professor by day.
@rtzstvn
@rtzstvn 4 жыл бұрын
great explanation, of a hash table by starting out with a simple example and building on it.!!!!
@TornadoeJoe
@TornadoeJoe 4 жыл бұрын
You've helped me tremendously in my computer science course, thank you.
@JacobSorber
@JacobSorber 4 жыл бұрын
Welcome. Glad I could help.
@andrewdunbar828
@andrewdunbar828 7 ай бұрын
Hash tables is a favourite. watch out for modulo bias!
@md.hossain693
@md.hossain693 Жыл бұрын
I was looking for this exact thing. Thank you very much for Explaining this concept in the most effective way.
@dj_mk_crazy
@dj_mk_crazy Жыл бұрын
As a C++ programmer I use the std::map and std::unordered_map for this purpose but this video will be useful for me if in some situations I would not be allowed to use them. Thanks!
@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 )
@OpeLeke
@OpeLeke 3 жыл бұрын
Great video, i loved how you avoided using pointers to keep things simple
@vladkirakosyan4987
@vladkirakosyan4987 2 жыл бұрын
First time i used 0.75x to get smth clear is here. I appreciate it.
@CyroTheSpider
@CyroTheSpider 4 жыл бұрын
You are an excellent teacher. Thank you for these videos.
@JacobSorber
@JacobSorber 4 жыл бұрын
You're welcome.
@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
@pcache
@pcache 4 жыл бұрын
one more benefit of external chaining is that if your hash function is not random enough, it can be easily diagnosed just by looking at the linked lists's lengths in proportion to the hash table's empty cell count.
@JacobSorber
@JacobSorber 4 жыл бұрын
Good point. Thanks.
@thybaochau
@thybaochau Жыл бұрын
Thank you so much! To me this is the best explaination ! It actually helps me a lot with my project at university.
@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
@yega3k
@yega3k 2 жыл бұрын
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.
@abhayraj695
@abhayraj695 4 жыл бұрын
Thank you for giving this tutorial...man you are awesome.....
@JacobSorber
@JacobSorber 4 жыл бұрын
Thanks. Glad it was helpful!
@youssefsabbagh4341
@youssefsabbagh4341 2 жыл бұрын
Your videos have taught me a lot !! THANK YOU !
@kvsubbareddy
@kvsubbareddy 2 жыл бұрын
Fantastic explanation Jacob.
@joaogabrielonofre7297
@joaogabrielonofre7297 4 жыл бұрын
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 4 жыл бұрын
Thanks, Joao. Glad it helped. For the question, check out this video about strings and security concerns. kzbin.info/www/bejne/bZ6ul4qog7aWoJI
@demirmahir
@demirmahir 2 жыл бұрын
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.
@karimdhrif6679
@karimdhrif6679 Жыл бұрын
This is just blowing me mind
@frozenfar7231
@frozenfar7231 4 жыл бұрын
this was a good video and thanks for the effort, but it was by far one of the hardest videos to follow for me, most of it comes from me but imo there are things that can improve the quality of videos in the future, first please close the file browser tab if it is not needed and capture scene is small so more of the code is visible, second please scroll a bit slow or all and all slow the explanation process so noobs like me can follow, and last but not least programming videos without source code imo are half useful and of course, you can opt to put that as a feature for a paid option but I think that would reduce the impact of your work. all and all thank you so much and keep up the good work.
@rameshb5987
@rameshb5987 3 жыл бұрын
U deserve more popularity n views sir....
@whatdoyouthink9449
@whatdoyouthink9449 10 ай бұрын
This video is very helpful to me, thank so much!
@adityavsx
@adityavsx 3 жыл бұрын
it takes time, but someday ALOT of people will start subscribing to u
@fontanot
@fontanot 3 жыл бұрын
Thanks for sharing, you just earned another subscriber
@JacobSorber
@JacobSorber 3 жыл бұрын
Awesome, thank you!
@48_subhambanerjee22
@48_subhambanerjee22 2 жыл бұрын
Thanks bro... Love from india
@marshalstewart7776
@marshalstewart7776 4 жыл бұрын
Very clear and great example!!!
@yapdog
@yapdog 3 жыл бұрын
Not a fan of hash tables (I prefer tries), but I really appreciate your information and how you present it. Well done!
@JacobSorber
@JacobSorber 3 жыл бұрын
Thanks. Tries are coming. 😀
@sameerplaynicals8790
@sameerplaynicals8790 2 жыл бұрын
Tries can't replace hash tables. A Trie is a prefix tree. They don't use the same logic. Yes, two nodes can share the same parent but that doesn't make it a hash table.
@yapdog
@yapdog 2 жыл бұрын
@@sameerplaynicals8790 I'm referring to application. EDIT: And in case that that's not clear, when I have a choice between trie and hash (and I always do for my particular application), I choose trie. So, your first statement is only true for certain requirements/uses, and that also applies to the reverse: Hash tables can't replace tries... depending on the requirements/uses.
@Nia-sk8qo
@Nia-sk8qo 2 жыл бұрын
Your videos are great. I need to watch them to do CS50's data structure problem.
@Rafa-tt8ee
@Rafa-tt8ee 2 жыл бұрын
You r a BIG TOP G.
@diogosilva5739
@diogosilva5739 2 жыл бұрын
i agree
@nayoan17
@nayoan17 25 күн бұрын
i think you should use MAX_NAME for the third parameters of strncmp strncmp(const char *str1, const char *str2, size_t n) it takes the max size of characters instead of table_size
@liumeilin9837
@liumeilin9837 3 жыл бұрын
This video is SOOOO helpful to me!!! Thank you so much!
@user-vs9uf3ny8z
@user-vs9uf3ny8z 3 жыл бұрын
Fantastic coverage of this! Thanks so much!
@AkshayKumar-nm4ci
@AkshayKumar-nm4ci 4 жыл бұрын
Nice Explanation, your video help me to do my assignment!
@santiagosuarez465
@santiagosuarez465 Жыл бұрын
Awesome-ly put! Great explanations
@icookyorice1
@icookyorice1 4 жыл бұрын
Explained well and good example. Thanks!
@All.In.One-i2m
@All.In.One-i2m 10 ай бұрын
Not gonna lie I feel so overwhelmed but I think that's because I am still a noob. Great video you explained everything so well I just have a skill issue, hope I'll get better.
@leopoldomolina1664
@leopoldomolina1664 Жыл бұрын
Super creative! Thank you for opening my mind limits! :D
@bhailog_gaming_2000
@bhailog_gaming_2000 4 жыл бұрын
I love the way you explain. Thanks a lot. God bless you
@JacobSorber
@JacobSorber 4 жыл бұрын
Glad I could help.
@gowrimajayaramu1243
@gowrimajayaramu1243 4 жыл бұрын
Should the size in strncmp be 'MAX_NAME' instead of 'TABLE_SIZE', since we are limiting the strcmp to MAX_NAME? strncmp(hash_table[try]->name, name, MAX_NAME) instead of strncmp(hash_table[try]->name, name, TABLE_SIZE)?
@ChrisBNisbet
@ChrisBNisbet 3 жыл бұрын
Yes.
@Schannel012
@Schannel012 2 жыл бұрын
Mistakes like that can happen to anybody, as far as I understand yes, it should be MAX_NAME, since MAX_NAME is the limit to the number of characters of name, while TABLE_SIZE is the maximum number of elements in the hash table, it has nothing to do with the size of the name.
@sverkeren
@sverkeren 2 жыл бұрын
One little optimization that can be done, is to avoid writing DELETED_NODE if the next table entry is NULL.
@sameerplaynicals8790
@sameerplaynicals8790 2 жыл бұрын
In an array, one can change time complexity to O(n/2) with linear search or O(log n) with binary search
@yoyoclockEbay
@yoyoclockEbay Жыл бұрын
What does that mean
@sameerplaynicals8790
@sameerplaynicals8790 Жыл бұрын
@@yoyoclockEbay The first one, linear search, is just an optimisation of linear search. Meaning if an array with N elements has an element X that needs to be searched, then simple search would take X iterations, but linear search, uses counters that increment and decrement, respectively, basically, the left and the right side are being searched simultaneously. The second algorithm can only be used on sorted arrays because it uses the sorted order to lower the bounds and narrow the search area, it starts at the element in the middle, and then if the element being search is bigger, it goes to the right half, and performs the same procedure, if it's smaller, it goes to the left half, and performs the procedure, notice how the array's order is the most important factor, even slight deviations in the arrays order are capable of producing undefined behaviour. By the way, replace log with log_2 in the complexity expression.
@BruceDuncan
@BruceDuncan 2 жыл бұрын
Excellent description. Since C is now considered an "unsafe" language, it would be interesting to hear your thoughts on the security deficiencies of external chaining (or indeed linear addressing!).
@jimnoeth3040
@jimnoeth3040 Жыл бұрын
C is not in and of itself an unsafe language, 'safe' languages keep you from shooting yourself in the foot, so to speak. But there is an efficiency cost to do that.
@Alkis05
@Alkis05 Жыл бұрын
@@jimnoeth3040 Since in practice we are addicted to shoot ourselves in the foot, same difference.
@gautamkumarshukla3055
@gautamkumarshukla3055 4 жыл бұрын
very good explanation
@Rohith_E
@Rohith_E 4 жыл бұрын
@12:24 in strncmp, third argument should be MAX_NAME
@nimishthakkar
@nimishthakkar 4 жыл бұрын
Best explanation.....don't need better than this. thumsp up!!!!
@jimnoeth3040
@jimnoeth3040 Жыл бұрын
One comment, I don't know if someone else mentioned it, but for best randomization, the table size should be a prime number.
@leopoldomolina1664
@leopoldomolina1664 Жыл бұрын
One question from a newbie here: Expert programmers usually show/execute this kind of GREAT CODE (C in this case) working with a Terminal window. How do you implement this (C code) into an application with a nice user interface or specially a mobile app, with buttons, nice looking, etc. and not a terminal window? Do you need to encapsule this code into modules, make them understandably (black box of inputs and outputs) to any other more graphical programming framework like React Native for example?
@matanav5803
@matanav5803 3 жыл бұрын
Perfect tutorial! helped me a lot, thanks!
@rostamboroumandrad7703
@rostamboroumandrad7703 3 жыл бұрын
very nicely done
@sharontzu5
@sharontzu5 2 жыл бұрын
Fantastic explanation. Thank.
@sumitbhosale3401
@sumitbhosale3401 4 жыл бұрын
Thanks a Lot Sir. Very Nice Explaination.
@mertcancelik8961
@mertcancelik8961 2 жыл бұрын
Great video, very helpful. One thing that I didn't fully understand is how to determine the size of the hash table. If anyone know, please do tell :)
@Stephanie-rk7yg
@Stephanie-rk7yg 4 жыл бұрын
Im crying, "it sounds like it can be illegal in some states" LOL i paused to write this but I'm sure this video will have a great explanation
@jacobschmidt
@jacobschmidt 3 жыл бұрын
20:33 lol @ "when I'm concerned about performance I use linked lists". worse is better when it comes to caches
@sergioaguinaga7020
@sergioaguinaga7020 22 күн бұрын
Does your mind think that fast your is the video sped you? There's even copy and paste sections and you fly through it and it just works. I did this entire video pausing it in sections but writing my own code but I wasn't just typing super fast like you lol. I had to stop and think about how I was going to implement it and got it working, just no where near as fast.
@sergioaguinaga7020
@sergioaguinaga7020 19 күн бұрын
here's a copy of my insert function. I implemented before you did and got it working so it's interesting how yours is just always less lines of code than mine. I don't understand why you do p->next = hash_table[index]. You're circling the next to point back to the array of pointers... am I reading that wrong? void HashTable::insert_hash_Chaining(Person *p) { int index = hash(p->name); Person *current_person = hash_table[index]; if (p != nullptr) { if (current_person == nullptr) { hash_table[index] = p; } else { while (current_person->next != nullptr) { current_person = current_person->next; } current_person->next = p; } } }
@oPatrickVico
@oPatrickVico Жыл бұрын
Great video! Thanks a lot
How to Blink LEDs with Timers and Interrupts in C (MSP430, Arduino)
14:32
Faster than Rust and C++: the PERFECT hash table
33:52
strager
Рет қаралды 607 М.
А я думаю что за звук такой знакомый? 😂😂😂
00:15
Денис Кукояка
Рет қаралды 3,1 МЛН
How To Choose Mac N Cheese Date Night.. 🧀
00:58
Jojo Sim
Рет қаралды 88 МЛН
FOREVER BUNNY
00:14
Natan por Aí
Рет қаралды 25 МЛН
Hash Table in C
2:11:31
Tsoding Daily
Рет қаралды 69 М.
Understanding and implementing a Linked List in C and Java
18:15
Jacob Sorber
Рет қаралды 245 М.
C Programming Tutorial for Beginners
3:46:13
freeCodeCamp.org
Рет қаралды 14 МЛН
Hash Tables and Hash Functions
13:56
Computer Science Lessons
Рет қаралды 1,6 МЛН
4. Hashing
52:55
MIT OpenCourseWare
Рет қаралды 340 М.
Emulating a CPU in C++ (6502)
52:28
Dave Poo
Рет қаралды 1 МЛН
Advanced C: The UB and optimizations that trick good programmers.
1:12:34
Eskil Steenberg
Рет қаралды 175 М.
Bit Fields in C. What are they, and how do I use them?
13:26
Jacob Sorber
Рет қаралды 84 М.
А я думаю что за звук такой знакомый? 😂😂😂
00:15
Денис Кукояка
Рет қаралды 3,1 МЛН