猫史档案馆


[Rust]hashmap(哈希表/哈希映射)

用户:CaTionalCaTional查看:344 回复:7 评论:26 创建时间:2022-04-02T19:35:20


概念

假如现在有10个用户名和用户密码,你会如何存储这些信息?二位数组,你一定会毫不犹豫的回答出来。

但是啊,怎么可能这么简单呢?现在我们再输入10个用户名和密码,是不是意味着要修改代码中的数组数量呢?哎,那么这时候你就会想到vector了。可是啊,vector的速度太慢了,在我们验证密码正确时,一般都会去想遍历vector内的值,数量一多,反应速度自然就快不到那里去。但是你仔细回想一下,vector中是不是每个下标就对应一个值呢?

哈希表

哈希表就是类似vector的这么一个容器。一般使用哈希表时,会跳过遍历过程,直接通过下标去取出所需的值。假设现在有一个哈希表

hash = [

1:PRC

2:USA

3:UK]

这里面就有这些东西(意思是PRC的下标是1,以此类推)

我们需要取出USA然后丢到rubbish box,那么我们只需要知道下标,而不需要一个一个看,这些空间里面那个是USA。

哈希

哈希是一个过程,一般通过一定的算法将一串字符提取其中的信息输出,也就是散列算法。比如:我今天吃了番茄炒蛋饭。要怎么缩句?我吃饭了。哈希类似缩句,但是要更复杂点。一般常用的有MD5(1995年后被验证存在安全问题,所以现在都是用作信息摘要算法验证文件的正确性),SHA家族。

那么我们现在尝试一下刚开始的问题。

非哈希实现

user =[

1256 -》Henry

1356 -》Jack

]

相信你也发现问题了,假设我有两个用户的密码相同怎么办?

哈希实现(和上面是一样的内容)

user_hashmap=[

74e8384423928a9f31406f26d124ad82f8f4ff4e51120a8c4bff125喵467f87b -》848348709a8d150d14e3ec5fe17736062425db71b喵c754bd6f8dbe83410c55a

b26b33956cf5e09b9bda3f13e0f5c76b73e9d24f4f4d5a58bdd9de6b8e0a4d8c -》

56c5869b15e6a5975c7ac0c06b767e308c4c922e32456a15b4b09e44cb2f0a55

]

不难看出,通过hash实现的储存,不仅方便查找,而且在用户输入名字和密码时,将两个都转换成hash,一一对比,成功的就允许登陆就好了。节约了遍历时间。

 

这就是通过已学知识,得到新的领悟。

 


回复

上一页第 1 页 / 共 1 页下一页
yee089yee089

温馨提示:csp的初赛会考哈希,请各位严肃亿点()()

点赞0


评论

不至于

去年就考了()

当时我还被整蒙了

顶多是考哈希思想吧

不,给你一段数据和哈希的方法,然后让你填完成操作后的数列

我咋没看到这题?

maybe 我记错了()

哦,没有记错,2021的csp-s第6题,那一次我去-s看题了()

虽然题面记错了()


AlcalaAlcala

哈希表我喜欢用unordered_map(

点赞0


评论

哈希表的实现其实大同小异,rust社区也用别的hashmap实现,很少用STD,STD搞这个主要还是还有别的函数要调用。

std的sort和deque(vector)很良心(

社区放着更好的板条箱为什么不用呢?你现在随便去看一个rust项目都在用tokio,有谁在用官方的多线程?

看来您没打过OI()

打IO那就没办法了,STD的勉强用用吧

平板电视很好用

《std》是stl啊啊啊啊啊啊啊啊啊啊啊啊

stl的优点是肯定没有bug(),缺点是常数太大

csp和noi都是开O2的吧

csp应该没有这么良心()我不想开O2,因为之前差点因为这个tle过……

HHHHH,std是Rust的std。我从来没说这是C++,你没看见我已经标注了rust?rust除了std还有core。C++谁都知道只有stl.另外,大型比赛不会开O2和其他优化

会开o2好不好,还有除了stl比赛还能用平板电视啊


CaTionalCaTional

声明:本人不会再在BCM和他的子平台发任何教程。

点赞0


评论


治愈绾兮治愈绾兮

AZ

点赞0


评论

其实我是来查hash的()()()


屑老冯屑老冯

十分感谢,我需要。

 

点赞0


评论


小萝卜cXsQ小萝卜cXsQ

哈希表的每一个值的下标都是用哈希函数算出来的,哈希函数的计算方法一定程度上决定了哈希冲突产生的概率(哈希冲突就是两个值计算出来的下标一样),但是过“好”的哈希函数会使哈希表会产生过多空位,造成空间浪费,而哈希表的大小也会决定空位的多少。所以,哈希表是典型的用空间换时间

点赞0


评论

就目前储存空间而言,服务器1G一块钱这算不了什么钱。低延迟能够给用户和特定服务带来更好体验。是很划算的。


༺追梦の人༻༺追梦の人༻

额,再出一个二叉搜索树的教程

点赞0


评论

出了也没人看,懒得出,以后要出也只会在B站发

3个月才168人看,谁爱发谁发

。。