从map到hash
https://zybuluo.com/ysner/note/1175387
前言
这两种技巧常用于记录和去重量少而分散的状态。
都体现了映射思想。
\(map\)
我一般是数组开不下时拿这玩意判重。
据说特别慢???
定义:
(注意一下比较规则必须顾及到所有变量,否则会重复)
struct node
{
int x,y;
bool operator < (node const &o) const {return (x<o.x)||(x==o.x&&y<o.y);}
}
map<node,int>Map;
判定是否重复:
if(map[(node){x,y}]) ;
于是因太弱而被\(xzy\)教育了一番
排序
\(map\)还有一种排序功能(类比\(Tire\)树)。如果用\(map\)存字符串,那么用以下方式就能按字典序遍历所有字符串。
map<node,int>::iterator iter;
for(iter=Map.begin();iter!=Map.end();iter++)
{
string A=iter->first;
int B=iter->second;
...
}
据说还有一种叫\(unorder\_map\)的玩意儿,存储时不排序,省时间,但我并不想管。。。
\(hash\)
\(map\)虽然能有效区分、避免重复,但其自带的\(O(logn\))复杂度饱受\(oier\)诟病。
我们可以弃置一定正确性,来换取时间复杂度降为\(O(1)\),这就是\(hash\)本质。
如何保证更高的正确性?这个问题没有答案,因而很多\(hash\)方程都有其合理性。
一般在开始时,我们要选取一个\(Base\),原则是使\(Hash\)值分散,减少冲突。
字符串\(hash\)
通常将字符串看成一个进制数,比如\(ABAF\)看成\(1216\),
那么哈希值就是
\]
\(Base\)值自定,如果态量有限,可以使用较小的\(base\)使得所有状态不冲突,若状态量较大且分散,可以采用多次取模(多\(hash\))的方式尽可能避免冲突。
状态量少时状态可逆。
树\(hash\)
这玩意专为树的同构而生。
怎样的两颗树能称为同构树?
即树的深度相同、孩子、子树大小相同,只有孩子顺序不同。
\]
如果用异或和而不是\({\sum}\),就能使\(Hash\)过程可逆。但\(Hash\)值密集时容易冲突,改成累乘就好了。
当然,还有另一种方法,就是如果时间复杂度允许\(O(n^2)\),则可以以每个点为根,累计统计每颗子树大小乘不同素数的和。这些在根上的和排序后如果完全相同,也可证同构。
数\(hash\)
用来处理状态量大而分散的情况,没有\(map\)保险。。。
方程自定。
从map到hash的更多相关文章
- [BZOJ5109][LOJ #6252][P4061][CodePlus 2017 11月赛]大吉大利,今晚吃鸡!(最短路+拓扑排序+传递闭包+map+bitset(hash+压位))
5109: [CodePlus 2017]大吉大利,晚上吃鸡! Time Limit: 30 Sec Memory Limit: 1024 MBSubmit: 107 Solved: 57[Sub ...
- STL之map应用 +hash表(51nod 1095)
题目:Anigram单词 题意:给出词典,再给出一些单词,求单词的Anigram数量. 思路:先将字串转换成哈希表,然后再用map链接. hash表构造方法汇总:http://www.cnblogs. ...
- HDU_1401——同步双向BFS,八进制位运算压缩,map存放hash
这个速度比分步快一点,内存占的稍微多一点 Problem Description Solitaire is a game played on a chessboard 8x8. The rows an ...
- HDU_1401——分步双向BFS,八进制乘权值压缩,map存放hash
Problem Description Solitaire is a game played on a chessboard 8x8. The rows and columns of the ches ...
- HDU_1401——分步双向BFS,八进制位运算压缩,map存放hash
Problem Description Solitaire is a game played on a chessboard 8x8. The rows and columns of the ches ...
- poj 2503 Babelfish(Map、Hash、字典树)
题目链接:http://poj.org/bbs?problem_id=2503 思路分析: 题目数据数据量为10^5, 为查找问题,使用Hash或Map等查找树可以解决,也可以使用字典树查找. 代码( ...
- 【一题多解】 map 二分 hash trie poj 2503
各种方式解这道题!! 利用map 超时了 #include <iostream> #include <string> #include <map> using na ...
- ACM学习历程——UVA540 Team Queue(队列,map:Hash)
Description Team Queue Team Queue Queues and Priority Queues are data structures which are know ...
- HDU - 4821 String(窗口移动+map去重+hash优化)
String Given a string S and two integers L and M, we consider a substring of S as “recoverable” if a ...
随机推荐
- JS——思维拓展
1.阶乘求和:4的阶乘是1*2*3*4 <script> function jiechen(value) { var n = 1; for (var i = 1; i <= valu ...
- 几种fullpage用法及demo
jQuery全屏滚动插件fullPage.js https://github.com/alvarotrigo/fullPage.js http://www.dowebok.com/77.html 全屏 ...
- (转)Java任务调度框架Quartz入门教程指南(三)任务调度框架Quartz实例详解深入理解Scheduler,Job,Trigger,JobDetail
http://blog.csdn.net/zixiao217/article/details/53053598 首先给一个简明扼要的理解: Scheduler 调度程序-任务执行计划表,只有安排进执行 ...
- HDU_2212_水
DFS Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- ADODB.Stream
读写文本文件时出现了乱码,找到了ADODB.Stream,可以指定字符集读取文本 Function ReadUTF() Filename = "F:\vba\2018 - new\2018- ...
- 网络爬虫 robots协议 robots.txt
网络爬虫 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上 ...
- 【python】详解numpy库与pandas库axis=0,axis= 1轴的用法
对数据进行操作时,经常需要在横轴方向或者数轴方向对数据进行操作,这时需要设定参数axis的值: axis = 0 代表对横轴操作,也就是第0轴: axis = 1 代表对纵轴操作,也就是第1轴: nu ...
- 名字竞技场 V3.0
更新内容 1.加入新boss,更高的难度. 2.支持组队模式勒! 3.针对大家反应的人物属性算法进行了修改,现在人物属性更多的取决于名字而不是随机数 4.用户界面优化 INF.代码拿走赞留下,不然你赢 ...
- mysql登录出现1045错误
这个问题是在window server 2012上安装mysql之后, 远程访问时出现的1045错误 我新建了一个相同的用户用于远程访问, 密码也相同, 但是还是访问不了 参照链接:https://b ...
- 查看Linux中自带的jdk ,设置JAVA_HOME
在配置hadoop是,进行格式化hadoop的时候,出现找不到jdk 我用centos7是64位的, 发现本机有java ,就找了一下其位置 找到了jdk-1.7.0_75 which java [r ...