建立一个用于字串查找的Hash表

Peter算法小课堂—哈希与哈希表 额……字符串我们是第一次学,给大家铺一些基础的不能再基础的基础, 阅读详情
在实际开发过程中,往往需求类似一个问题--这个对象是否已经存在? et.
如果我们讲每个对象建立一个诸如这样的structure
  struct  OBJECT
{
   char*  szName,
   int      i_hash,
  ....
};
  那么可以建立一个 object libary,根据 szName 计算出一个唯一的Hash值,这样建立一个Hash表,查找的时候可以选择2分法等查找是否对象已经建立.

///关键代码

//取得Hash 值
typedef unsigned int uint32_t;
uint32_t  HashString(const char *pszString)
{
    uint32_t i_hash;
    while(*pszString)
   {
         i_hash += *pszString++;
         i_hash += i_hash << 10;
         i_hash ^= i_hash >> 8;
   }
   return i_hash;
}

//建立一个Hash表
static int InsertInner( void  *p_vars, int i_count, uint32_t i_hash )
{
    int i_middle;

    if( i_hash <= p_vars[0].i_hash )
    {
        return 0;
    }

    if( i_hash >= p_vars[i_count - 1].i_hash )
    {
        return i_count;
    }

    i_middle = i_count / 2;

    /* We know that 0 < i_middle */
    if( i_hash < p_vars[i_middle].i_hash )
    {
        return InsertInner( p_vars, i_middle, i_hash );
    }

    /* We know that i_middle + 1 < i_count */
    if( i_hash > p_vars[i_middle + 1].i_hash )
    {
        return i_middle + 1 + InsertInner( p_vars + i_middle + 1,
                                           i_count - i_middle - 1,
                                           i_hash );
    }

    return i_middle + 1;
}


//查找
static int LookupInner( variable_t *p_vars, int i_count, uint32_t i_hash )
{
    int i_middle;

    if( i_hash <= p_vars[0].i_hash )
    {
        return 0;
    }

    if( i_hash >= p_vars[i_count-1].i_hash )
    {
        return i_count - 1;
    }

    i_middle = i_count / 2;

    /* We know that 0 < i_middle */
    if( i_hash < p_vars[i_middle].i_hash )
    {
        return LookupInner( p_vars, i_middle, i_hash );
    }

    /* We know that i_middle + 1 < i_count */
    if( i_hash > p_vars[i_middle].i_hash )
    {
        return i_middle + LookupInner( p_vars + i_middle,
                                       i_count - i_middle,
                                       i_hash );
    }

    return i_middle;
}

ThunderScope开源示波器 4CH,1GSa/S 开源示波器。前端很简洁,BUF802+LMH6518,ADC是HMCAD1511,用Xilinx A7 FPGA进行控制,数据通过PCIE总线传输到上位机处理。目前这个项目已经被挂到了Xilinx官网,强。设计日志:https://hackaday.io/project/180090-thunderscope开源地址:https://github.com/EEVengers/ThunderScope。 阅读详情

相关推荐

CoaXPress FMC子卡:高速图像采集与FPGA原型开发实战指南

在机器视觉和工业检测领域,高速、可靠的数据传输是核心需求。CoaXPress(CXP)协议作为一种基于同轴电缆的高速接口标准,通过其高带宽、长距离传输和低延迟的特性,有效解决了传统接口在确定性实时传输方面的短板。其技术价值在于为海量图像数据提供了稳定、高效的物理层和数据链路层解决方案,广泛应用于半导体检测、医疗成像等对吞吐量有极致要求的场景。要实现CXP系统的快速原型验证,集成了高速SerDes接口和时钟管理的FMC子卡与FPGA开发板的组合成为关键。这种平台将复杂的硬件设计封装,让开发者能聚焦于图像处理算

weixin_31815843的博客 278

通俗易懂的哈希算法讲解

哈希是一种加密算法 哈希函数(Hash Function),也称为散列函数或杂凑函数。哈希函数是一个公开函数,可以将任意长度的消息M映射成为一个长度较短且长度固定的值H(M),称H(M)为哈希值、散列值(Hash Value)、杂凑值或者消息摘要(Message Digest)。它是一种单向密码体制,即一个从明文到密文的不可逆映射,只有加密过程,没有解密过程。 它的函数表达式为:h=H(m) ...

zongyue_wang的博客 4万+

汽水音乐自动化薅羊毛教程:从零搭建稳定赚钱脚本

📖 前言:为什么要学习自动化脚本?在数字时代,时间就是金钱。汽水音乐等App通过观看广告奖励用户金币的模式,本质上是将我们的时间转化为收益。本教程将教你如何用Python自动化这个过程,让程序为你"打工",实现被动收入。通过本教程,你将学到:移动端自动化测试的核心技术Python在自动化领域的实际应用如何将重复性任务转化为自动化流程创造属于自己的"数字员工"第一章:环境准备与基础配置1.1 硬件要求Android手机一部(建议使用备用机)USB数据线。

weixin_44947827的博客 5770

哈希算法:如何利用哈希算法解决实际问题?

1、什么是哈希算法?         哈希算法的定义和原理:将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则,就是哈希算法。而通过原始数据映射之后得到的二进制值串就是哈希值。         设计一个优秀的哈希算法,需要满足下面几点要求:  从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法) 对输入的数据比较敏感,原始数据即使修改一个字节,最后得到的哈希值也大不...

qq_30816517的博客 2495

2025.03.14【读书笔记】|GWAS分析神器:BOLT-LMM工具介绍与快速安装

在生物信息学领域,全基因组关联分析(GWAS)已成为揭示遗传与疾病关系的强有力工具。BOLT-LMM作为一款专为大规模样本量设计的GWAS分析工具,将极大地提高研究人员的工作效率。大家好,今天我们来聊聊一个非常强大的生物信息学工具——BOLT-LMM。它是基于线性混合模型(LMM)的全基因组关联分析(GWAS)分析工具,通过快速的方差近似方法在计算效率上实现了显著的提升。BOLT-LMM的高效性能使其成为大规模样本GWAS分析的理想选择,它将进一步推动生物信息学和遗传学研究的发展。

1093

S4 Hana SD -信贷管理 - 02

在S4版本中,客户的信用管理数据在事务代码BP维护,业务伙伴角色是UKM000。在维护过程中,我们并不能直接输入信贷控制范围这个组织架构,而是需要输入一个信用段,并且在信用段的维度下去维护相应信用管理数据。对于信用段,可以分为主信用段(信用段是0000)和其他临时信用段,我们可以通过配置把次级信用段的客户信贷负债汇总到主信用段。当然,在后台也有配置,会把信用段和信贷控制范围这两者进行关联.3.2SPROIMG > 财务供应链管理 > 信用管理 > 信贷风险监视 > 主数据 > 创建信用段。

weixin_46525734的博客 1965

Java中哈希算法总结

/Hash算法(消息摘要算法)工具类 public class HashTools {//消息摘要对象 private static MessageDigest digest;//构造方法 private HashTools () {} //按照MD5进行消息摘要计算(哈希算法) public static String digestByMD5 (String source) throws NoSuchAlgorithmException{

m0_73514610的博客 3040

OP-TEE虚拟化支持详解

OP-TEE虚拟化支持解析 OP-TEE提供实验性虚拟化方案,支持多虚拟机共享安全执行环境。核心特性包括: 配置选项:CFG_VIRTUALIZATION启用虚拟化,CFG_VIRT_GUEST_COUNT限制虚拟机数量并分配均等内存资源; Hypervisor协作:需实现虚拟机生命周期通知、SMC参数转换、内存固定等关键协议; 当前限制:仅支持Armv8架构,硬件资源共享有限,采用静态内存配额机制; 架构实现:通过MMU分区切换和扩展内存分配器实现多租户隔离,Nexus核心层管理虚拟机上下文。该方案适用于

Linux内核架构师 109

哈希值,也被称为哈希码、散列值、摘要或指纹,是将任意长度的消息或数据通过哈希算法转换成固定长度的数字串

哈希值,也被称为哈希码、散列值、摘要或指纹,是将任意长度的消息或数据通过哈希算法转换成固定长度的数字串,通常用于数据的完整性验证、数字签名、密码学安全、数据索引等领域。

[Blog][Domain] programb.blog.youkuaiyun.com 6710

游戏玩家和排行数据抓取:使用 Python 爬虫抓取游戏中的玩家排名、角色数据和战绩

对于游戏开发者、分析师和玩家本身来说,抓取游戏中的玩家排名、角色数据和战绩信息是一项至关重要的任务。Python提供了强大的爬虫库和数据处理工具,可以帮助我们高效地抓取和分析游戏数据,为游戏分析师、开发者以及玩家本身提供有价值的数据支持。通过本篇博客,我们学习了如何使用Python爬虫技术抓取游戏中的玩家排名、角色数据和战绩。本篇博客将详细介绍如何使用Python编写爬虫来抓取游戏中的玩家排名、角色数据和战绩,并结合最新的技术来实现高效的数据抓取与处理。为了方便后续的数据处理,我们将抓取的数据保存到。

2201_76125261的博客 944

分布式训练中All-Reduce、All-Gather、Reduce-Scatter原理

Reduce-Scatter = 先对所有进程的数据做 Reduce(如 sum / mean),再把结果“切分”分发给各进程。(是 Reduce + Scatter 的融合操作。

comli_cn的博客 339

hash函数,哈希算法,MD5。。。理…

hash函数   最初知道这个名字,是在学数据结构的时候,那时候是将哈希算法演示出来,再之后就是学javascript的时候接触的了,在学backbone的时候,看服务器代码的时候,服务器加密使用哈希函数将密码加密成固定大小的字串存储。 百度百科解释: Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固

Amir‘s IT tec 1366

Windows 11 - 打开操作安全中心提示 “需要使用新应用以打开此 Windowsdefender 链接“ 解决方案(电脑更新了 Win11 系统版本后,想关闭病毒防护盾牌的时候提示打不开)

Windows 11 - 打开操作安全中心提示 "需要使用新应用以打开此 Windowsdefender 链接" 解决方案(电脑更新了 Win11 系统版本后,想关闭病毒防护盾牌的时候提示打不开),当您点击任务栏上要关闭安全中心防护设置时,这种情况打不开怎么解决,怎么办,Windows安全中心,病毒和威胁保护,账户保护,防火墙和网络保护,设备安全性。

🏆 前端领域优质创作者 1万+

哈希算法

今天小初来说一说字符串算法又具有暴力美学又实用的算法,即是哈希算法 原理 哈希算法的原理很简单,就是将一段字符串利用某个公式来转换成一个数字,用于方便查找主串中字串是否出现以及出现次数 公式 我们在利用哈希算法的时候,一般选用unsigned long long 的数据类型,因为该数据类型会在溢出的情况下进行求模运算(哈希算法求出来的数字可能会很大),哈希算法为了减小相同的哈希值但是字符串不同的概...

hrqtxdy的博客 292

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

字符串匹配——哈希算法

这是一种优化技巧,用于优化字符串的匹配。是否相等,而是比较二者的哈希值。是哈希基数,相当于把字符串看作。进制数(,哈希函数就是将。的子串,它的哈希值为。的子串,它的哈希值为。我们不直接比较字符串。进制转换为十进制)。

hydrogend的博客 2110

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

关于“哈希”、“哈希函数”、“哈希算法”

哈希是一种加密算法 哈希函数(Hash Function),也称为散列函数或杂凑函数。哈希函数是一个公开函数,可以将任意长度的消息M映射成为一个长度较短且长度固定的值H(M),称H(M)为哈希值、散列值(Hash Value)、杂凑值或者消息摘要(Message Digest)。它是一种单向密码体制,即一个从明文到密文的不可逆映射,只有加密过程,没有解密过程。 它的函数表达式为:h=H(m) 无论输入是什么数字格式、文件有多大,输出都是固定长度的比特串。以比特币使用的Sh256算法为例,无论输入是什么

zmm0420的专栏 2532

Hash+哈希+哈希函数

Hash+哈希+哈希函数 hash == 散列 == 哈希 是一种有损压缩技术 是一种数字指纹技术 哈希是一种加密算法 哈希函数(Hash Function),也称为散列函数或杂凑函数。哈希函数是一个公开函数,可以将任意长度的消息M映射成为一个长度较短且长度固定的值H(M),称H(M)为哈希值、散列值(Hash Value)、杂凑值或者消息摘要(Message Digest)。它是一种单向密码体制,即一个从明文到密文的不可逆映射,只有加密过程,没有解密过程。 它...

data+scenario+science+insight 1074

据说,80%的人都搞不懂哈希算法 区块链 哈希算法

本文约9000字+,阅读(观看)需要52分钟聊到区块链的时候也少不了会听到“哈希”、“哈希函数”、“哈希算法”,是不是听得一头雾水?别急,这一讲我们来讲讲什么是哈希算法。哈希是一种加密算法哈希函数(Hash Function),也称为散列函数或杂凑函数。哈希函数是一个公开函数,可以将任意长度的消息M映射成为一个长度较短且长度固定的值H(M),称H(M)为哈希值、散列值(Hash Value)、杂凑...

大侠区块链的博客 1万+

哈希表 -(hash 算法是将任意对象,分配一个编号的过程)

未考虑 hash 码的生成,假定该 hash 码由我们提供。

m0_54467592的博客 918

据说,80%的人都搞不懂哈希算法

阅读原文 哈希是一种加密算法 哈希函数(Hash Function),也称为散列函数或杂凑函数。哈希函数是一个公开函数,可以将任意长度的消息M映射成为一个长度较短且长度固定的值H(M),称H(M)为哈希值、散列值(Hash Value)、杂凑值或者消息摘要(Message Digest)。它是一种单向密码体制,即一个从明文到密文的不可逆映射,只有加密过程,没有解密过程。 它的函数表达式为:h=H...

宽客在线的博客 2060

[hash] 哈希的简单入门

算法竞赛中的哈希是往往是种种概率/玄学但是又贼鸡儿快方便的神奇算法 本质是通过对目标数据建立唯一映射进行缩小数据规模的权值判断, 常常可以乱搞一些题目 对循环数组的hash https://www.acwing.com/problem/content/139/ 解题思路: 对每个六元组求最小表示, 然后用乘积与和对应的双hash映射入一个链表 再判断即可 字符串哈希 http...

Zeolim的博客 355

文本去重:sim哈希算法

站在巨人_啊哈、zstu_翊、lengye7、黑夜路人的肩膀上~ 分析数据前,我们需要对数据去重,如何选择和设计文本的去重算法? 常见的去重算法有:余弦夹角算法、欧式距离、Jaccard相似度、最长公共子串、编辑距离等。这些算法是先将两篇文章分别进行分词,得到一系列特征向量,然后计算特征向量之间的距离(可以计算它们之间的欧氏距离、海明距离或者夹角余弦等等),从而通过距离的大小来判断两篇文章的相似度。这些算法对于数据量小的文本还比较好用,我们如何对于这些海量千万级的数据进行高效的合并去重? sim哈希算法原理

jerry zhang的sally wu 1917

LibreOJ 子串查找(哈希算法--字符串哈希解析)

题目链接:https://loj.ac/problem/103 哈希算法: 哈希算法是通过一个哈希函数H,将一种数据(包括字符串,较大的数等)转化为能够用的变量表示或是直接就可以作为数组下标的数 字符串哈希:解决匹配串在主串出现的位置或次数问题。关键是计算字符串的哈希值。 计算字符串的哈希值:滚动哈希技巧 选取两个合适的互质常数b和h(b<h),假设字符串C=c1c2…cm,那么我们定义哈...

zaiyang遇见 576

哈希算法通俗易懂

转载自:http://www.sohu.com/a/232586831_100078137 聊到区块链的时候也少不了会听到“哈希”、“哈希函数”、“哈希算法”,是不是听得一头雾水?别急,这一讲我们来讲讲什么是哈希算法。 哈希是一种加密算法 哈希函数(Hash Function),也称为散列函数或杂凑函数。哈希函数是一个公开函数,可以将任意长度的消息M映射成为一个长度较短且长度固定的值H(M)...

516843761 1万+

从头到尾彻底解析Hash 表算法

在研究MonetDB时深入的学习了hash算法,看了作者的文章很有感触,所以转发,希望能够使更多人受益! 十一、从头到尾彻底解析Hash 表算法 作者:July、wuliming、pkuoliver出处:http://blog.youkuaiyun.com/v_JULY_v。说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解;...

dfbe40440的博客 519
上一篇: auto,static,register,const,volatile,extern 关键字的作用
下一篇: 动态Array处理方法
ybugchen
博客等级 码龄22年 1粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值