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. 15个最受欢迎的Python开源框架(转)

    原文地址:http://blog.jobbole.com/72306/ Django: Python Web应用开发框架 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受 ...

  2. 【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' 单引号报错,错误信息没有显示 加注释符页面恢复正常 ...

  3. 如何知道自己的CPU支持SLAT

    因为WP8 SDK发布,很多WP8的开发者们也开始陆续安装WP8的SDK的,然而安装WP8的SDK有很多软件和硬件的要求,其中有一个就是——要求CPU支持二级地址转换(SLAT),如果CPU不支持二级 ...

  4. CAD动态绘制样条线(com接口)

    主要用到函数说明: _DMxDrawX::SendStringToExecuteFun 把命令当着函数执行,可以传参数.详细说明如下: 参数 说明 IDispatch* pParam 命令参数,IMx ...

  5. 手把手从python安装到setuptools、pip工具安装

    一.python安装1.基础开发库 apt-get install gccapt-get install openssl libssl-dev 2.安装数据库和开发库 apt-get install ...

  6. iPhone设备当前IP和SSID的获取

    #import <Foundation/Foundation.h> typedef void(^Complation)(NSString *res); @interface WIFIMan ...

  7. BZOJ 1572 USACO 2009 Open 工作安排

    先把工作按照Deadline从小到大排序 然后按顺序取,deadline大于现在总用时就取,等于现在总用时就从前面已取的工作中找一个P最小的同它比较,取P较大的一个 用优先队列维护已取工作中P的最小值 ...

  8. Maven学习总结(27)——Maven自定义打包插件maven-assembly-plugin详解

    Assembly插件会生成 "assemblies", 此特性等同于的Maven 1 distribution plug-in..该插件不仅支持创建二进制归档文件,也支持创建源码归 ...

  9. oracle --审计

    审计是监视和记录所选用户的数据活动的.审计操作类型包括登录企图.对象访问和数据库操作.审计记录包括被审计的操作.执行操作的用户.操作的时间等信息. 1 . 启用审计 其具体步骤如下: (1 ) 进入O ...

  10. nyoj_915_+-字符串_201402261520

    +-字符串 时间限制:1000 ms  |           内存限制:65535 KB 难度:1   描述 Shiva得到了两个只有加号和减号的字符串,字串长度相同.Shiva一次可以把一个加号和 ...