Mar 22, 2017 · 2165 words · 5 mins
分析 levelDB 源码的时候遇到的,发现是一个广泛应用的 hash 算法,而且是纯 C 写的,于是找来了源码看。
MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。[1][2][3]由Austin Appleby在2008年发明,[4][5] 并出现了多个变种,[6] 都已经发布到了公有领域(public domain)。与其它流行的哈希函数相比,对于规律性较强的key,MurmurHash的随机分布特征表现更良好。[7]
Mar 15, 2017 · 3645 words · 8 mins
原始论文:一致性哈希
本来不打算放的。。被批评说太不严谨 orz
说说自己的理解好了。
大概就是 hash 的时候,一开始有 n 个桶,你设计的函数是 y=x%n,看起来美滋滋。
然后这时候突然一个桶不见了,如果按照之前设计的 hash 函数,就变成了 x%(n-1)。
Mar 11, 2017 · 1495 words · 3 mins
前言: # hash这种东西人人都会用的东西还有必要说?
起因是…本问了hash中的一个细节…然后…我知道怎么做… 结果描述的不够清楚?如果知道那个做法的名字也许就不用费劲描述了呢。。。所以来复习一下吧2333
Nov 30, 2016 · 1415 words · 3 mins
poj 3274 题目链接
题意:给出n个数和k,每个数不超过k位二进制。现在问最长的一段区间,满足该区间中所有数相加,k个位置上的数相等。
思路:k个位置上的数都相等的话…那这个和应该是(k«1)-1的整数倍…
Nov 30, 2016 · 808 words · 2 mins
题意:有n个雪花,每个雪花有6瓣,给出每一瓣的长度,问是否有两个雪花相同。(雪花相同的条件是:存在某个顺序使得两个雪花的每一瓣长度对应相等)
思路:一开始想到的是先最小表示法。。。然后hash。。。存set。。看set的大小。。。但是因为我是顺时针,逆时针都存了一次,那么如果有一个雪花顺时针和逆时针相同,就会出现错误的结果(虽然这个我应该判掉了。。。但是还是WA orz)
Nov 22, 2016 · 413 words · 1 min
题目链接
题意:一个字符串,其仅由nc种字符组成,问其所有长度为n的字串里,共用多少种不同的。
思路:一开始木有懂nc种字符有什么用…
然后写了hash,发现会TLE。。。因为用到了map,被卡了个log..
Nov 22, 2016 · 517 words · 2 mins
题目链接
题意:n个人,每个人有一个level值,用一个最长30位的,可能带前缀0的数字串表示,如果i的level大于j的level,那么i可以教j飞行,每个人只能有一个老师,每个人也只能收一个徒弟。师生可以共用一把扫帚飞行。现在问最少需要多少扫帚。
Nov 22, 2016 · 320 words · 1 min
题目链接
题意:网站的注册系统..处理用户要注册的用户名,如果数据库中没有重名输出OK,否则输出要注册的用户名的字符串+num,num的大小为之前一共有多少个用户试图用该用户名。
Nov 22, 2016 · 389 words · 1 min
题目链接
题意:给定一个两种语言的对照关系表…给出后一种语言中的单词,问对应的前一种语言的单词是什么。。。
思路:hash一下然后map存一下即可。。。。读入方式由于单词表和查询是根据空行分开的。。那么读入不能用scanf(因为会跳过空行),要用gets。。。然后再sscanf一下。。。
Nov 20, 2016 · 457 words · 1 min
题目链接
题意:给你一部魔咒词典。当哈利听到一个魔咒时,你的程序必须告诉他那个魔咒的功能;当哈利需要某个功能但不知道该用什么魔咒时,你的程序要替他找到相应的魔咒。如果他要的魔咒不在词典中,就输出“what?”
Sep 13, 2016 · 42 words · 1 min
感觉就是为了记录排列。。。重复之类的。。。用到的一个hash函数。。。?
维基百科
讲解
Jan 25, 2016 · 881 words · 2 mins
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=92 题意:给出一段文字,包含若干个单词,以’#‘结束。按照字典序输出所有的ananagrams。所谓ananagram,是指经过任意的重排后,不能得到这段文字中的另一个单词(不区分大小写) 思路:首先是字符串的读入…可以整行读入然后用空格分隔单词。由于补区分大小写,所以要都转化成小写…但是输出的时候要输出原始,所以还记得保留一份。而且要能够通过新的找到原始的(我用了一个toori的map<string,string>来实现) 然后最关键的部分是如何判断两个单词经过重排是否能一样…
Dec 15, 2015 · 670 words · 2 mins
http://acm.hdu.edu.cn/showproblem.php?pid=4391 题意:有 n 个点,每个点有一种颜色(可能相同),两种操作:1、将区间 [a,b] 染成颜色 c ; 2、询问区间 [a,b] 中颜色为 c 的点有多少个。 思路:因为颜色种类很多。。。没办法通过建很多棵线段树解决。我们用分块的办法。。。