
散列表
概念



散列表本身就是为了查找
原始人思想

散列表思想

6%5 是 1
1%5 也是1 冲突
冲突怎么办?
线性探测法
就往后找,1跑到索引为2


然后查找,可以发现,只要没冲突就只用查找1次
然后你想找10的话,发现索引为0的地方什么都没有,所以查1次为空就结束
然后这个方法空间用的多,但查的快

然后这里失败情况解释一下
1是%之后为0的情况
3是%之后为1的情况,也就是说要往后找3次才看见空
这上面是没有循环的情况下的
当然,这个表是可以循环的,比如我们想插个24,就会到索引为0这里,查找的话也一样

删除

这里把9删了的话,4就查不到了,怎么办

那就可以把9下面弄个False,变成逻辑删除就行,并不是真正的删除
然后还有二种散列表存放的方法

上面这些ab上面的都是题目会给你的
然后还要一些处理冲突的方法

这写的什么玩意,具个例子就知道了

这里9占了索引为4的之后,4不得不去索引为5的地方
因此索引为5的本来是为所有余数为5的数开放,但现在余数为4的也放进去了,所以就是上面说的即向同义词开放,也对非同义词开放
拉链法

这种不仅要串起来,还会排个序,不过也可以不排序
线性探测法的小例子

这里第2行是余数,第三行是查找次数

然后是找失败的,找空位置

装填因子

装填因子就是看表放的多满,这里4/7

散列函数如果是对2取余肯定比对100取余更容易发生冲突
做题
1




2


这里到索引为4的时候,是逻辑删除,并不是真正的删除,所以还得往后查找,查找到索引0是空,所以查找了2次

c