当前位置: 首页 > article >正文

数据结构(哈希函数)

#pragma once//之前已经学完的顺序表链表等 他们总是有一个共有的特征数据和其存储之间是没有任何关系的//现在的需求 让查找函数的时间复杂度达到O(1);//让数据和其存储位置之间产生某种函数映射关系 这就是哈希//6种哈希函数的构建方法//除留取余法//折叠法//平方取中法//数组分析法//直接定址法//随机数法 散列哈希//如果出现了哈希冲突 怎么解决//4个解决哈希冲突的方法 哈希冲突 不同的关键字却//开发地址法 存储位置f(关键字)// // 1 开发指针法// f1(key)(f(key)d1)MODm (d11,2,3,4,,.....)线性探测法// 二次探针法// 随机探测法//再散列函数法//公共区溢出法// 通过哈希函数的计算得到的哈希地址 先去与基本表来对比 如果等于 则成功 如果不等于 则对其溢出表进行顺序表查找// 使用场景 冲突的数据表很小时//链地址法//#define MAXSIZE 12typedef struct LA_Node{int date;struct LA_Node* next;}LA_Node;typedef struct LinkADDress{LA_Node LA_arr[MAXSIZE];}LinkAddress;//0 哈希函数调用int Get_HashAddress(int key);//1 初始化void Init_LA(LinkAddress* pla);//2 插入bool Insert_LA(LinkAddress* pla, int key);//3 查找LA_Node* search_LA(LinkAddress* pla, int key);//4 打印void Show(LinkAddress* pla);//5 删除bool Delete_LA(LinkAddress* p#define _CRT_SECURE_NO_WARNINGS#include stdio.h#include stdlib.h#include string.h#include assert.h#include memory.h#include Link_Address.h//0.计算哈希地址函数int Get_HashAddress(int key){return key % MAXSIZE;}//1.初始化void Init_LA(LinkAddress* pla){for (int i 0; i MAXSIZE; i){//pla-LA_arr[i].data;//数据域不使用 不用赋值pla-LA_arr[i].next NULL;//pla-LA_arr[i].nextNULL;}}//2.插入bool Insert_LA(LinkAddress* pla, int key){LA_Node* p Search_LA(pla, key);if (p ! NULL){return true;}int index Get_HashAddress(key);LA_Node* pnewnode (LA_Node*)malloc(sizeof(LA_Node));if (pnewnode NULL)exit(EXIT_FAILURE);pnewnode-date key;pnewnode-next pla-LA_arr[index].next;pla-LA_arr[index].next pnewnode;return true;/* LA_Node* p Search_LA(pla, key);if (p ! NULL){return true;}int index Get_HashAddress(key);LA_Node* pnewnode (LA_Node*)malloc(sizeof(LA_Node));if (pnewnode NULL)exit(EXIT_FAILURE);pnewnode-data key;pnewnode-next pla-LA_arr[index].next;pla-LA_arr[index].next pnewnode;return true;*/}//3.查找LA_Node* Search_LA(LinkAddress* pla, int key){int index Get_HashAddress(key);for (LA_Node* p pla-LA_arr[index].next; p ! NULL; p p-next){if (p-date key){return p;}}return NULL;//int index Get_HashAddress(key);//for (LA_Node* p pla-LA_arr[index].next; p ! NULL; p p-next)//{// if (p-data key)// return p;//}}//4.打印void Show(LinkAddress* pla){for (int i 0; i MAXSIZE; i){printf(第%d行, i);for (LA_Node* p pla-LA_arr[i].next; p ! NULL; p p-next){printf(%d-, p-date);}printf(\n);}//for (int i 0; i MAXSIZE; i)//{// printf(第%d行; , i);// for (LA_Node* p pla-LA_arr[i].next; p ! NULL; p p-next)// {// printf(%d-, p-data);// }// printf(\n);//}}//5.删除bool Delete_LA(LinkAddress* pla, int key){//作业int index Get_HashAddress(key);LA_Node* q Search_LA(pla, key);if (NULL q)return false;LA_Node* p pla-LA_arr[index];for (; p-next ! q; p p-next);p-next q-next;free(q);return true;/*int index Get_HashAddress(key);LA_Node* q Search_LA(pla, key);if(q!NULL)return true;LA_Node* p pla-LA_arr[index];for (; p-next ! q; p p-next);p-next q-next;free(q);return true;*/}//int main()//{// LinkAddress head;// Init_LA(head);//// Insert_LA(head, 12);// Insert_LA(head, 67);// Insert_LA(head, 56);// Insert_LA(head, 16);// Insert_LA(head, 25);// Insert_LA(head, 37);// Insert_LA(head, 22);// Insert_LA(head, 29);// Insert_LA(head, 15);// Insert_LA(head, 47);// Insert_LA(head, 48);// Insert_LA(head, 34);//// Show(head);//// return 0;//}//哈希扩展技术//一致性哈希//虚拟节点//布隆过滤器//1 一致性哈希// 一致性哈希就是解决数据受影响太大的问题// 一个服务器管理一段数据 减少变化引起的数据影响// 虚拟节点// 增加一堆与主服务器相同的虚拟服务器 将数据分的很细 减少变化引起的数据影响// 布隆过滤器// 在海量数据中确定一个值是否存在// 布隆过滤器 一个特别大的二进制矢量数组若干个哈希函数 占700W~800W个格子 800W100W字节 约等于 1000K 约等于 1MB// 布隆过滤器 存在一定的误判率// 优点 1 简单 体积小 2 确定一个人不在 则一定不在 3 保密性特别好// 缺点 1 缺点一个人不在 不一定不在 2 只能插入不能删除//Java 需要一个参数 你能接受的误判率大小la, int key);

相关文章:

数据结构(哈希函数)

#pragma once //之前已经学完的,顺序表,链表等 他们总是有一个共有的特征,数据和其存储之间是没有任何关系的 //现在的需求 让查找函数的时间复杂度达到O(1); //让数据和其存储位置之间产生某种函数(映射)关系 这就是哈…...

网页布局基石----盒子模型

目录 一:盒模型的构成 二:盒模型的核心属性 三:标准盒子模型代码实例 CSS控制网页样式是通过盒子模型去实现的,日常中我们所看到的网页上所以标签都可以视为一个盒子。所以网页都是放在盒子里面的。因此,我们首先要…...

RAG 系统优化全流程:从数据入库到召回排序

RAG(Retrieval-Augmented Generation)系统的检索质量直接决定生成内容的上限。本文从工程落地角度,系统梳理 RAG 检索链路的三个核心阶段——入库、查询与召回。针对每个阶段的关键技术(语义分割、问答模拟、查询改写、语义校验、混合检索、语义重排)给出定义、问题背景、…...

MCC-425 协议转换网关:打通制冷机组与 CAN 控制器数据链路

背景在工业精密温控领域,制冷机组的运行参数(如温度、压力、流量)直接决定了工艺流程的稳定性。为了实现生产现场的数字化管理,必须将分布在各工位的制冷机组数据实时汇聚至中控室,以便上位机进行统一监控与逻辑调度 。…...

别再只做AB测试了!用Python实战倾向性得分匹配(PSM),搞定业务中的因果推断难题

用Python实战倾向性得分匹配(PSM):超越AB测试的因果推断利器 在数据驱动的决策时代,企业经常面临一个核心问题:如何准确评估策略或干预措施的真实效果?传统AB测试虽然简单直观,但在面对历史数据、观测数据等非随机实验…...

DroidCam OBS插件终极指南:零成本将手机变身高清直播摄像头

DroidCam OBS插件终极指南:零成本将手机变身高清直播摄像头 【免费下载链接】droidcam-obs-plugin DroidCam OBS Source 项目地址: https://gitcode.com/gh_mirrors/dr/droidcam-obs-plugin 还在为专业直播设备价格昂贵而烦恼?想用手机摄像头获得…...

开发者行为数据挖掘:从Stack Overflow发现隐性需求

1. 项目概述:从开发者行为数据挖掘隐性需求在软件开发领域,需求工程一直面临着如何准确捕捉用户真实需求的挑战。传统方法如用户访谈、问卷调查等依赖于用户的主动表达,但开发者往往不会明确说出他们需要什么,而是通过日常行为无意…...

3步重构你的系统菜单:告别混乱的高效管理方案

3步重构你的系统菜单:告别混乱的高效管理方案 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾经在右键点击文件时,面对满屏的无关…...

低价轻小件承压明显之后跨境卖家如何重设利润安全线

薄利之困:跨境卖家如何重塑利润防线当全球电商平台的促销战鼓擂响,价格一降再降,那些曾经依赖“低价轻小件”策略的跨境卖家们,正感受到前所未有的压力。物流成本波动、平台佣金上涨、同质化竞争加剧……多重因素交织下&#xff0…...

泛微OA ecology 9实战:手把手教你写一个能取表单数据的Java自定义接口

泛微OA Ecology 9深度开发:构建高效表单数据交互的Java接口实践 在当今企业数字化转型浪潮中,办公自动化系统(OA)作为核心支撑平台,其灵活性和扩展性直接影响着企业运营效率。泛微OA Ecology 9作为国内领先的协同办公平台,提供了丰…...

Raycast扩展vscode-control:用全局启动器遥控VS Code提升开发效率

1. 项目概述:一个为Raycast打造的VS Code遥控器 如果你和我一样,每天大部分时间都泡在代码编辑器里,那么你一定对频繁在编辑器、终端、浏览器和启动器之间切换感到厌烦。尤其是当你需要快速执行一个格式化操作、运行一个NPM脚本,…...

基于STC89C51单片机的多波形信号发生器设计与Proteus仿真

基于STC89C51单片机的多波形信号发生器设计与Proteus仿真 摘 要 随着电子技术和集成电路的飞速发展,信号发生器作为电子测量领域的基础设备,其性能和智能化水平不断提升。本设计以STC89C51单片机为控制核心,设计了一款多波形信号发生器。系统…...

从数学定义到代码实现:深度解析卷积与互相关的本质差异

1. 卷积与互相关的数学定义 很多人第一次接触卷积和互相关时,都会觉得它们长得太像了。确实,从表面上看,它们都是用一个滑动窗口在输入数据上移动,然后进行加权求和。但如果你仔细研究它们的数学定义,就会发现本质上的…...

告别AT指令!用nRF52832的BLE NUS服务,5分钟搞定手机与开发板的双向通信

用nRF52832的BLE NUS服务实现高效蓝牙串口通信 在嵌入式开发中,设备与移动端的双向通信一直是个痛点。传统AT指令虽然简单,但效率低下、扩展性差,每次通信都需要复杂的握手流程。而基于nRF52832的BLE NUS(Nordic UART Service&…...

增量式编码器驱动开发实战:从原理到FPGA高速计数

1. 增量式编码器核心原理剖析 第一次接触增量式编码器时,我完全被它精妙的设计震撼到了。这种看似简单的装置,竟然能同时测量转速、转向和位置信息。拆开我们实验室的欧姆龙E6B2编码器,你会发现它的核心就是三个部分:发光二极管、…...

基于OpenAI API与社交平台集成的智能聊天机器人构建指南

1. 项目概述:一个整合社交与AI的自动化工具箱最近在GitHub上看到一个挺有意思的项目,叫“Whatsapp_Instagram_Messanger_ChatGPT_OpenAI”。光看这个标题,你大概就能猜到它的野心不小——它试图把WhatsApp、Instagram、Messenger这几个主流社…...

告别手动配置!用Tcl脚本一键生成RFSoC RF-ADC/DAC IP核(Vivado 2023.2)

告别手动配置!用Tcl脚本一键生成RFSoC RF-ADC/DAC IP核(Vivado 2023.2) 在FPGA开发中,RFSoC平台的RF数据转换器配置往往是项目迭代中最耗时的环节之一。每次新建工程或调整参数时,开发者都需要在Vivado GUI中重复点击数…...

GPT-5.5推理效率优化背后的5个核心技术突破

概要GPT-5.5是OpenAI于2026年4月23日发布的旗舰模型,代号"Spud"。最近在库拉(c.877ai.cn)AI工具聚合平台上做了集中测试,GPT-5.5的推理效率提升不是单一优化的结果,而是五个核心技术方向同时突破。从数据看&…...

AI应用开发面试题总结(非八股文)

前端请求超过 3 秒,怎么分析原因? 1.看前端和网络 F12开发者模式去查看network,首先判断是前端问题还是后端问题 通过查看接口 Waiting 时间进行判断是后端响应时间太长还是说前端渲染问题 2.给后端接口添加日志进一步定位后端问题 3.如果…...

ERP生产模块设计:从BOM到完工

一、基础数据:BOM与工艺路线生产模块的核心是BOM(物料清单)和工艺路线。这两个搞不清楚,生产计划无从谈起。1. BOM表结构CREATE TABLE bd_bom (id BIGINT PRIMARY KEY AUTO_INCREMENT,bom_no VARCHAR(30) NOT NULL UNIQUE,materia…...

如何高效处理RPG Maker加密资源:纯前端解密方案深度解析

如何高效处理RPG Maker加密资源:纯前端解密方案深度解析 【免费下载链接】RPG-Maker-MV-Decrypter You can decrypt RPG-Maker-MV Resource Files with this project ~ If you dont wanna download it, you can use the Script on my HP: 项目地址: https://gitco…...

机器人接触式操作:混合式轨迹优化与策略学习

1. 机器人接触式操作的核心挑战与解决方案在机器人操作领域,接触式任务(如物体翻转、装配、精密放置)一直是最具挑战性的问题之一。这类任务要求机器人频繁建立和断开与物体的接触,同时需要精确控制接触力和运动轨迹。哪怕几毫米的…...

MediaCreationTool.bat:革命性的Windows自动化部署解决方案

MediaCreationTool.bat:革命性的Windows自动化部署解决方案 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat …...

5分钟上手iFakeLocation:无需越狱的iOS虚拟定位神器

5分钟上手iFakeLocation:无需越狱的iOS虚拟定位神器 【免费下载链接】iFakeLocation Simulate locations on iOS devices on Windows, Mac and Ubuntu. 项目地址: https://gitcode.com/gh_mirrors/if/iFakeLocation iFakeLocation是一款强大的跨平台开源工具…...

告别重启:IDEA集成JRebel实现Java代码热部署全攻略

1. 为什么你需要JRebel来拯救开发效率 作为一个Java开发者,你一定经历过这样的痛苦:每次修改完代码,都要经历漫长的重启等待。特别是开发Web应用时,改一行代码就要重启Tomcat,看着进度条慢慢爬行,那种感觉就…...

用Wireshark抓包分析Powerlink协议:从数据帧看懂主站轮询与从站响应

Wireshark实战:深度解析Powerlink协议的主从站通信机制 工业以太网协议Powerlink凭借其确定性实时通信能力,在自动化控制领域占据重要地位。本文将带您通过Wireshark抓包分析,揭开Powerlink主站轮询与从站响应的核心机制。不同于基础配置教程…...

数据获取指南

教程:数据获取指南 作者:太虚野老 目录 说明: 3 数据获取指南 4 计划:创建和填充示例表 4 基础数据检索 4 过滤和排序结果 6 处理多表(JOIN)和函数 7 SELECT 语句修饰符 8 说明: 1.MariaDB版本:10.11.14 2.开发工具:dbeaver(版本25.3.0) 3.操作系统:debian12…...

从VMware嵌套虚拟化到NFS共享存储:一份给运维新人的FusionCompute平台搭建避坑实录

从VMware嵌套虚拟化到NFS共享存储:一份给运维新人的FusionCompute平台搭建避坑实录 刚接触云计算平台搭建的运维工程师,往往会被各种专业术语和复杂配置搞得晕头转向。华为FusionCompute作为企业级虚拟化平台,功能强大但入门门槛不低。本文将…...

STM32F103C8T6驱动MAX30102:从CubeMX配置到心率可视化,一个LED灯带你看懂心跳

STM32F103C8T6驱动MAX30102:从硬件交互到心跳可视化实战 当你第一次看到LED灯随着自己的心跳节奏闪烁时,那种将生物信号转化为物理反馈的奇妙体验,正是嵌入式开发的魅力所在。本文将带你用STM32F103C8T6和MAX30102血氧传感器,打造…...

实战 | 性能瓶颈无处遁形,揭秘 mPaaS 全链路压测的落地策略与调优秘籍

1. 从性能焦虑到精准定位:为什么需要全链路压测? 第一次接手移动应用性能优化项目时,我盯着监控大屏上跳动的红色警报线手足无措。用户投诉像雪片般飞来:"支付页面卡死"、"图片加载转圈半分钟"、"活动页…...