10-8,周日补课,早上没课
早起补交学费,学习,刷leetcode,做数据结构课程设计的内容,做了一小半,慢慢做。。
学习哈希表:用来快速查找(直接映射一对一,效率很高!):
下午连续四节“计算机网络”,干货满满,这个老师的讲课太棒了,一周四节,都是集中的,可惜了这个傻逼安排
晚上,没课,游戏,看代码,别人的那个“数据云雨”前端特效,看懂了绝大部分,还有一些没看懂,也不管了,或者之后再去理解
哈希到底有什么用,为什么用了哈希就能快速检索。首先要知道数据都存储在内存中,查找数据本质上查找地址,哈希算法就是用来快速找到地址的.
这是别人的评论,讲的很好
up有个重要的点没讲清楚,哈希到底有什么用,为什么用了哈希就能快速检索。有些基础的同学或许能明白,但对于小白可能不知道在讲什么。
首先要知道数据都存储在内存中,假设有几万条商品价格的数据在内存中,我们想从中找到“苹果”价格,如果你事先不知道商品存储规律,就只能一个个去查找,比如第一个是香蕉、第二个是梨,直到第250个才查到苹果。而如果我们记得每个商品价格存在那个位置就没必要去查找,比如直接去查250号的苹果价格。在计算机中的表现就是知道每条数据对应的内存地址,直接去取相应地址的数据。现在的需求是如何在计算机中实现告诉我一个商品描述,瞬间得到该商品信息存储在哪个地址。于是数学家们设计了一套算法,这套算法能够对数据进行一个简单的摘要,可以简单理解为用不同的整数代表不同的数据,这套算法也就是up提到的哈希算法。在存储数据时,我们先对数据的一些描述信息,比如“苹果”,进行哈希运算,得到一个整数,将该整数做些简单处理,转化为一个内存地址,然后将数据存在这个地址对应的存储空间。下次取数据时,仍然对描述信息做哈希运算,得到对应的存储地址,然后到该地址直接取到完整的数据。这样就不用一个个去遍历查找了,即便上亿条数据,也可以瞬间得到想要的数据。
还有几个点补充。这种数据储存的地址依赖哈希运算得到的整数,所以存储是不连续的,编程中提到的字典、map一般就是这种数据结构,而另一种数据结构“数组”则是连续存储的,这两种数据结构各有优缺点各有用途。还有哈希具体的算法实现有很多,也可以根据不同的需求进行不断完善改进。哈希可以对任意数据运算,包括文本,电影,图片,这个很容易理解,因为计算机中数据本质都是二进制01。
还有个很重要的点,哈希运算得到的值并不一定唯一,也就是不同数据有可能哈希值相同。这个也很容易理解,比如我们生成一个8位的哈希值,只要正数,最多也就127个数,如果对1000个数据进行运算,生成1-127之间的数,那必然会有重复。当然这个例子比较极端,我们取的位数不可能那么小。一般重复率极低,我们也有其他办法应对重复的问题。
标签:存储,哈希,算法,地址,查找,246,数据
From: https://www.cnblogs.com/zhanjianhai/p/17748425.html