哈希表-示例(这个还是实际的功能应用更便于理解)

2024-01-10 04:04

本文主要是介绍哈希表-示例(这个还是实际的功能应用更便于理解),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

示例代码参考代码随想录

1、啥是哈希表

哈希表,简单说吧,复杂的现在还没有弄明白怎么描述

1、就是按照一定的规则,将数据存入到数据结构中。而C语言中现在我们常见的就是数组,以及使用数组和链表的结合。还有C++,一般使用的都是unordered_set,unordered_map。

突出的就是一个存储位置和值的对应关系(书上写的是关键字,,实际上就是值,看书上的强迫症都犯了

比如计算存储位置(索引)的方法之一   Hash(value) =  value %p,这个被称为除留取余法。不过这个方法,这样的表现形式是使用数字做取余运算的方式。如果存储其他类型数据可能需要看情况转化成可使用数字做索引的方式了。(突然发现,这个索引的计算,有点像是计算某个范围内随机值的感觉  )

2、还有一点,这个hash表,更多的是突出一个散列的存储

        根据下面例子我们就可以发现,只是使用字符的ascii码差值做索引,来记录相同字符的个数,这字符的字符数据之间没有直接的关联关系什么的。

        这个例子就有点像:点到原点的距离。这些字符串中的字符,有多少到原点a的距离是相同的比如:n - a = 20,就相当于我们设定好了,n的位置就存放在数组的位置 record [20]处,而我们需要计算的是有多少点的位置在里。直接给record[20] ++.

 2、代码题示例

#include <iostream>
#include <stdio.h>
#include <string>using namespace std;
bool isAnagram(string s, string t);
int main()
{string s("anagram");string t("nagaram");isAnagram(t,s);
}bool isAnagram(string s, string t){    // s = anagram   t = nagaramint record[26] = {0};if(s.size()!= t.size()){return false;}for(int i = 0; i < s.size(); i++)  {record[s[i] - 'a']++;      //一开始接触这个也是没反应过来,实际上就是 用字母去减字母,这种情况下,都是使用askii码进行相加减}                               //这个操作就相当于记录一个标志值,因为26个英文字母在ascii中是连续的,所以其他字母和a的差值不会超过25/26//至于我为啥用25/26呢,因为确实记不清a是多少了    不过作为数组record的下标,不会超过26//上面的这个可以发现如果相同的字母减a,那么那个下标的值就会+1.//当两个字符串的字母一样时,如果用同样的数组记录,结果应该就是一样的,字符串t//比如  : t有三个a, 结果遍历字符的时候,a-a 的ascii值,是一样的,有三个,所以record['a' - 'a'] ==3;//这个时候,如果我们做个相反的计算 record[]-=1; 是不是遍历结束后,record[0]的位置就是0 .其他的字符也一样for(int i = 0; i < t.size(); ++i){record[t[i]-'a']--;}//上面两步操作完,数组里如果都是0,就表示两个字符串的字符一样。顺序不同 。这有点那个信号量控制共享资源的感觉for(int i = 0; i < 26; i++){if(record[i]!=0){return false;}}cout << "t 和s 是互为字母异位词"<< endl;return true;
}

3、哈希表的链地址法 

        基本上就是使用一个数组,去存储链表的头指针。然后将数据根据我们设定的索引规则,存储在特定的索引地址下。

这个我们也可以用来做索引数据结构啥的,在标准模板库STL中的无需关联式容器使用的就是链地址法。(用来解决hash冲突)        

这个网上挺多的,就是需要注意一个装填因子的问题, 装填因子/装载因子= 元素个数/表长=0.5~0.75   这个值在这个范围之间就比较合适。再多了,可能需要更换数据结构。、

比如C++有序关联式容器中使用红黑树去存储数据(目前还没扣明白,等搞明白了写上。)

使用epoll 的时候,这个底层实现也是使用红黑树去实现的。(因为select 底层就是一个位图,可以当成个数组,大概能监听1024个文件描述符。而epoll好像在10万以上)

//哈希表的用途,可以用来做缓存(比如服务器使用哈希表做缓存机制,缓存用户的id,作为key;value 用来存储用户详细信息等,查询起来方便,就不用每次都向服务器发送请求了)

这篇关于哈希表-示例(这个还是实际的功能应用更便于理解)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/589475

相关文章

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

MySQL 定时新增分区的实现示例

《MySQL定时新增分区的实现示例》本文主要介绍了通过存储过程和定时任务实现MySQL分区的自动创建,解决大数据量下手动维护的繁琐问题,具有一定的参考价值,感兴趣的可以了解一下... mysql创建好分区之后,有时候会需要自动创建分区。比如,一些表数据量非常大,有些数据是热点数据,按照日期分区MululbU