0 0

求一个处理中文的哈希函数5

网上和书上都有关于数字的哈希函数的设计,但对于中文汉字的哈希函数资料很少,求一个哈希函数,实现给出一个词语串,如:“中国 人”,通过该哈希函数给出哈希地址。即h(中国 人)=一个地址。谢谢!
2011年3月08日 10:19

6个答案 按时间排序 按投票排序

0 0

采纳的答案

hash函数的策略。

    对于GB2312编码,设输入的汉字为GBword,我们可以采用公式(C1-176)*94 + (C2-161)确定GBindex。其中,C1表示第一字节,C2表示第二字节。具体如下:

    GBindex = ((unsigned char)GBword.at(0)-176)*94 + (unsigned char)GBword.at(1) - 161;

    之所以用unsigned char类型,是因为char是一个字节,如果用unsigend int,因为int是4个字节的,所以会造成扩展,导致错误。

       对于GBK编码,设输入的汉字为GBKword,则可以采用公式   index=(ch1-0x81)*190+(ch2-0x40)-(ch2/128),其中ch1是第一字节,ch2是第二字节。

    具体的,

    GBKindex = ((unsigned char)GBKword[0]-129)*190 +

               ((unsigned char)GBKword[1]-64) - (unsigned char)GBKword[1]/128;

2011年3月09日 08:51
0 0

  汉字编码中现在主要用到的有三类,包括GBK,GB2312和Big5。

    1、GB2312又称国标码,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。它是一个简化字的编码规范,当然也包括其他的符号、字母、日文假名等,共7445个图形字符,其中汉字占6763个。我们平时说6768个汉字,实际上里边有5个编码为空白,所以总共有6763个汉字。

      GB2312规定“对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示”,习惯上称第一个字节为“高字节”,第二个字节为“低字节”。GB2312中汉字的编码范围为,第一字节0xB0-0xF7(对应十进制为176-247),第二个字节0xA0-0xFE(对应十进制为160-254)。

    GB2312将代码表分为94个区,对应第一字节(0xa1-0xfe);每个区94个位(0xa1-0xfe),对应第二字节,两个字节的值分别为区号值和位号值加32(2OH),因此也称为区位码。01-09区为符号、数字区,16-87区为汉字区(0xb0-0xf7),10-15区、88-94区是有待进一步标准化的空白区。



       2、Big5又称大五码,主要为香港与台湾使用,即是一个繁体字编码。每个汉字由两个字节构成,第一个字节的范围从0X81-0XFE(即129-255),共126种。第二个字节的范围不连续,分别为0X40-0X7E(即64-126),0XA1-0XFE(即161-254),共157种。



    3、GBK是GB2312的扩展,是向上兼容的,因此GB2312中的汉字的编码与GBK中汉字的相同。另外,GBK中还包含繁体字的编码,它与Big5编码之间的关系我还没有弄明白,好像是不一致的。GBK中每个汉字仍然包含两个字节,第一个字节的范围是0x81-0xFE(即129-254),第二个字节的范围是0x40-0xFE(即64-254)。GBK中有码位23940个,包含汉字21003个。

                                    

                                   表1 汉字编码范围

名称
第一字节
第二字节

GB2312
0xB0-0xF7(176-247)
0xA0-0xFE(160-254)

GBK
0x81-0xFE(129-254)
0x40-0xFE(64-254)

Big5
0x81-0xFE(129-255)
0x40-0x7E(64-126)

0xA1-0xFE(161-254)

2011年3月09日 08:51
0 0

用的什么语言?如果是ruby可以直接实现你的需要。或者自己写一个函数,思路如下:

获取到key后,判断是否ascii,是则直接赋值,不是则转为16进制的编码,将此编码做为key。这样就OK了。

2011年3月08日 15:52
0 0

一个最简单的方法,把中文字符串按8位分隔成一个单元(下面以16进制为例,%表示取余),比如分隔成以下:
假设一个字符串分成了以下单元
12,7A,F6,3A,.......
然后我们来计算
((12*FF+7A)%FFFF+(F6*FF+3A)%FFFF+.....)%FFF

2011年3月08日 11:58
0 0

为什么要用中文做呢,中文在程序中永远是个让人不放心的钉子..
我以前枚举用了个中文,到现在,还在担心...
不建议使用中文做,书名可以是中文 但是确实该转了在做.. 

2011年3月08日 11:48
0 0

可不可以把中文转成acsii的编码,在对那个编码进行每个字节的hashcode,英文的hashcode总会是到处都找得到的。

2011年3月08日 11:17

相关推荐

    易语言PHP哈希函数

    1. 声明哈希函数:易语言中,你可以定义一个函数,接受输入字符串作为参数,返回哈希值。 2. 数据预处理:在计算哈希值之前,可能需要对输入数据进行一些预处理,如添加填充符、转换为二进制等。 3. 位运算:HashPJW...

    数据结构课程设计之哈希查找设计

    一个好的哈希函数应该能够尽可能地将不同的关键字分散到哈希表的不同位置,减少冲突的发生。对于班级成员的汉语拼音,我们可以考虑使用字符串的一部分或者全部计算哈希值,例如可以取每个字符的ASCII码的累加,或者...

    易语言源码易语言js哈希表源码.rar

    4. **链地址法处理冲突**:如果两个键通过哈希函数映射到同一个位置,就需要一种方法来解决冲突。链地址法是一种常见方法,源码可能展示了如何在哈希表节点中存储链表,以处理这些冲突。 5. **数据结构的实现**:...

    易语言双字节计算哈希

    在易语言中,"双字节计算哈希"是一个重要的概念,它涉及到数据处理和信息安全领域。哈希(Hash)是将任意长度的输入(也叫做预映射,pre-image)通过散列函数转换成固定长度输出的过程,这个输出就是哈希值。哈希...

    易语言源码易语言哈希表学习例程源码.rar

    哈希表通过特定的哈希函数将数据映射到一个固定大小的数组中,实现快速查找、插入和删除操作。这份"易语言哈希表学习例程源码.rar"压缩包提供了易语言中哈希表的实践案例,可以帮助学习者深入理解哈希表的工作原理和...

    C语言下很实用的哈希算法

    `uthash`的一个显著特点是它不需要预定义的哈希函数,而是自动处理哈希和链表冲突。 使用`uthash`时,首先需要在结构体定义中包含`UT_hash_handle`,然后通过宏来操作结构体数组。例如: ```c #include "uthash.h...

    易语言源码易语言拉链法哈希表源码.rar

    哈希表是一种数据结构,它通过使用哈希函数将数据项映射到一个固定大小的数组中,从而实现快速查找、插入和删除操作。 哈希表的核心在于哈希函数,它的作用是将输入(通常是字符串)转化为数组索引。在理想情况下,...

    易语言源码易语言双字节计算哈希源码.rar

    哈希函数是计算机科学中的一个重要概念,广泛应用于数据验证、存储索引、信息安全等多个领域。 哈希(Hash)函数,也称为散列函数,能够将任意长度的输入(也叫做预映射pre-image)通过一个算法变换成固定长度的...

    hash值比较器

    哈希函数,中文常称为散列函数,是计算机科学中的一种重要工具,广泛应用于数据处理、信息安全和存储系统等多个领域。其基本原理是将任意长度的输入(也称为预映射或消息)通过特定算法转化为固定长度的输出,这个...

    易语言例程源码,易语言闪电哈希表模块

    一个好的哈希函数应该能够均匀地分布键值,避免冲突,即不同的键映射到相同的哈希值。 2. **冲突解决**:由于哈希函数可能会导致两个不同的键映射到同一个桶,因此需要有冲突解决策略。常见的方法有开放寻址法、链...

    哈希表设计-数据结构课程设计.docx

    哈希表是一种高效的数据结构,它通过特定的哈希函数将键(key)映射到一个固定大小的数组中,以此实现快速的插入、查找和删除操作。在本课程设计中,任务是设计一个哈希表来存储30个人的名字,以确保平均查找长度不...

    易语言js哈希表

    哈希表在计算机科学中是用于存储和检索数据的关键数据结构,它的核心思想是通过哈希函数将键(key)映射到一个索引,以实现快速访问。 哈希表通常包含以下关键操作: 1. **add**: 这个方法用于向哈希表中添加新的...

    MySQL函数大全中文版

    在MySQL中,函数是预定义的代码块,可以接受一个或多个参数,并返回一个值。这些函数广泛用于查询和处理数据,包括数值计算、字符串操作、日期和时间处理、条件判断以及聚合运算等。以下是一些关键的MySQL函数类别...

    易语言源码易语言哈希表对象源码.rar

    6. **冲突解决**:当两个或多个键通过哈希函数映射到同一个桶时,易语言提供了处理冲突的机制,如线性探测再散列、双哈希等。 7. **容量调整**:当哈希表的负载因子(已用元素数量/总桶数)超过一定阈值时,哈希表...

    易语言哈希表对象

    哈希表对象源码的学习涵盖了数据结构、哈希函数、内存管理等多个计算机科学的基础概念。理解并掌握这些方法的使用,能帮助开发者高效地进行数据处理。在实际编程中,你可以利用易语言哈希表对象实现各种功能,比如...

    易语言一个自编的加解密函数.rar

    这个"易语言一个自编的加解密函数.rar"文件可能包含了一位开发者自定义的加密和解密算法,这些函数可能是为了实现特定的安全需求或项目需求而编写的。 加解密函数在计算机科学中扮演着至关重要的角色,它们主要用于...

    易语言QEHashV1

    在本主题中,我们聚焦于"易语言QEHashV1",这是一个基于易语言实现的哈希函数库,主要涉及到哈希算法的应用和实现。 哈希函数,或者称为散列函数,是计算机科学中的一个重要概念,它能够将任意长度的输入(也叫做...

    汉字全拼PHP函数代码

    这个函数可以帮助开发者将中文字符转换为其对应的汉语拼音,对于处理中文数据、搜索优化、语音合成等场景非常有用。下面我们将详细解析这个函数的工作原理及其关键知识点。 首先,这段代码采用了一个数组 `$d` 来...

    易语言源码易语言QEHashTable源码.rar

    哈希表(HashTable)是数据结构中的一个重要概念,它通过哈希函数将数据映射到一个固定大小的数组中,从而实现了高效的数据存储和查找。在易语言中,QEHashTable是其内建的一种哈希表实现,用于提高数据的访问速度和...

Global site tag (gtag.js) - Google Analytics