hash 在信息学竞赛中的一类应用
DESCRIPTION
Hash 在信息学竞赛中的一类应用. 安徽师范大学附属中学杨弋. 前言. Hash. 前言. Hash. 前言. CRC32!. Hash. MD5!. SHA-1!. More …. 例 1. 多维匹配. 一维:在一个串中找另一个串第一次出现的位置 二维:在一个字符矩阵中找另一个字符矩阵第一次出现的位置 如果扩展到 k(k ≤ 10) 维呢?. c. a. c. c. a. b. a. b. a. b. a. 例 1. 多维匹配. 一维的情况: Rabin-Karp 算法. O(NM)?. c. a. b. é. ù. - PowerPoint PPT PresentationTRANSCRIPT
HashHash 在信息学竞赛中的一在信息学竞赛中的一类应用类应用安徽师范大学附属中学安徽师范大学附属中学 杨弋杨弋
前言前言
Hash
前言前言
Hash
前言前言
HashCRC32!
MD5!
SHA-1!More…
例例 1.1. 多维匹配多维匹配 一维:在一个串中找另一个串第一次出一维:在一个串中找另一个串第一次出现的位置现的位置 二维:在一个字符矩阵中找另一个字符二维:在一个字符矩阵中找另一个字符矩阵第一次出现的位置矩阵第一次出现的位置 如果扩展到如果扩展到 k(kk(k≤≤10)10) 维呢?维呢?
例例 1.1. 多维匹配多维匹配 一维的情况:一维的情况: Rabin-KarpRabin-Karp 算法算法
c a ca b a b c a b a
c a b
O(NM)?
例例 1.1. 多维匹配多维匹配 一维的情况:一维的情况: Rabin-KarpRabin-Karp 算法算法
a b c× ××
1pp2
ab c
× ××1pp2
求和××pp2
×p3
a
×1
O(NM)?O(N+M)!
qmodiXpMiXSpfSf Mii ][][)()( 1
qmod
piSSf
Slen
i
iSlen][)()(
1
)(
例例 1.1. 多维匹配多维匹配 扩展到二维的情况扩展到二维的情况a b a ac b b ca b a c
×p2
×p
×p2 ×p2 ×p2
×p ×p ×p
×q3
q3
q3
q2
q2
q
q
×q2 ×q
例例 1.1. 多维匹配多维匹配 扩展到二维的情况扩展到二维的情况
×p3
×p 1
××p2
×p2 p
××p3
×p4
×1
例例 1.1. 多维匹配多维匹配 更高维的情况……更高维的情况……
例例 1.1. 多维匹配多维匹配传统算法传统算法
O(k(N+M))O(k(N+M))难以理解难以理解
相对实现困难相对实现困难
多维多维 Rabin-KarpRabin-KarpO(kN+M)O(kN+M)易于理解易于理解
易于编写,不易出错易于编写,不易出错
例例 1.1. 多维匹配多维匹配回顾:我们是怎么计算出回顾:我们是怎么计算出 HashHash 值的?值的?
部分和?两端增加或者删除一位后的两端增加或者删除一位后的 HashHash 值值计算两个串连接后的串的计算两个串连接后的串的 HashHash 值值 O(1)O(1)
O(1)O(1)
线段树!Sparse Table!
分块!预处理!
平衡树!
例例 2.2. 树和图的同构树和图的同构有根树有根树
=≠
例例 2.2. 树和图的同构树和图的同构有根树有根树
例例 2.2. 树和图的同构树和图的同构有根树有根树 对每一个子树计算一个Hash 值……
1234
1234 12341234
1234
× 131 = 1417
(mod 2081)
1417
1417
1234 1234
(mod 2081)
(( ×557)xor ×557)xor
924 × 131 = 346
1417
1417
346
68
例例 2.2. 树和图的同构树和图的同构有根树有根树
68 516
≠≠
例例 2.2. 树和图的同构树和图的同构有根树有根树 O(n log n)
可以给出具体对应方案可以使用 Hash 表在 O(1) 时间内查询
例例 2.2. 树和图的同构树和图的同构有根树,另一种办法有根树,另一种办法
树→串
2 3 0 1 0 0 1 0
子树的顺序?字母序?
按 Hash 值排序!
例例 2.2. 树和图的同构树和图的同构无根树无根树f(u,v) 表示以 u 为 v 的父亲节点时以 v 为根的子树的 Hash 值
u
v
例例 2.2. 树和图的同构树和图的同构无根树无根树 类似地,有根森林,甚至任意图的同构问题也是可以使用 Hash函数解决的
总结总结HashHash 的本质的本质
Hash信息量大不易比较
方便高效地比较
“ 概括”化繁为简
总结总结正确性优美性 有所舍弃?
效率简洁扩展性 有所收获!题目适合 理想的算法自己
结束结束
谢谢!谢谢!