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

哈希表、算法

哈希表

hash:

在编程和数据结构中,"hash" 通常指的是哈希函数,它是一种算法,用于将数据(通常是字符

串)映射到一个固定大小的数字(哈希值)。哈希函数在哈希表中尤为重要,哈希表是一种通过哈

希函数将键映射到表中位置的数据结构,以实现快速的数据插入和检索。

哈希表(Hash Table):

也称为散列表,是一种通过哈希函数将键(Key)映射到表中一个位置以

便快速访问记录的数据结构。哈希表可以快速地插入和查找数据。

哈希算法:

将要存储的关键字与要存储的位置建立一种联系,这种联系就叫哈希函数/散列函数

哈希表的相关函数:

插入数据

int insert_hashtable(HSDataType data)
{int addr = hash_function(data.name[0]);HSNode_t *hanode = malloc(sizeof(HSNode_t));if(NULL == hanode){perror("fail malloc");return -1;}hanode->data = data;hanode->pnext = NULL;hanode->pnext = hashtable[addr];hashtable[addr] = hanode;
}

遍历哈希表

void hashtable_for_each()
{for(int i = 0;i < HASH_SIZE;++i){HSNode_t *p = hashtable[i];while(p != NULL){printf("**%10s  **%3s\n",p->data.name,p->data.tel);p = p->pnext;}}printf("\n");
}

查找数据

int find_key_hashtable(HSDataType data)
{int addr = hash_function(data.name[0]);HSNode_t *p = hashtable[addr];while(p != NULL){if(!strcmp(p->data.name,data.name)){printf("%s  %s\n",p->data.name,p->data.tel);return 0;}p = p->pnext;}return -1;
}

销毁哈希表

int destory_hashtable()
{for(int i = 0;i < HASH_SIZE;++i){HSNode_t *p = NULL;while(hashtable[i] != NULL){p = hashtable[i];hashtable[i] = p->pnext;free(p);}}
}

算法

算法即解决特定问题求解步骤

算法的设计

1.正确性

语法正确

合法的输入得到合理的结果

对非法的输入,给出满足要求的规格说明

对精心选择,甚至刁难的测试都能正常运行,结果正确

2.可读性

便于交流,阅读,理解 高内聚,低耦合

3.健壮性

输入非法内容,能进行相应的处理,而不是产生异常

4.高效率(时间复杂度)

算法时间复杂度:

执行这个算法所花时间的度量

将数据量增长和时间增长用函数表示出来,这个函数就叫做时间复杂度。

一般用大0表示法:0(n)------>时间复杂度是关于数据n的一个函数

随着n的增加,时间复杂度增长较慢的算法时间复杂度低

时间复杂度的计算规则

1,用常数1 取代运行时间中的所有加法常数

2,在修改后的运行函数中,只保留最高阶项

3,如果最高阶存在且系数不是1,则去除这个项相乘的常数

5.低存储(空间复杂度)

空间复杂度越低:低存储 越高:高存储

时间复杂度越低:高效率 越高:低效率

几种常见时间复杂度比较

相关文章:

哈希表、算法

哈希表 hash&#xff1a; 在编程和数据结构中&#xff0c;"hash" 通常指的是哈希函数&#xff0c;它是一种算法&#xff0c;用于将数据&#xff08;通常是字符 串&#xff09;映射到一个固定大小的数字&#xff08;哈希值&#xff09;。哈希函数在哈希表中尤为重要…...

变更AWS EC2 实例配置或实例类型

在本文中&#xff0c;九河云将带您了解如何更改由 Amazon Elastic Block Store (EBS) 支持的 Amazon Elastic Compute Cloud (EC2) 实例的类型。更改实例类型可以优化成本和性能&#xff0c;使其更符合您的应用程序需求。 准备工作 在开始之前&#xff0c;请确保您已完成以下…...

【前端】ref引用的作用

首先&#xff0c;我们要明确一点&#xff0c;使用vue的好处是&#xff1a; 想要减少开发者直接操作dom元素。使用组件模版&#xff0c;实现代码的服用。 ref的属性的实现是为了取代原生js中使用id、class等标识来获取dom元素。 helloworld组件 <template><div clas…...

运用Java实现倒计时功能

这个功能其实是比较好实现的&#xff0c;一般来说java中实现倒计时有两种方法&#xff1a; 1、使用 scheduledexecutorservice创建一个可重复执行的任务&#xff0c;直到时间到&#xff1a; ScheduledExecutorService 是 Java 中一种用于安排延迟或定期任务的工具。我们可以使…...

Vue 第三方调用若依系统实现系统单点登录

应用场景 甲方现有平台系统拟集成我方新开发系统&#xff0c;实现单点登录功能&#xff0c;即用户登录主平台后&#xff0c;无需重复登录即可无缝访问新系统&#xff0c;提升用户体验与操作效率。 解决方案 实现代码 前端 Step:1 新建ssoLogin.vue页面 <template><d…...

IP纯净度对跨境电商有哪些影响

在全球化贸易的浪潮中&#xff0c;跨境电商凭借其打破地理界限的能力&#xff0c;成为推动国际贸易的重要力量。然而&#xff0c;跨境电商的运营并非没有挑战&#xff0c;其中IP纯净度是影响其成功的关键因素之一。本文将探讨IP纯净度对跨境电商运营的多方面影响&#xff0c;并…...

docker-01 创建一个自己的镜像并运行容器

docker-01 创建一个自己的镜像并运行容器 前言 我们都知道使用Docker的镜像可以快速创建和部署应用&#xff0c;大大的节约了部署的时间。并且Docker 的镜像提供了除内核外完整的运行时环境&#xff0c;确保代码的环境一致性&#xff0c;从而不会在出现这段代码在我机器上没问…...

国产视频转换HDMI1.4转单/双MIPI DSI/CSI LT6911C芯片方案,带音频输出,QFN64封装 Lontium

LT6911C:HDMI 1.4 TO MIPI DSI/CSI 芯片简介&#xff1a; LT6911C是一款高性能的HDMI1.4转换器MIPI DSI/CSI芯片用于VR/智能手机/显示应用。对于MIPI DSI/CSI输出&#xff0c;LT6911C功能可配置单端口或双端口MIPIDSI/CSI 1高速时钟通道和1~4个高速数据通道最大1.5Gb/s/lane&am…...

亚马逊、沃尔玛、敦煌网、Target塔吉特、Temu环境搭建测评技术!

海外跨境电商各大主要平台正不断力推半托管模式&#xff0c;不断对商家开出众多吸引和扶持政策。全托管是指电商平台全面负责店铺的运营&#xff0c;包括仓储、配送、售后等&#xff0c;而商家主要负责提供货品。半托管模式则基本由商家自主经营&#xff0c;平台只负责仓配物流…...

yjs05——matplotlib画其他图像

不管是折线图还是散点图&#xff0c;饼状图&#xff0c;柱状图等&#xff0c;其流程都是 1.创建幕布 ❤2.画图画坐标补充信息 3.保存图像 4.展示图像 不同就是在画图时候的代码不太相同 折线&#xff1a;plt.plot(x,y) 散点&#xff1a;plt.scatter() 柱状图&#xff1a;plt.hi…...

【C#】添加临时环境变量

在C#中&#xff0c;可以通过System.Environment类来添加临时环境变量。临时环境变量只在当前进程中有效&#xff0c;进程结束后变量即失效&#xff0c;不会写入系统的Path中。 using System;class Program {static void Main(){// 设置临时环境变量Environment.SetEnvironment…...

物联网之ESP32与微信小程序实现指示灯、转向灯

MENU ESP32微信小程序 ESP32 代码 #include <WiFi.h> #include <WebServer.h> #include <ArduinoJson.h>const char* ssid "jifu"; const char* pass "2022xinchan!#"; const int dateTime 500; const int ledPin4 4; const int le…...

ICPC网络赛 以及ACM训练总结

一、训练反思 关于我自己暑假期间训练的反思&#xff0c;我承认无论是因为什么原因&#xff0c;我自己浪费我整整一个暑假的时间&#xff0c;暑假期间正是我们集训的关键时期&#xff0c;这期间没有任何的事情来打扰我们学习&#xff0c;而我却熬夜&#xff0c;白天训练懈怠&a…...

优化深度学习模型训练过程:提升PASCAL VOC 2012数据集上Deeplabv3+模型训练效率的策略

创作不易&#xff0c;您的打赏、关注、点赞、收藏和转发是我坚持下去的动力&#xff01; 优化说明&#xff1a; 避免重复下载和解压数据集&#xff1a;将downloadTrue改为downloadFalse&#xff0c;防止每次运行代码都重新下载和解压数据集&#xff0c;从而节省时间。 使用pin…...

【乐吾乐大屏可视化组态编辑器】使用手册

1 总览 开始设计&#xff1a;大屏可视化设计器 - 乐吾乐Le5le 1.1 画布 画布即绘画区域&#xff0c;将图形拖拽到画布进行编辑&#xff0c;绘制大屏。 1.2 菜单栏 顶部菜单导航&#xff0c;一级菜单可设置Logo、公司名称、文件编辑、常用编辑、查看、帮助&#xff0c;设置大…...

uniapp+若依 开发租房小程序源码分享

1、使用Uniapp开发的前台&#xff0c;基于 Vue.js 开发所有前端应用的框架&#xff0c;开发者编写一套代码&#xff0c;可发布到iOS、Android、Web&#xff08;响应式&#xff09;、以及各种小程序 2、基于SpringBoot的权限管理系统&#xff0c;易读易懂、界面简洁美观。 核心…...

日系编曲:节奏吉他与主音吉他 吉他的节奏型 节奏吉他的编写思路 吉他的Riff

这篇文章介绍的是日系吉他编写中的多吉他编写思路&#xff01; 日系吉他构成特点 ​一般日系曲子构成有两把以上的吉他&#xff0c;根据需求来进行补充&#xff1a; 通常至少为一把主音一把节奏&#xff0c;一把左一把右&#xff0c;主音一般是电吉他&#xff0c;节奏可以是电…...

【网络安全的神秘世界】目录遍历漏洞

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 先来了解两个概念&#xff1a; 身份认证&#xff1a;验证用户或者系统身份的过程&#xff0c;确保他们所声明的身份是真实的…...

使用 SpringBoot 基础web开发的支持

首先导入项目相关的依赖&#xff1a; pom.xml 文件&#xff1a; 导入相关项目依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-in…...

nature reviews genetics | 细胞互作和通讯方法总结

–https://doi.org/10.1038/s41576-023-00685-8 The diversification of methods for studying cell–cell interactions and communication 留意更多内容&#xff0c;欢迎关注微信公众号&#xff1a;组学之心 研究团队和研究单位 细胞间相互作用的前沿进展&#xff1a;从转…...

突破网盘限速壁垒:八大平台通用直链下载解决方案

突破网盘限速壁垒&#xff1a;八大平台通用直链下载解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 …...

UE5游戏逆向实战:用FModel提取.pak文件中的3D模型(附Dumper-7避坑指南)

UE5游戏逆向实战&#xff1a;用FModel提取.pak文件中的3D模型&#xff08;附Dumper-7避坑指南&#xff09; 在虚幻引擎5&#xff08;UE5&#xff09;游戏开发与逆向工程领域&#xff0c;资源提取始终是开发者与爱好者关注的核心技能。随着引擎版本迭代&#xff0c;传统的.pak文…...

【深度解析】二维半导体晶体管:突破摩尔定律的下一代集成电路核心

1. 二维半导体晶体管的崛起&#xff1a;摩尔定律的终结者&#xff1f; 当硅基芯片的制程工艺逼近1纳米物理极限时&#xff0c;整个集成电路行业都在寻找"后硅时代"的突破口。我第一次在实验室见到二硫化钼&#xff08;MoS2&#xff09;晶体管时&#xff0c;那片厚度不…...

Java 21虚拟线程实战:从基础创建到高并发场景调优

1. Java 21虚拟线程入门&#xff1a;从零开始掌握轻量级并发 第一次听说Java 21的虚拟线程时&#xff0c;我正被一个高并发服务的性能问题折磨得焦头烂额。当时我们的支付网关在促销期间每秒要处理上万笔交易&#xff0c;传统的线程池模型让服务器资源捉襟见肘。直到尝试了虚拟…...

React Native Tab View终极指南:快速构建音乐播放器和聊天应用

React Native Tab View终极指南&#xff1a;快速构建音乐播放器和聊天应用 【免费下载链接】react-native-tab-view A cross-platform Tab View component for React Native 项目地址: https://gitcode.com/gh_mirrors/re/react-native-tab-view React Native Tab View是…...

OpenClaw安全指南:Qwen3.5-9B模型下的权限管控实践

OpenClaw安全指南&#xff1a;Qwen3.5-9B模型下的权限管控实践 1. 为什么需要关注OpenClaw的安全管控&#xff1f; 去年冬天的一个深夜&#xff0c;我被一阵急促的硬盘读写声惊醒。打开终端查看&#xff0c;发现是OpenClaw正在疯狂扫描我的整个Documents文件夹——原来是我白…...

清音刻墨·Qwen3在科研协作中的应用:学术访谈转录+时间锚点标注

清音刻墨Qwen3在科研协作中的应用&#xff1a;学术访谈转录时间锚点标注 想象一下这个场景&#xff1a;你刚刚结束了一场长达两小时的深度学术访谈&#xff0c;录音文件静静地躺在电脑里。接下来&#xff0c;你需要逐字逐句地听写、整理、校对&#xff0c;再手动为每一句话打上…...

QT——计算器核心算法

1.中缀表达式转后缀表达式(1)分离算法&#xff08;数字和符号分离&#xff09;中缀表达式中包含&#xff1a;数字和小数点、符号位&#xff08;或-&#xff09;、运算符&#xff08;-*/&#xff09;、括号思想&#xff1a;以符号作为标志对表达式中的字符逐个访问当前字符exp[i…...

不只是代码:用 Agent 构建全自动数据分析与可视化流水线

不只是代码:用 Agent 构建全自动数据分析与可视化流水线 1. 引入与连接:从"手动分析"到"智能自动化"的范式转变 1.1 一个数据分析师的典型一天 让我们想象一下,李明是一家互联网公司的资深数据分析师。每天早上9点,他都会坐在电脑前开始他熟悉的工作…...

解决Lumerical(FDTD)中lumapi模块导入失败的完整指南

1. 为什么会出现lumapi导入失败的问题 第一次遇到import lumapi报错的时候&#xff0c;我也是一头雾水。明明按照官方文档安装了Lumerical软件和lumopt扩展包&#xff0c;怎么Python就找不到这个模块呢&#xff1f;后来经过多次实践和排查&#xff0c;发现这个问题在Windows系统…...