没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
全国信息学竞赛算法研究论文合集
2
目 录
Hash 函数的设计优化 ....................................................................................................................................... 4
Hash 在信息学竞赛中的一类应用 ........................................................................................................... 14
部分贪心思想在信息学竞赛中的应用 .................................................................................................. 25
从一类单调性问题看算法的优化 ............................................................................................................ 33
计算几何中的二分思想 ................................................................................................................................. 43
论程序的调试技巧 ............................................................................................................................................ 51
欧拉回路性质与应用探究 ............................................................................................................................ 69
平衡规划 ................................................................................................................................................................. 93
浅谈“调整”思想在信息学竞赛中的应用 ..................................................................................... 117
美,无处不在 ..................................................................................................................................................... 127
浅谈二分策略的应用 ..................................................................................................................................... 141
浅谈基于分层思想的网络流算法 .......................................................................................................... 148
浅谈类比思想 ..................................................................................................................................................... 172
浅谈数据的合理组织 ..................................................................................................................................... 187
贪婪的动态规划 ............................................................................................................................................... 201
浅谈信息学竞赛中的区间问题................................................................................................................ 214
浅谈信息学中状态的合理设计与应用 ................................................................................................ 256
浅析倍增思想在信息学竞赛中的应用 ................................................................................................ 275
浅析非完美算法在信息学竞赛中的应用 .......................................................................................... 302
浅析信息学中的“分”与“合” .......................................................................................................... 317
数据结构的提炼与压缩 ............................................................................................................................... 331
3
数学模型的建立和选择 ............................................................................................................................... 379
图论的基本思想及方法 ............................................................................................................................... 393
问题中的变与不变 .......................................................................................................................................... 411
信息学竞赛中搜索问题的常见优化技巧 .......................................................................................... 421
一类猜数问题的研究 ..................................................................................................................................... 430
用改进算法的思想解决规模维数增大的问题 ................................................................................ 438
由图论问题浅析算法优化 .......................................................................................................................... 450
与圆有关的离散化方法 ............................................................................................................................... 469
正难则反–浅谈逆向思维在解题中的应用 ..................................................................................... 481
置换群快速幂运算研究与探讨................................................................................................................ 490
最短路算法及其应用 ..................................................................................................................................... 501
4
Hash 函数的设计优化
天津南开中学 李羽修
【摘要】
Hash 是一种在信息学竞赛中经常用到的数据结构。一个好的 Hash 函数可以很大程度上提高程序的整体时
间效率和空间效率。本文对面向各种不同标本(关键值)的 Hash 函数进行讨论,并对多种常用的 Hash 函数进
行了分析和总结。
【关键字】
Hash 函数,字符串,整数,实数,排列组合
【正文】
对于一个 Hash 函数,评价其优劣的标准应为随机性,即对任意一组标本,进入 Hash 表每一个单元(cell)
之概率的平均程度,因为这个概率越平均,数据在表中的分布就越平均,表的空间利用率就越高。由于在竞赛
中,标本的性质是无法预知的,因此数学推理将受到很大限制。我们用实验的方法研究这个随机性。
一、整数的 Hash 函数
常用的方法有三种:直接取余法、乘积取整法、平方取中法。下面我们对这三种方法分别进行讨论。以下
假定我们的关键字是 ,Hash 表的容量是
M
,Hash 函数为
kh
。
1.直接取余法
我们用关键字
k
除以
M
,取余数作为在 Hash 表中的位置。函数表达式可以写成:
Mkkh mod
。
例如,表容量
12M
,关键值
100k
,那么
4kh
。该方法的好处是实现容易且速度快,是很常用的一
种方法。但是如果
M
选择的不好而偏偏标本又很特殊,那么数据在 Hash 中很容易扎堆而影响效率。
对于
H H H H H H
H H H H
H H H H H
H H H H
H
H H H H
H H H H H
H H H H
H H H H H
H H H H H
P
P
P P P
P P
P P
P
P P
P
P
P
P P
P
P
P
的选择,在经验上,我们一般选择不太接近
n
2
的一个素数;如果关键字的值域较小,我们一般在
此值域 1.1~1.6 倍范围内选择。例如
k
的值域为
600,0
,那么
701M
即为一个不错的选择。竞赛的时候可以
写一个素数生成器或干脆自己写一个“比较像素数”的数。
我用 4000 个数插入一个容量为 701 的 Hash 表,得到的结果是:
测试数据
随机数据
连续数据
最小单元容量:
0
5
最大单元容量:
15
6
期望容量:
5.70613
5.70613
标准差:
2.4165
0.455531
5
可见对于随机数据,取余法的最大单元容量达到了期望容量的将近 3 倍。经测试,在我的机器(Pentium III
866MHz,128MB RAM)上,该函数的运行时间大约是 39ns,即大约 35 个时钟周期。
2.乘积取整法
我们用关键字
k
乘以一个在
1,0
中的实数
A
(最好是无理数),得到一个
k,0
之间的实数;取出其小数部
分,乘以
M
,再取整数部分,即得
k
在 Hash 表中的位置。函数表达式可以写成:
1mod)( kAMkh
;
其中
1modkA
表示
kA
的小数部分,即
kAkA
。例如,表容量
12M
,种子
2
15
A
(
2
15
A
是
一个实际效果很好的选择),关键值
100k
,那么
9kh
。
同样用 4000 个数插入一个容量为 701 的 Hash 表(
2
15
A
),得到的结果是:
测试数据
随机数据
连续数据
最小单元容量:
0
4
最大单元容量:
15
7
期望容量:
5.70613
5.70613
标准差:
2.5069
0.619999
从公式中可以看出,这个方法受
M
的影响是很小的,在
M
的值比较不适合直接取余法的时候这个方法的
表现很好。但是从上面的测试来看,其表现并不是非常理想,且由于浮点运算较多,运行速度较慢。经反复优
化,在我的机器上仍需 892ns 才能完成一次计算,即 810 个时钟周期,是直接取余法的 23 倍。
3.平方取中法
我们把关键字
k
平方,然后取中间的
M
2
log
位作为 Hash 函数值返回。由于
k
的每一位都会对其平方中
间的若干位产生影响,因此这个方法的效果也是不错的。但是对于比较小的
k
值效果并不是很理想,实现起来
也比较繁琐。为了充分利用 Hash 表的空间,
M
最好取 2 的整数次幂。例如,表容量
162
4
M
,关键值
100k
,那么
8kh
。
用 4000 个数插入一个容量为 512 的 Hash 表(注意这里没有用 701,是为了利用 Hash 表的空间),得到的
结果是:
测试数据
随机数据
连续数据
最小单元容量:
0
1
最大单元容量:
17
17
期望容量:
7.8125
7.8125
标准差:
2.95804
2.64501
效果比我们想象的要差,尤其是对于连续数据。但由于只有乘法和位运算,该函数的速度是最快的。在我
剩余531页未读,继续阅读
资源评论
zpjun
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- AI大模型文本生成模型案例介绍:使用大规模预训练模型生成文本,如GPT-3
- 305建筑结构水电欧式6套(14.5x20.2)\施工图\D型施工图\建筑v5D平面.dwg
- AI大模型情感分析模型案例介绍:基于深度学习的情感分类器,分析文本情感极性
- 305建筑结构水电欧式6套(14.5x20.2)\施工图\D型施工图\建筑D立面剖面.dwg
- 305建筑结构水电欧式6套(14.5x20.2)\施工图\D型施工图\电 白图.dwg
- testtesttesttesttesttesttesttesttesttesttesttesttesttesttest
- 305建筑结构水电欧式6套(14.5x20.2)\施工图\D型施工图\电pmzz.dwg
- Python智能教育系统案例介绍: 开发一个个性化学习推荐系统,根据学生的学习情况和兴趣,推荐适合的学习资源和课程
- Python金融风控系统案例介绍: 基于机器学习和数据分析技术,设计一个能够预测金融风险和欺诈行为的系统
- wireshark抓包及分析.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功