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\),

那么哈希值就是

\[Hash[x]=1*Base^3+2*Base^2+1*Base+6
\]

\(Base\)值自定,如果态量有限,可以使用较小的\(base\)使得所有状态不冲突,若状态量较大且分散,可以采用多次取模(多\(hash\))的方式尽可能避免冲突。

状态量少时状态可逆。

树\(hash\)

这玩意专为树的同构而生。

怎样的两颗树能称为同构树?

树的深度相同、孩子、子树大小相同,只有孩子顺序不同

\[Hash[x]=\sum_{异或和}(Hash[son_{1..k}]+Base1)*(sz[x]+Base2)+deep[x]*Base3
\]

如果用异或和而不是\({\sum}\),就能使\(Hash\)过程可逆。但\(Hash\)值密集时容易冲突,改成累乘就好了。

当然,还有另一种方法,就是如果时间复杂度允许\(O(n^2)\),则可以以每个点为根,累计统计每颗子树大小乘不同素数的和。这些在根上的和排序后如果完全相同,也可证同构。

数\(hash\)

用来处理状态量大而分散的情况,没有\(map\)保险。。。

方程自定。

从map到hash的更多相关文章

  1. [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 ...

  2. STL之map应用 +hash表(51nod 1095)

    题目:Anigram单词 题意:给出词典,再给出一些单词,求单词的Anigram数量. 思路:先将字串转换成哈希表,然后再用map链接. hash表构造方法汇总:http://www.cnblogs. ...

  3. HDU_1401——同步双向BFS,八进制位运算压缩,map存放hash

    这个速度比分步快一点,内存占的稍微多一点 Problem Description Solitaire is a game played on a chessboard 8x8. The rows an ...

  4. HDU_1401——分步双向BFS,八进制乘权值压缩,map存放hash

    Problem Description Solitaire is a game played on a chessboard 8x8. The rows and columns of the ches ...

  5. HDU_1401——分步双向BFS,八进制位运算压缩,map存放hash

    Problem Description Solitaire is a game played on a chessboard 8x8. The rows and columns of the ches ...

  6. poj 2503 Babelfish(Map、Hash、字典树)

    题目链接:http://poj.org/bbs?problem_id=2503 思路分析: 题目数据数据量为10^5, 为查找问题,使用Hash或Map等查找树可以解决,也可以使用字典树查找. 代码( ...

  7. 【一题多解】 map 二分 hash trie poj 2503

    各种方式解这道题!! 利用map 超时了 #include <iostream> #include <string> #include <map> using na ...

  8. ACM学习历程——UVA540 Team Queue(队列,map:Hash)

    Description   Team Queue   Team Queue  Queues and Priority Queues are data structures which are know ...

  9. 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 ...

随机推荐

  1. MariaDB常用命令手记

    创建用户命令 mysql>create user username@localhost identified by 'password'; 直接创建用户并授权的命令 mysql>grant ...

  2. Ajax——php基础知识(三)

    上传文件 1.get是传不了文件的,只能用post 2.enctype需要重新设置,默认是application/x-www-form-urlencoded,会在发送到服务器之前,所有字符都会进行编码 ...

  3. JS——null

    变量被赋值为null,目的往往是为了销毁这个对象: var n1 = 1; n1 = null;

  4. oracle 用户的操作

    语法: CREATE USER user   IDENTIFIED { BY password              | EXTERNALLY [ AS 'certificate_DN' ]    ...

  5. 扩增子图表解读5火山图:差异OTU的数量及变化规律

    火山图 Volcano plot 在统计学上,火山图是一种类型的散点图,被用于在大数据中快速鉴定变化.由于它的形成像火山喷发的样子,所以被称为火山图.和上文讲的曼哈顿图类似.   火山图基本元素 火山 ...

  6. 浅谈SOCKS5代理与HTTP代理的应用区别

    [1]什么是SOCKS5协议. SOCKS是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递.SOCKS是"Sockets”的缩写. 当防火墙后的客户端要访问外部的服务器时,就 ...

  7. std::vector遍历

    std::vector是我在标准库中实用最频繁的容器.总结一下在遍历和创建vector时需要注意的一些地方. 在不考虑线程安全问题的前提下,在C++11中有五种遍历方式. 方式一 for (size_ ...

  8. 如何从源码启动和编译IoTSharp

    IoTSharp 项目是一个开源物联网平台,数据库使用PostgreSQL , 后端使用 Asp.Net Core 2.2 ,前端使用  vue-element-admin , 下面我们介绍如何启动项 ...

  9. CAD设置图层亮度(com接口)

    主要用到函数说明: MxDrawXCustomFunction::Mx_SetLayerBright 设置显示亮度,默认值为100%.详细说明如下: 参数 说明 LPCTSTR pszLayerNam ...

  10. charAt 写一个反序函数

    function reverStr(str){ var tmpStr = ""; for(var i=str.length-1;i>=0;i--){ tmpStr += st ...