Ano ang pagkakaiba sa pagitan ng isang array at isang hash table sa isang programming language?


sagot 1:

Ang mga lamesa ng Hash ay gumagamit ng mga arrays. Ang mga arrow ay may isang mahalagang pag-aari para sa hashing: maaari mong ma-access ang anumang elemento sa isang palaging oras kung alam mo ang index nito.

Maaari kang gumamit ng mga arrays para sa mga balde. Sabihin nating nais mong isipin kung ilan sa bawat titik sa isang teksto, sabihin, para sa pagdidisenyo ng isang bagay tulad ng Morse code. Gumagawa ka ng isang hanay na may 26 na mga entry (para sa simpleng hindi nakaganyak na alpabetong Romano). Sa tuwing nakakakita ka ng isang sulat, kinakalkula mo ang index at pumunta sa entry na iyon sa array.

Ang mga talahanayan ng Hash ay nagpapalawak nito para sa mga di-makatwirang mahabang mga susi. Kinakalkula mo ang isang hash ng susi at pumunta sa index na iyon. Ang problema ay kapag maraming mga susi ay may parehong hash. Mayroong iba't ibang mga paraan ng pagharap sa ito, ang ilan sa kung saan natalo ang layunin ng hash (ngunit madaling ipatupad). Ang ilan sa mga ito ay hindi at mapanatili ang palagiang pag-aari ng oras, kahit na sa average.

Ang pinakamahusay na nakita ko ay ang add-the-hash rehash, na kung ang memorya ay nagsisilbi mula sa mga dekada na ang nakakaraan, napatunayan ni Gonnet at Munroe ay isang average ng kaunti pa kaysa sa 4 na pag-access na may isang 50% na kadahilanan ng pag-load, anuman ang laki ng hash table. Gayunman, ito ay nangangailangan ng paggamit ng mga pangunahing numero, at ito ay ginagawang mahirap na ipatupad. Kailangan mong mahanap ang mga pangunahing numero sa paanuman. Sa kasamaang palad, ang mga talahanayan ng hash ay hindi nakakakuha ng napakalaking kaya ito ay hindi katawa-tawa.