当前位置: 首页 > web >正文

模拟散列表

哈希表

存储结构:

开放寻址法

拉链法

字符串哈希方式

使用哈希表的情况:

  1. 快速查找
  2. 频率统计
  3. 图的邻接表表示(在图的表示中,哈希表可以用来存储图的邻接表,快速访问某个节点的所有邻接节点。)
  4. 把一个比较庞大的空间或者值域映射到一个较小的空间(把一个10^-9~10^9的数映射成0~10^5之间的数,完成这一过程的函数称为哈希函数

哈希函数写法:

  1. x mod 10^5(mod的数尽量取质数)
  2. 冲突(把不同的数映射成同一个数)

处理冲突的方法

开放寻址法

拉链法

拉链法

每一个位置都是一个槽,在每一个槽下面拉一条链,用来存储当前槽上已映射的数(槽代表的数字是链上映射成的数字)

AC代码

//拉链法
#include <cstring>
#include <iostream>using namespace std;const int N = 100003;int h[N], e[N], ne[N], idx;//h是槽,链用链表表示
//插入
void insert(int x)
{int k = (x % N + N) % N;//哈希函数+N再mod N目的是让K变成一个正数e[idx] = x;ne[idx] = h[k];h[k] = idx ++ ;
}bool find(int x)
{int k = (x % N + N) % N;for (int i = h[k]; i != -1; i = ne[i])//遍历链表if (e[i] == x)return true;return false;
}int main()
{int n;cin>>n;memset(h, -1, sizeof h);//把槽清空,空指针用-1表示while (n -- ){char op[2];int x;cin>>op>>x;if (*op == 'I') insert(x);//插入else{if (find(x)) puts("Yes");else puts("No");}}return 0;
}

开放寻址法

只开了一个一维数组,但是一维数组的长度经验上来说要开到题目上的2~3倍

AC代码:

//开放寻址法
#include <cstring>
#include <iostream>using namespace std;const int N = 200003, null = 0x3f3f3f3f;//Null表示这个位置是空的int h[N];//槽int find(int x)
{int t = (x % N + N) % N;while (h[t] != null && h[t] != x)//有人并且不是x{t ++ ;//往后继续看if (t == N) t = 0;//当看到最后一个位置,令t=0循环从第一个位置开始看}return t;//返回x在哈希表中的位置,如果x不在哈希表中则返回x应该存储的位置
}int main()
{memset(h, 0x3f, sizeof h);//把所有位置初始化为空int n;scanf("%d", &n);while (n -- ){char op[2];int x;cin>>op>>x;if (*op == 'I') h[find(x)] = x;else{if (h[find(x)] == null) puts("No");else puts("Yes");}}return 0;
}
http://www.xdnf.cn/news/812.html

相关文章:

  • VLA论文精读(十四)PointVLA: Injecting the 3D World into Vision-Language-Action Models
  • unity打包安卓时的签名文件jks转换keystore
  • PyCharm 在 Linux 上的完整安装与使用指南
  • XAML基本语法与例子
  • OpenCV 图形API(45)颜色空间转换-----将图像从 BGR 色彩空间转换为 YUV 色彩空间函数BGR2YUV()
  • Unity打开项目时目标平台被改变
  • BUUCTF PWN刷题笔记(1-9)
  • ESP-ADF外设子系统深度解析:esp_peripherals组件架构与核心设计(显示输出类外设之AW2013)
  • Django 入门指南:构建强大的 Web 应用程序
  • compat-openssl10和libnsl下载安装
  • 从 TinyZero 到 APR:语言模型推理能力的探索与自适应并行化
  • JBoss 项目修复笔记:绕开 iframe 安全问题,JSF 与 Angular 最小代价共存方案
  • 高防IP能抵御哪些类型的网络攻击?
  • 【Linux】多线程任务模块
  • 【TeamFlow】4.2 Yew库详细介绍
  • 基础版-图书管理系统
  • AOSP Android14 Launcher3——点击桌面图标启动应用动画流程
  • url和http
  • 海外服务器安装Ubuntu 22.04图形界面并配置VNC远程访问指南
  • AI 速读 SpecReason:让思考又快又准!
  • opencv 图像矫正的原理
  • 小刚说C语言刷题——1039 求三个数的最大数
  • PyTorch与TensorFlow模型全方位解析:保存、加载与结构可视化
  • 明心见性与真如三昧
  • CTF web入门之SQL注入使用工具sqlmap
  • 网页下载的m3u8格式文件使用FFmpeg转为MP4
  • C#常用LINQ
  • 快速搭建 Cpolar 内网穿透(Mac 系统)
  • 嵌入式开发板调试方式完全指南:串口/SSH/Telnet及其他方式对比
  • 深度学习框架PyTorch——从入门到精通(3.3)YouTube系列——自动求导基础