当前位置:网站首页>hash table 实现代码
hash table 实现代码
2022-07-29 12:44:00 【菜鸟的人工智能之路】
C++代码中有unodered_map<>()可实现hash操作,但是在追求效率的代码中,使用会严重影响代码的执行效率。
通常使用自己手动实现的hash table效率会有大幅度的提升,这对于追求极致效率的题目至关重要。
通常的hash操作有字符串哈希和较大数据的哈希。
- 字符串哈希,通常利用移位操作。hval = hval << 5 + (str[i] - 'a' + 1),同时需要将 hval 进行缩放,这里一般可以对13131(较大的质数,实验发现哈希冲突较小)或者2的次方(CPU计算除法时对于2的次方速度较快)取余。
- 对较大的数据哈希,一般也是对13131或者2的次方取余。(这其实也就是hash table的范围)
#define HASHSIZE 10
#define ull unsigned long long
typedef unsigned int uint;
typedef struct Node {
const char* key;
const char* value;
Node* next;
}Node;
struct HashTable {
Node* node[HASHSIZE];
void clear() {
for (int i = 0; i < HASHSIZE; ++i)
node[i] = nullptr;
}
uint hash(const char* key) {
ull res(0);
int i = 0;
while (key[i] != '\0') {
res = res << 5 + (key[i] - 'a' + 1);
++i;
}
return res % HASHSIZE;
}
Node* lookup(const char* key) {
Node* np;
uint index = hash(key);
for (np = node[index]; np; np = np->next)
if (!strcmp(key, np->key))
return np;
return nullptr;
}
bool install(const char* key, const char* value) {
uint index;
Node* np;
if (!(np == lookup(key))) {
index = hash(key);
np = (Node*)malloc(sizeof(Node));
if (!np) return false;
np->key = key; np->next = node[index];
node[index] = np;
}
np->value = value;
return true;
}
};边栏推荐
猜你喜欢

近期论文总结

为什么用了大牌工具后报表开发依然头痛

snap软件中哨兵2A数据预处理及六种常用植被指数的计算

TiDB upgrade share with case (TiDB v4.0.1 to v5.4.1)

容器化 | 在 Rancher 中部署 MySQL 集群

金仓数据库KingbaseES客户端编程接口指南-ODBC(6. KingbaseES ODBC 的扩展属性)

Bika LIMS - SENAITE using open source LIMS set (users, roles and departments)

Py之eli5:eli5库的简介、安装、使用方法之详细攻略

图解 Attention(完整版)!

C语言小游戏------贪吃蛇----小白专用
随机推荐
传奇版本添加npc修改增加npc方法以及配置参数教程
常坐飞机的你,为什么老惦记着“升舱”?
Nacos分级存储模型-集群配置与NacosRule负载均衡
MySQL如何对SQL做prepare预处理(解决IN查询SQL预处理仅能查询出一条记录的问题)
TiCDC同步延迟问题处理
RedisTemplate使用详解
3D Laser SLAM: Interpretation of LeGO-LOAM Papers---Hardware System Part
微信H5网页分享只显示链接处理办法
详述 TCP 的 TIME_WAIT 状态要维持 2MSL 的原因
APP本机号码一键登录
【云原生】微服务之Feign的介绍与使用
mysql根据多字段分组——group by带两个或多个参数
Scala 简介一
金仓数据库KingbaseES安全指南--6.7. GSSAPI身份验证
Mysql stored procedures, rounding
[WeChat applet] WXSS and global, page configuration
DVWA全级别通关教程
pycharm专业版使用
The IDEA of Database plug-in Database Navigator plug-in
框架常用注解解释