哈希查找的应用
每一个文件都是由二进制数组成,可以将这些二进制数通过哈希函数映射成尽量均匀的标识符。
MD5是哈希函数的特例广泛应用于加密、网盘文件标识等场景。MD5就像一个函数,任意一个二进制串都可以作为自变量进入这个“函数”,然后会出来一个固定为128位的二进制串。下面用Python实现MD5
import hashlib
m = hashlib.md5()
m.update(b'123')
print(m.hexdigest())#hexdigest()在英语中hex有十六进制的意思,因此该方法是将hash中的数据转换成数据,其中只包含十六进制的数字。
'202cb962ac59075b964b07152d234b70'
理论上,不同内容的文件md5值可能会出现重复,但这种概率极低,概率为2的128次方分之一。因此实际应用中我们可以使用MD5来唯一标识文件。
文件上传网盘时,先计算该文件的MD5值,然后与网盘中所有的文件MD5值的list进行对比(得益于哈希查找不依赖序列大小的特性,即使网盘中文件巨多,也能在极短的时间内找到O(1)级)。
如果已经有该文件那么就把这个文件映射到你的网盘中。实际上就是多人共享一份文件。
如果没有该文件,那么就把文件上传网盘,并将MD5值更新进list中。