avatar
不改变排序的hash算法?# JobHunting - 待字闺中
e*9
1
有n个很长的字符串,比如
abcd....
bacd....
cabd....
........
有没有一个hash算法,使第一个字串的生成的hash值小于第二个,第二个hash值小于第
三个?
就是hash之后,不改变原来的排序。
avatar
e*9
2
技术上感觉是没有。不知道大家有没有好的想法。
avatar
l*8
3
http://lemire.me/blog/archives/2011/08/29/why-cant-hash-tables-

【在 e****9 的大作中提到】
: 有n个很长的字符串,比如
: abcd....
: bacd....
: cabd....
: ........
: 有没有一个hash算法,使第一个字串的生成的hash值小于第二个,第二个hash值小于第
: 三个?
: 就是hash之后,不改变原来的排序。

avatar
i*7
4
LinkedHashMap.
Java有这样一个container。
它实现不了你想说的hash值排序。但是它可以用链表维持原来插入的顺序不变。
你也可以自己用hash_map加一个链表做做试试。实现不难
avatar
e*9
5
用hash的目的是缩减所需要的存储
比如下面的字串长度可能是1000生成long的hash只要8 bytes.
abcd....
但是同时还要用这些字串来排序,hash之后排序完全没有了。
现在就想要没有一个算法,既可对原来的字串做某种压缩,并且压缩之后的不改变原来
的排序顺序。
avatar
c*t
6
用hashtable可以不?

【在 e****9 的大作中提到】
: 用hash的目的是缩减所需要的存储
: 比如下面的字串长度可能是1000生成long的hash只要8 bytes.
: abcd....
: 但是同时还要用这些字串来排序,hash之后排序完全没有了。
: 现在就想要没有一个算法,既可对原来的字串做某种压缩,并且压缩之后的不改变原来
: 的排序顺序。

avatar
s*1
7
TreeMap?
avatar
S*t
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自身吧?
avatar
w*a
9
自己实现计算hashCode,比如原来32位的hash你扩张到64位
后32位还是hash 前32位用于排序
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。