如果谁能从网上找到超越我哈希算法的查询速度的资源 我就给高分

pww71 2014-02-05 01:41:20
检索速度最快的哈希算法比暴雪的还快百倍而且重复机率为零
最新地址:http://user.qzone.qq.com/75293192/infocenter?ptsig=oWLVbxImG1Utmi0Cd9FqWjnP-yRSMmGmi8dsbvD*Vd0_
...全文
621 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
pww71 2014-03-11
  • 打赏
  • 举报
回复
测试代码你可以下载 想怎么做都可以
sniffer12345 2014-02-28
  • 打赏
  • 举报
回复
引用 4 楼 pww71 的回复:
[quote=引用 2 楼 unituniverse2 的回复:] 因为居然要3个下载地址,每个10分,快没有那么多分了所以就没试。楼主大概描述一下你那边的测试数据吧。 map用2分查找主要是考虑到迭代器的性能问题。因为hash表是无序的。这样元素的前后关系插入hash表后就无法快速确定。 我仿造网上的jm自己也写了一个,同时解决了这两个问题(O[1]的随机查找性能 和 逻辑上的自然有序性,利于迭代器遍历),而且也没有冲突(这是从算法原理上就保证的,而不仅仅是低到几乎不可能的概率性)。但是实际测试的结果是,在用简单变量的情况下,随机查找性能还是低于我个人的期望,至少还是不如hash表的。但是也比stl的map少了不少,占内存的情况则和map的差不多但有些分布区间上的差别。总之还是有点失望的
我的算法仅仅是查询速度快 基本上做三到四次加加运算就可以查到结果 其他方面的性能比较差 插入和删除不能实现,遍历很消耗cpu。主要是用在变动少的配置表的查询,更新不能太频繁,如果100万的数据,更新可能要一秒。[/quote] 既然是静态集,为什么我不构造一个宏,然后把他们生成switch case的静态代码呢?那样不是更快?而且保证O(1)
赵4老师 2014-02-28
  • 打赏
  • 举报
回复
大跃进啊!
百曉生 2014-02-27
  • 打赏
  • 举报
回复
我不贪心,只要一分就行了
pww71 2014-02-27
  • 打赏
  • 举报
回复
顶一个 需要结果
FancyMouse 2014-02-13
  • 打赏
  • 举报
回复
引用 30 楼 pww71 的回复:
[quote=引用 29 楼 FancyMouse 的回复:] [quote=引用 25 楼 pww71 的回复:] [quote=引用 6 楼 FancyMouse 的回复:] 喷了原来是perfect hashing。功能都不一样就比性能,还说什么最快。呵呵。
确实是完美哈希算法,原先写这个算法并不知道有这个概念,刚才看了这个网址:http://blog.csdn.net/chixinmuzi/article/details/1727195 我才知道的。不过看了论文,我的算法原理和他们都不同 而且我的检索速度和内存肯定比他们好的多。[/quote] 你不说这个算法具体怎么做的那我们还能说什么。你自己自high去,不用在这里发帖。[/quote发布代码和测试程序就行了 算法原理公开了 你是不是想偷了成果发布论文[/quote] 这哪门子小人之心。你真要那么想,那你不会自己先把论文发掉?你不是觉得牛逼么?怎么着也能上个什么牛journal吧。
pww71 2014-02-12
  • 打赏
  • 举报
回复
引用 29 楼 FancyMouse 的回复:
[quote=引用 25 楼 pww71 的回复:] [quote=引用 6 楼 FancyMouse 的回复:] 喷了原来是perfect hashing。功能都不一样就比性能,还说什么最快。呵呵。
确实是完美哈希算法,原先写这个算法并不知道有这个概念,刚才看了这个网址:http://blog.csdn.net/chixinmuzi/article/details/1727195 我才知道的。不过看了论文,我的算法原理和他们都不同 而且我的检索速度和内存肯定比他们好的多。[/quote] 你不说这个算法具体怎么做的那我们还能说什么。你自己自high去,不用在这里发帖。[/quote发布代码和测试程序就行了 算法原理公开了 你是不是想偷了成果发布论文
FancyMouse 2014-02-11
  • 打赏
  • 举报
回复
引用 25 楼 pww71 的回复:
[quote=引用 6 楼 FancyMouse 的回复:] 喷了原来是perfect hashing。功能都不一样就比性能,还说什么最快。呵呵。
确实是完美哈希算法,原先写这个算法并不知道有这个概念,刚才看了这个网址:http://blog.csdn.net/chixinmuzi/article/details/1727195 我才知道的。不过看了论文,我的算法原理和他们都不同 而且我的检索速度和内存肯定比他们好的多。[/quote] 你不说这个算法具体怎么做的那我们还能说什么。你自己自high去,不用在这里发帖。
DoDoMouse 2014-02-11
  • 打赏
  • 举报
回复
准备接分...
大奶兔白糖 2014-02-11
  • 打赏
  • 举报
回复
我只想要2分而已。这个应该不算不正之风吧?
「已注销」 2014-02-11
  • 打赏
  • 举报
回复
低调做人,高调做事。 别被CSDN的不正之风感染了
pww71 2014-02-11
  • 打赏
  • 举报
回复
引用 6 楼 FancyMouse 的回复:
喷了原来是perfect hashing。功能都不一样就比性能,还说什么最快。呵呵。
确实是完美哈希算法,原先写这个算法并不知道有这个概念,刚才看了这个网址:http://blog.csdn.net/chixinmuzi/article/details/1727195 我才知道的。不过看了论文,我的算法原理和他们都不同 而且我的检索速度和内存肯定比他们好的多。
pww71 2014-02-11
  • 打赏
  • 举报
回复
建议先下载实例测试一下 http://download.csdn.net/detail/pww71/6898171
pww71 2014-02-11
  • 打赏
  • 举报
回复
引用 17 楼 VisionCat 的回复:
我是觉得LZ完全不知道hash算法在map中的作用。 如果有足够的内存空间预分配,做到0冲突完全是轻而易举的事情,比如用md5作为map的hash算法,正常情况下发生冲突的概率几乎为0。 同时,如果考虑到多核运算的话~~嗯~~这就是另一个层面的问题了。 其实,算法要看应用场合以及算法代价的,在大多数情况下,无非是时间换空间,空间换时间。没有最好的算法,只有更适合的算法,所谓适合就是能在空间和时间上做到平衡。
如果内存消耗比stl的map大 我也就不发布了
pww71 2014-02-11
  • 打赏
  • 举报
回复
引用 20 楼 unituniverse2 的回复:
引用 18 楼 bug1190 的回复:
引用 16 楼 pww71 的回复:
[quote=引用 15 楼 bug1190 的回复:] 不能插入和删除!---这是多大的灾难啊,你的表怎么存元素进去啊,我看你搞了一堆常量,是不是就是这个造成的啊,无语
不使用哈希的话 可以插入和删除和遍历,但是总体指标不如google哈希算法。也可以保证不会重复。但是你可以使用build()来建立哈希表 查询速度就快了不是一个级别了 但是哈希表不能插入和删除。只能查询。所以适用在不经常变化的数据查询系统。如果要变化,需要把所有数据一次性build(),一次性删除。
那你这分明就是搞了一个静态数据存储么,搞起来自然速度快,这还要大呼小叫的,相对于动态数据存储来说,你这缺点太大了,我要存字符串,我要存汉字和中英文符号,你要在Build里搞多少常量进去啊,非动态存储的数据结构,没有通用性,这么大的硬伤,你还在这喊叫---是速度最快的!你自已情何以堪???
这东西当然有用。比如写编译器,你可以用这种算法来实现switch语句的编译。 再比如,某些应用的 事件 如果可以用key来表达(比如GUI里的窗口消息),也可以用这种算法来提高性能。 这两个例子里的数据集都是生成后就不变的(而且绝大多数情况下集合中含有的元素总数量比较少)。用这类算法正合适[/quote]是的 其实我在例子里就有病毒库的检索应用。而且 我在电信行业里处理过大数据,应用很广泛。
VisionCat 2014-02-08
  • 打赏
  • 举报
回复
我是觉得LZ完全不知道hash算法在map中的作用。 如果有足够的内存空间预分配,做到0冲突完全是轻而易举的事情,比如用md5作为map的hash算法,正常情况下发生冲突的概率几乎为0。 同时,如果考虑到多核运算的话~~嗯~~这就是另一个层面的问题了。 其实,算法要看应用场合以及算法代价的,在大多数情况下,无非是时间换空间,空间换时间。没有最好的算法,只有更适合的算法,所谓适合就是能在空间和时间上做到平衡。
pww71 2014-02-08
  • 打赏
  • 举报
回复
引用 15 楼 bug1190 的回复:
不能插入和删除!---这是多大的灾难啊,你的表怎么存元素进去啊,我看你搞了一堆常量,是不是就是这个造成的啊,无语
不使用哈希的话 可以插入和删除和遍历,但是总体指标不如google哈希算法。也可以保证不会重复。但是你可以使用build()来建立哈希表 查询速度就快了不是一个级别了 但是哈希表不能插入和删除。只能查询。所以适用在不经常变化的数据查询系统。如果要变化,需要把所有数据一次性build(),一次性删除。
unituniverse2 2014-02-08
  • 打赏
  • 举报
回复
引用 18 楼 bug1190 的回复:
引用 16 楼 pww71 的回复:
引用 15 楼 bug1190 的回复:
不能插入和删除!---这是多大的灾难啊,你的表怎么存元素进去啊,我看你搞了一堆常量,是不是就是这个造成的啊,无语
不使用哈希的话 可以插入和删除和遍历,但是总体指标不如google哈希算法。也可以保证不会重复。但是你可以使用build()来建立哈希表 查询速度就快了不是一个级别了 但是哈希表不能插入和删除。只能查询。所以适用在不经常变化的数据查询系统。如果要变化,需要把所有数据一次性build(),一次性删除。
那你这分明就是搞了一个静态数据存储么,搞起来自然速度快,这还要大呼小叫的,相对于动态数据存储来说,你这缺点太大了,我要存字符串,我要存汉字和中英文符号,你要在Build里搞多少常量进去啊,非动态存储的数据结构,没有通用性,这么大的硬伤,你还在这喊叫---是速度最快的!你自已情何以堪???
这东西当然有用。比如写编译器,你可以用这种算法来实现switch语句的编译。 再比如,某些应用的 事件 如果可以用key来表达(比如GUI里的窗口消息),也可以用这种算法来提高性能。 这两个例子里的数据集都是生成后就不变的(而且绝大多数情况下集合中含有的元素总数量比较少)。用这类算法正合适
unituniverse2 2014-02-08
  • 打赏
  • 举报
回复
引用 17 楼 VisionCat 的回复:
我是觉得LZ完全不知道hash算法在map中的作用。 如果有足够的内存空间预分配,做到0冲突完全是轻而易举的事情,比如用md5作为map的hash算法,正常情况下发生冲突的概率几乎为0。 同时,如果考虑到多核运算的话~~嗯~~这就是另一个层面的问题了。 其实,算法要看应用场合以及算法代价的,在大多数情况下,无非是时间换空间,空间换时间。没有最好的算法,只有更适合的算法,所谓适合就是能在空间和时间上做到平衡。
md5散列都是有冲突的,概率小不意味着绝对没有。 至于说“不可能绝对没有冲突”也不是的。都已经有人说了是perfect hash了的。。 当然最原始的无冲突的情况你都可以想到。n个数据如果用n*n的槽位存储,就成了perfect hash。当然这样的算法原始的几乎不能考虑去用。。。而ph的任务就在于通过临时建立hash计算器去拟合数据的特征键值的逻辑位置、把那些空位压缩去除掉(当然hash计算器自身的复杂度必须也得控制,否则就只是拿时间换空间。。这样做意义就不大了)。 ph算法简单的说就是根据一个已知的数据集合中的全部元素和对应的元素存储槽位得到对应的hash计算器(所以说不能插入和删除,而是新元素待添加的情况下整个表和hash计算器本身都得重建),而普通的hash表,hash计算器是静态的。这个是和ph区别最大的地方。 链接就自己搜一下吧
huanglin03 2014-02-08
  • 打赏
  • 举报
回复
不能插入和删除!---这是多大的灾难啊,你的表怎么存元素进去啊,我看你搞了一堆常量,是不是就是这个造成的啊,无语
加载更多回复(15)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧