交付:哈希表 + 冲突处理 + 两个应用

交付:哈希表 + 冲突处理 + 两个应用

这是这条路线的最终作品。把完整的 HashMap 写出来(格子 + 哈希函数 + put / get / delete,用链地址法处理冲突),再写词频统计,然后一次验完五条: 放完 5 个人,第 7

阅读更多 →
第四步:拿它去做去重和计数

第四步:拿它去做去重和计数

哈希表最常用的两件事。补全 top_word:统计词频,返回出现最多的那个词。

阅读更多 →
第三步:接上删除,别误伤同格的邻居

第三步:接上删除,别误伤同格的邻居

加上 delete。删掉 15 号之后,把两件事一起输出:15 号查出来是什么、23 号查出来是什么,中间用 / 隔开。 ——只删掉该删的那条才对得上,把整格清空或者一条没删都会露馅。

阅读更多 →
第二步:接上按键查

第二步:接上按键查

给它加上 get:找到返回名字,找不到返回 没这个人。 查 23 号(它和 15 号挤在同一格),输出结果。

阅读更多 →
第一步:格子、哈希函数和插入

第一步:格子、哈希函数和插入

最终作品第一步:写出 HashMap,要有一排格子(每格挂一个列表)、一个 slot 方法和一个 put。 放完五个人之后输出第 7 格里有几个。

阅读更多 →
五个人占了几个格子

五个人占了几个格子

运行下面这段程序(链地址法,8 格): def new_table(cap): return [[] for _ in range(cap)] table = new_table(8) fo

阅读更多 →
为什么说哈希表

为什么说哈希表"平均"是 O(1)

哈希表的复杂度要加"平均"两个字,是因为【0】。

阅读更多 →
一个够用的哈希表至少要有哪几样

一个够用的哈希表至少要有哪几样

手写一个够用的哈希表,至少要有【0】。

阅读更多 →
搬完之后一个都不能少

搬完之后一个都不能少

同一个 rehash。搬家最容易出的错是漏人。 补全后输出新表里非空的格子有几个,和搬之前对上。

阅读更多 →
⚠️ 换了房子,所有人都要重新算位置

⚠️ 换了房子,所有人都要重新算位置

rehash 不是把内容原样搬过去——格子数变了,每个键算出来的槽位也跟着变。 补全 rehash:把 4 格表里的人重新放进一张 8 格表。补全后输出 15 号在新表里坐第几格。

阅读更多 →