哈希表

时间复杂度:基本上是 O(1)
因为可以进行很多优化:例如离线扩容
使用时基本很少有扩容的现象

特征:
相同输入,相同输入
不同输入,均匀分布

哈希冲突的解决方法:
链地址法:数组+链表
开放地址法:当前位置被占,就往下移动一位,如果满,就扩容
二次哈希:进行二次哈希值计算,用的是平方的一种形式

问题:100T的一个文件,每行一个字符串,输出重复的字符串
准备1000台机器,进行编号(0-999).
每行数据计算一个哈希值,再模1000,得到余数,放置到对应的电脑里
那么相同的数据都会放在一台机器里面

问题:

思路:
准备两张hash表,如果一张hash,无法做到等概率返回值
结构:例如 A 先进入,是第 0 个进来的,表1存储为(A,0),表2存储为(0,A)。B进入,是第 1 个进来的,表1存储为(B,1),表2存储为(1,B),此时有个 size 变量,size=2

使用Math.Random(size)返回 表2 的值,做到等概率
删除操作 delete(key),例如现在是 0-999 个数组,要删除第17个,也就是 在 表2 里面 (17,String17)这条数据,现在的做法是,将两张表的最后一条数据(String999,999)拿出来覆盖第17条数据(String17,17),并且 size-- 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值