从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 ...
随机推荐
- 15个最受欢迎的Python开源框架(转)
原文地址:http://blog.jobbole.com/72306/ Django: Python Web应用开发框架 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受 ...
- 【sqli-labs】 less54 GET -Challenge -Union -10 queries allowed -Variation1 (GET型 挑战 联合查询 只允许10次查询 变化1)
尝试的次数只有10次 http://192.168.136.128/sqli-labs-master/Less-54/index.php?id=1' 单引号报错,错误信息没有显示 加注释符页面恢复正常 ...
- 如何知道自己的CPU支持SLAT
因为WP8 SDK发布,很多WP8的开发者们也开始陆续安装WP8的SDK的,然而安装WP8的SDK有很多软件和硬件的要求,其中有一个就是——要求CPU支持二级地址转换(SLAT),如果CPU不支持二级 ...
- CAD动态绘制样条线(com接口)
主要用到函数说明: _DMxDrawX::SendStringToExecuteFun 把命令当着函数执行,可以传参数.详细说明如下: 参数 说明 IDispatch* pParam 命令参数,IMx ...
- 手把手从python安装到setuptools、pip工具安装
一.python安装1.基础开发库 apt-get install gccapt-get install openssl libssl-dev 2.安装数据库和开发库 apt-get install ...
- iPhone设备当前IP和SSID的获取
#import <Foundation/Foundation.h> typedef void(^Complation)(NSString *res); @interface WIFIMan ...
- BZOJ 1572 USACO 2009 Open 工作安排
先把工作按照Deadline从小到大排序 然后按顺序取,deadline大于现在总用时就取,等于现在总用时就从前面已取的工作中找一个P最小的同它比较,取P较大的一个 用优先队列维护已取工作中P的最小值 ...
- Maven学习总结(27)——Maven自定义打包插件maven-assembly-plugin详解
Assembly插件会生成 "assemblies", 此特性等同于的Maven 1 distribution plug-in..该插件不仅支持创建二进制归档文件,也支持创建源码归 ...
- oracle --审计
审计是监视和记录所选用户的数据活动的.审计操作类型包括登录企图.对象访问和数据库操作.审计记录包括被审计的操作.执行操作的用户.操作的时间等信息. 1 . 启用审计 其具体步骤如下: (1 ) 进入O ...
- nyoj_915_+-字符串_201402261520
+-字符串 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 Shiva得到了两个只有加号和减号的字符串,字串长度相同.Shiva一次可以把一个加号和 ...