Hash算法的使用

2023-11-06

Hash算法的使用

标签:  默认分类 | 发表时间:2011-08-06 06:35 | 作者:GliderX khsing
分享到:
出处:http://hi.baidu.com/gliderx

在对语料文本进行2,3元切分时,需要借助hash表来获得切分内容在内存中的位置,以便能够记录语料库中出现的次数。以前知道有很多hash算法,但没认真研究过,今天才知道hash算法差距还是很明显的。

首先我选择的是暴雪在魔兽里的hash算法,这个算法很高级,是time33类型的一个变种(有关time33的介绍,可以参考:http://www.cnblogs.com/napoleon_liu/articles/1911571.html),而且很巧妙的借助3次hash避免字符串比较这种费时的操作,并且不用链表来存储冲突,3次hash冲突值能相等的可能行只有1/10的23次方,应该说不可能冲突了。具体算法请参考:http://blog.csdn.net/eaglewood2005/article/details/4394583。

但很遗憾,这种算法对于一个文本有数百万条记录的情况处理不够理想。首先,预先分配的Table数量是有限的,我分配0x3ffffff大小,再大就很容易分配失败了。其次,正是由于他不用链表处理冲突,当越来越多的加入进来时,处理冲突地方就需要不断往下轮询空余的Table下标,当积累到一定的时候,大概是200万条记录的时候,效率就开始急剧下降,降将到我无法接受,进度条很久都不会动,最后没耐心等下去了。

 

第二个选择的算法是一个很常见的OpenSSL里的算法

unsigned long lh_strhash(char *str)
{
    int i,l;
    unsigned long ret=0;
    unsigned short *s;

    if (str == NULL)
        return(0);
    l=(strlen(str)+1)/2;
    s=(unsigned short *)str;
    for (i=0; i<l; i++)
        ret^=(s[i]<<(i&0x0f));
    return(ret);
}

很简单吧,不过这个算法也仅在一个数量范围内比较好用,对于大记录的hash效果不好,我对328万条记录的结果,bucket利用率仅仅只有 2.14%,最大的冲突长度高达147。 其实这个算法也让程序在20分钟内统计完成。

 

不过感觉2.14%的利用率实在太低,有必要选择一个更好的算法。于是找到了php的hash算法,这个zend公司的算法也是time33的一种,而且有独到的地方,比如他的hash值不是从0开始,而是从5381开始,5381这个数字有什么意义呢?

Magic Constant 5381:
  1. odd number
  2. prime number 
  3. deficient number
  4. 001/010/100/000/101 b

算法我就不列了,大家可以很容易找到。这个算法非常有效,程序运行速度翻倍,只要10分钟就可以统计好一个4GB的语料库,而且更加惊人的是在相同的测试条件下,他的bucket利用率高达33.16%,最大冲突长度只有14。

 

最后借用一个前辈的说法“算法的力量很强”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hash算法的使用 的相关文章

  • 云数据库MySQL的选择

    架构介绍 xff1a 云数据库MySQL支持四种架构 xff1a 高可用版 金融版 单节点高IO版 基础版 其中单节点高IO版的只用于只读 版本对比 xff1a 企业级别 xff0c 刚刚好公司没有自己的服务器机房的时候可以做对比选择 一般
  • 淘宝TDDL数据库分库分表

    淘宝TDDL数据库分库分表 2014 06 04 23 18 3334人阅读 评论 0 收藏 举报 分类 数据库 1 分库分表 而且分库规则非常灵活 2 主键生成策略 目前TDDL提供的id生成主要还是依托数据库来进行的 oracle可以直
  • Hadoop Core、HBase 、ZooKeeper

    adoop HBase ZooKeeper三者关系与安装配置 复制链接 qqjue 论坛徽章 18 电梯直达 1
  • Hypertable 快速安装,仅需上载一个RPM包,零编译

    Hypertable 快速安装 仅需上载一个RPM包 零编译 Hypertable 快速安装 仅需下载一个RPM包 零编译 本文采用 单机安装 1 Hypertable 安装 Hypertable 的几种安装方式 单机 安装于单机 采用本地
  • Hadoop 2.4.0+zookeeper3.4.6+hbase0.98.3分布式集群搭建

    Hadoop 2 4 0 zookeeper3 4 6 hbase0 98 3分布式集群搭建 博客分类 hadoop Ip 主机名 程序 进程 192 168 137 11 h1 Jdk Hadoop hbase Namenode DFSZ
  • 分布式系统一致性研究,paxos算法

    感谢eric的敦促 感谢shuai的感召 我尝试记录一点混乱的思考 什么是分布式系统 毋庸置疑 Internet和DNS是两个典型的成功的分布式系统 那么 分布式系统是不是就是计算机网络 1990年 Sun Microsystems 公司提
  • 开源大数据利器汇总

    所有分类 gt 服务器软件 gt 分布式 云计算 大数据 开源大数据利器汇总 开源 2015 05 21 21 00 00 发布 您的评价 0 0 收藏 0收藏 类别 名称 官
  • Hbase split的三种方式和split的过程

    Hbase split的三种方式和split的过程 在Hbase中split是一个很重要的功能 Hbase是通过把数据分配到一定数量的region来达到负载均衡的 一个table会被分配到一个或多个region中 这些region会被分配到
  • Spanner vs. F1:谷歌两大数据管理利器的整体对比及关联 2016-05-22 20:36 757人阅读 评论(0) 收藏 举报 目录(?)[+] http://www.csdn.net/a

    Spanner vs F1 谷歌两大数据管理利器的整体对比及关联 2016 05 22 20 36 757人阅读 评论 0 收藏 举报 目录 http www csdn net article 2013 10 10 2817138 f1 a
  • 分布式系统设计的求生之路

    作者 作者 Simon 腾讯后台开发高级工程师 链接 http wetest qq com lab view id 105 著作权归作者所有 商业转载请联系WeTest获得授权 非商业转载请注明出处 分布式系统理念渐渐成为了后台架构技术的重
  • 分布式数据库资料

    Hadoop是很多组件的集合 主要包括但不限于MapReduce HDFS HBase ZooKeeper MapReduce模仿了Google MapReduce HDFS模仿了Google File System HBase模仿了Goo
  • Hash算法的使用

    Hash算法的使用 标签 默认分类 发表时间 2011 08 06 06 35 作者 GliderX khsing 分享到 出处 http hi baidu com gliderx 在对语料文本进行2 3元切分时 需要借助hash表来获得切
  • 分布式查找过程[HBase]Region location

    HBase的table是该region切分的 client操作一个row的时候 如何知道这个row对应的region是在哪台Region server上呢 这里有个region location过程 主要涉及到2张系统表 ROOT META
  • 一、MapReduce已死,Spark称霸

    一 MapReduce已死 Spark称霸 2014 09 17 11 20 王家林 Spark亚太研究院 字号 T T 综合评级 想读 35 在读 13 已读 2 品书斋鉴 0 已有50人发表书评 Spark亚太研究院系列丛书 Spark
  • Hypertable 简介 一个 C++ 的Bigtable开源实现

    1 Introduction 随着互联网技术的发展 尤其是云计算平台的出现 分布式应用程序需要处理大量的数据 PB级 在一个或多个云计算平台中 成千上万的计算主机 如何保证数据的有效存储和组织 为应用提供高效和可靠的访问接口 并且保持良好的
  • 分布式数据库需要考虑的(BigTable VS Dynamo)

    分布式数据库需要考虑的 BigTable VS Dynamo 在设计 评价分布式数据库的时候需要考虑一些最基本的特性 我想这些特性可能包括 1 存储系统 一种是类似BigTable将存储交给GFS去做 GFS会保证写入数据的完整 另外一种是
  • hadoop初级到资深

    hadoop初级到资深 2015 06 13 12 08 165人阅读 评论 0 收藏 举报 分类 hadoop 3 1 hadoop是什么 适合大数据的分布式存储与计算平台 2 hadoop版本有哪些 Apache 官方版本 1 1 2
  • 1.1.3 Hadoop生态系统

    1 1 3 Hadoop生态系统 2013 05 08 09 38 16 我来说两句 收藏 我要投稿 本文所属图书 gt Hadoop技术内幕 深入解析Hadoop Common和HDFS架构设计与实现原理 Hadoop技术内幕共两册 分别
  • 云数据库知识学习——概述

    一 云计算是云数据库兴起的基础 云计算是分布式计算 并行计算 效用计算 网络存储 虚拟化 负载均衡等计算机和网络技术发展融合的产物 云计算是由一系列可以动态升级和被虚拟化的资源组成的 用户无需掌握云计算的技术 只要通过网络就可以访问这些资源
  • hadoop使用(五)

    博客园 闪存 首页 新随笔 联系 管理 订阅 随笔 247 文章 122 评论 571 hadoop使用 五 第1章 引言 1 1 编写目的 对关于hadoop的文档及资料进行进一步的整理 1 2 相关网站 毋庸置疑 http hadoop

随机推荐

  • 复现XSS漏洞

    一 设置漏洞环境 首先 我们需要一个包含XSS漏洞的Web应用 我们可以使用一个简单的示例页面来模拟漏洞 以下是一个基本的示例代码 h1 欢迎来到我们的网站 h1
  • pygame入门

    二 创建游戏窗口 要使用pygame首先需要进行初始化 import pygame 初始化pygame pygame init 想要运行一个游戏 一定要有用于运行游戏的窗口 创建窗口pygame display set mode 在括号里可
  • C++总结笔记(十一)—— Lambda表达式的应用

    文章目录 一 Lambda表达式是什么 二 程序示例 1 在STL中的使用 一 Lambda表达式是什么 Lambda表达式时C 11引入的语法 本质上是一个匿名函数 用 三个符号组成表达式 格式为 capture list params
  • CSS清除浮动及手写clearfix

    清除浮动的方法 使用clear both清除浮动 clear both意思就是清除浮动 clear clear both verflow方法的使用 当给父元素设置了overflow样式 不管是overflow hidden或overflow
  • android 浅探打包安装APK

    打包安装过程 Run as Android Application 1 生成apk文件 1 生成 dex文件 DVM java gt javac gt class gt dx bat gt dex 架构 寄存器 cpu上一块高速的缓存 2
  • 谷歌地图旋转图片marker(图片旋转转base64)

    custom rotate icon method for Google map var RotateIcon function options this options options this rImg options img new
  • QT中使用winsock创建Tcp连接传文件

    第一步链接库 qmake LIBS lws2 32 cmake target link libraries send send是项目名称替换自己的 PUBLIC lt
  • 小程序动画 animation 的常规使用

    公司小程序项目比较多 最近正好有时间看一下小程序的动画 同时记录一下我的学习过程 看到这个文章的 我建议你直接去小程序后台 https developers weixin qq com miniprogram dev api ui anim
  • 从零开始教你如何完成一个基于Vite+Vue3+TS的后台管理系统

    项目大致效果 心动了吗 没错 没错 你没看错 在学习了前端也有一年多的时间了 先后学习了 html css html5 css3 js 微信小程序 nodejs vue react ts等 现在也是时候来对之前学的知识进行一个综合的练习了
  • c语言文件操作

    目录 一 什么是文件 1 1 程序文件 1 2 数据文件 1 3 文件名 二 文件的打开和关闭 2 1 文件指针 2 2 文件的打开和关闭 2 3 文件的顺序读写 编辑 三 文件的随机读写 3 1 fseek ftell rewind 四
  • Android WebView加载本地统一HTML界面样式文件并填充内容

    前言 之前加载HTMl图文都是使用TextView 但是现在需要统一三个端的样式 给出了一个HTML文件 我想反正都是HTML格式的 TextView应该也没问题 我就将文本直接填充进去 一运行 发现Html fromHtml 无法解析 l
  • ARM芯片开发(S5PV210芯片)——SD卡启动

    1 SD卡启动 顾名思义就是启动代码存放在SD卡中 设备从SD卡中启动 用SD卡启动有一些好处 譬如可以在不借用专用烧录工具 类似Jlink 的情况下对SD卡进行刷机 然后刷机后的SD卡插入卡槽 SoC既可启动 譬如可以用SD卡启动进行量产
  • 边缘云计算简介

    去年底 中国电子技术标准化研究院 阿里云等单位共同编制并发布了一份 边缘云计算技术与标准化白皮书 定义了边缘云计算的概念和标准等 白皮书篇幅略长 边缘计算社区将通过几篇文章拆解白皮书 边缘计算概念 和云计算出现的时候一样 目前业界对边缘计算
  • UniswapV2核心合约学习(1)— UniswapV2Factory.sol

    记得朋友圈看到过一句话 如果Defi是以太坊的皇冠 那么Uniswap就是这顶皇冠中的明珠 Uniswap目前已经是V2版本 相对V1 它的功能更加全面优化 然而其合约源码却并不复杂 本文为个人学习UniswapV2源码的系列记录 一 Un
  • 笔记/mysql数据库备份与恢复

    MySQL mysqldump命令详解 1 数据库信息 数据库地址 127 0 0 1 数据库用户名 root 数据库密码 1234 数据库名称 test1 数据库名称 test2 数据库名称 test3 mysqldump目录 usr b
  • 高级I/O函数

    应用层程序能往一个TCP连接中写入多少字节的数据 取决于对方的接收窗口的大小和本端的拥塞窗口的大小 管道本身有一个容量限制 规定如果应用程序不将数据从管道读走的话 该管道最多能写入多少字节的数据 自Linux 2 6 11内核起 管道容量的
  • AI Studio 飞桨 零基础入门深度学习笔记2-基于Python编写完成房价预测任务的神经网络模型

    AI Studio 飞桨 零基础入门深度学习笔记2 基于Python编写完成房价预测任务的神经网络模型 波士顿房价预测任务 线性回归模型 线性回归模型的神经网络结构 构建波士顿房价预测任务的神经网络模型 1 数据处理 1 1 读入数据 1
  • 企业订单管理软件

    企业订单管理软件 网上订货宝APP系统功能介绍 一 系统概述和用途 系统基于网络 实现厂家和代理商批发商通过网络下单订货功能 二 解决问题 1 解决订单管理混乱问题 2 解决订单遗漏问题 3 解决订单欠款遗漏问题 4 解决不同客户不同价格管
  • 在Windows下使用Python嵌入式环境包

    在 Python Releases for Windows 页面下载你需要的那个版本的 Windows embeddable package 64 bit 文件 这样就得到一个 python x x x embed amd64 zip 文件
  • Hash算法的使用

    Hash算法的使用 标签 默认分类 发表时间 2011 08 06 06 35 作者 GliderX khsing 分享到 出处 http hi baidu com gliderx 在对语料文本进行2 3元切分时 需要借助hash表来获得切