e****9 发帖数: 316 | 1 有n个很长的字符串,比如
abcd....
bacd....
cabd....
........
有没有一个hash算法,使第一个字串的生成的hash值小于第二个,第二个hash值小于第
三个?
就是hash之后,不改变原来的排序。 |
e****9 发帖数: 316 | |
l*********8 发帖数: 4642 | 3 http://lemire.me/blog/archives/2011/08/29/why-cant-hash-tables-
【在 e****9 的大作中提到】 : 有n个很长的字符串,比如 : abcd.... : bacd.... : cabd.... : ........ : 有没有一个hash算法,使第一个字串的生成的hash值小于第二个,第二个hash值小于第 : 三个? : 就是hash之后,不改变原来的排序。
|
i*********7 发帖数: 348 | 4 LinkedHashMap.
Java有这样一个container。
它实现不了你想说的hash值排序。但是它可以用链表维持原来插入的顺序不变。
你也可以自己用hash_map加一个链表做做试试。实现不难 |
e****9 发帖数: 316 | 5 用hash的目的是缩减所需要的存储
比如下面的字串长度可能是1000生成long的hash只要8 bytes.
abcd....
但是同时还要用这些字串来排序,hash之后排序完全没有了。
现在就想要没有一个算法,既可对原来的字串做某种压缩,并且压缩之后的不改变原来
的排序顺序。 |
c********t 发帖数: 5706 | 6 用hashtable可以不?
【在 e****9 的大作中提到】 : 用hash的目的是缩减所需要的存储 : 比如下面的字串长度可能是1000生成long的hash只要8 bytes. : abcd.... : 但是同时还要用这些字串来排序,hash之后排序完全没有了。 : 现在就想要没有一个算法,既可对原来的字串做某种压缩,并且压缩之后的不改变原来 : 的排序顺序。
|
s*****1 发帖数: 134 | |
S******t 发帖数: 151 | 8 我认为理论上不可能有这样的Hashing Function,如果有的话,那么对这个h(h(x))再
取hash,Iterate若干次之后,如果是为了保序,一定会收敛到一个不动点。
也就是说类似于
if x < y then h(x) < h(y)
那么最终h*(x) < h* (y) for all x and y
这个只有可能h(x) = x自身吧? |
w****a 发帖数: 710 | 9 自己实现计算hashCode,比如原来32位的hash你扩张到64位
后32位还是hash 前32位用于排序 |