标签:md5 复杂 空闲 存储 出现 遍历数组 没有 crc 比例
散列表用的是数组支持按照下标随机访问数据的特性,所以散列其实是数组的一种扩展,由数组演化而来。
散列表(哈希表 Hash Table):由散列函数(哈希函数)和数组构成,底层存储数据的是数组。
散列函数(键转化为散列值即数组下标)的设计:
散列冲突:即使著名的MD5、SHA、CRC等哈希算法也无法完全避免散列冲突。
常用散列冲突解决办法,分为两类:
开放寻址法
尽可能保证散列表中空闲元素的比例,空闲越少越容易冲突
装载因子:散列表的装载因子 = 填入表中的元素个数 / 散列表的长度
链表法:在散列表中,每个散列值对应一个桶(bucket)或者槽(slot)散列值,每个桶或者槽对应一条链表。
WORD文档中单词拼写的检测:常用的英文单词20w个左右,假设每个单词的平均长度为10,平均一个单词占用10个byte的内存空间,那20w个单词占用2MB内存空间,即使扩大10倍,也只是20MB内存空间,以目前计算机设备的内存空间,是完全可以hold住的。将单词作为键,查找哈希表,如果返回值大于0,则存在,否则判断为拼写错误。
思考:
思考1:将url作为key,次数作为value,同时记录最大次数max,时间复杂度O(n);只要最大次数不是特别大的值,例如,极端情况超过10w,可以采用桶排序O(n),否则采用快排,时间复杂度O(nlog n);
思考2:将一个数组存放进hash表,字符串作为key,value为出现次数;遍历另外一个数组的字符串作为key值去查找,如果有返回正值,则相同,否则,没有。时间复杂度O(n);
标签:md5 复杂 空闲 存储 出现 遍历数组 没有 crc 比例
原文地址:https://www.cnblogs.com/petewell/p/11601667.html