哈希表、算法

server/2025/1/16 0:57:29/

哈希表

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.低存储(空间复杂度)

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

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

几种常见时间复杂度比较


http://www.ppmy.cn/server/117362.html

相关文章

在服务器上开Juypter Lab教程(远程访问)

在服务器上开Juypter Lab教程&#xff08;远程访问&#xff09; 文章目录 在服务器上开Juypter Lab教程&#xff08;远程访问&#xff09;一、安装anaconda1、安装anaconda2、提权限3、运行4、同意协议5、安装6、是否要自动初始化 conda7、结束8、检查 二、Anaconda安装Pytorch…

图分类!!!

deepwalk 使用图中节点与节点的共现关系来学习节点的向量表示。那么关键的问题就是如何来描述节点与节点的共现关系&#xff0c;DeepWalk给出的方法是使用随机游走(RandomWalk)的方式在图中进行节点采样,RandomWalk是一种可重复访问已访问节点的深度优先遍历算法。给定当前访问…

跟李沐学AI:长短期记忆网络LSTM

输入们、遗忘门和输出门 LSTM引入输入门、忘记门和输出门 输入门计算公式为&#xff1a;。 遗忘门计算公式为&#xff1a;。 输出门计算公式为&#xff1a;。 它们由三个具有sigmoid激活函数的全连接层处理&#xff0c; 以计算输入门、遗忘门和输出门的值。 因此&#xff0c…

Hazel 2024

不喜欢游戏的人也可以做引擎&#xff0c;比如 cherno 引擎的作用主要是有两点&#xff1a; 将数据可视化交互 当然有些引擎的功能也包含有制作数据文件&#xff0c;称之为资产 assets 不做窗口类的应用栈&#xff0c;可能要花一年才能做一个能实际使用的应用&#xff0c;只需…

深度学习基础--卷积网络

图像的三个特性指出了专门模型架构的必要性。 首先&#xff0c;图像是高维的&#xff0c;一个用于分类任务的典型图像含有 224224 RGB 值&#xff08;即&#xff0c;150528 个输入维度&#xff09;。在全连接网络中&#xff0c;隐藏层的规模通常超过输入大小&#xff0c;因此&a…

智慧农业可视化平台:全程监控高效管理

通过图扑可视化平台实时监控农产品从生产到销售的每一个环节&#xff0c;提高供应链透明度&#xff0c;确保质量安全&#xff0c;提升运维效率&#xff0c;助力农业现代化。

【C语言】选择排序及优化、冒泡排序、计数排序的实现

目录 一、选择排序1.1 常规版&#xff08;一次排好一个数&#xff09;1.1.1 基本思想1.1.2 实现思路1.1.3 代码 1.2 优化版&#xff08;一次排好两个数&#xff09;1.2.1 实现思路1.2.2 代码 1.3 时间复杂度 二、冒泡排序2.1 实现思路2.2 代码2.3 时间复杂度 三、计数排序3.1 基…

Java实现建造者模式和源码中的应用

&#x1f3af; 设计模式专栏&#xff0c;持续更新中&#xff0c; 欢迎订阅&#xff1a;JAVA实现设计模式 &#x1f6e0;️ 希望小伙伴们一键三连&#xff0c;有问题私信都会回复&#xff0c;或者在评论区直接发言 Java实现建造者模式&#xff08;Builder Pattern&#xff09; 文…