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

散列表(1)

散列表概念

键通过散列函数后转换为数组的下标,在对应的下标位置上存储相应的信息

键------>散列函数-------->数组下标------->存储信息

散列函数 

散列函数就是一个函数,能够将给定的key转换为特定散列值。hashValue=hash(key);

散列函数的要求

1、散列函数计算到的散列值必须是大于等于0的正整数,因为hash值要作为数组的下标

2、if  key1==key2,那么经过hash后得到的哈希值也必相同,hash(key1)==hash(key2)

3、如果键值不同,那么经过hash后得到的哈希值也必不相同(哈希函数的设计目标是减少冲突,但不能保证完全不同的输入总是产生完全不同的哈希值)

散列函数的特点

三里函数计算出的哈希值尽可能的随机并且均匀分布,这样能将散列冲突最小化

散列函数的设计方法

①直接寻址法:

hash(key)=key,也就是说,我们可以取关键字key的某个线性函数为散列地址,即hash(key)=a*key+b;其中a,b为常量

②除留余数法:

对于表厂为m的散列函数,让key和一个指定的数进行取模运算hash(key)=key  mod  p(p<=m)。关键在于选择合适的p,如果p选的不好,可能会容易出现hash冲突。当p取不大于哈希表长的最大质数时,产生的hash函数较好

③平方取中法:

这个方法是先取关键字的平方,然后根据可使用的空间的大小,选取平方数是中间几位为哈希地址hash(key)=key

散列冲突

两个不同发关键字(key),由于散列函数值相同,因而被映射到同一张表位置上,该现象被称为散列冲突

解决方案

开放地址法:

开放地址法的思想是:一旦出现了散列冲突,我们就重新寻址一个空的散列地址

①线性检测:

我们往散列表中插入数据时,如果某个数据经过散列函数散列之后,存储位置已经被占用了,我们就从当前位置开始,依次往后查找,看是否有空闲位置,如果后边的都没有,则折回查找,直到找到为止。

②二次检测

二次检测的原理与线性检测的原理一样,只不过线性检测的步长是1,每次每次检测的下标依次是:hash(key)+0,hash(key)+1,hash(key)+2.....,所谓的二次检测指的是每次检测的步长变为原来的二次方,即每次检测的下标为hash(key)+0^2,hash(key)+1^2,hash(key)+2^2.......

③双重散列

使用一组散列函数,hash1(key),hash2(key).......先用第一个散列函数,计算到的存储位置如果已经被占用,再使用第二个空闲的位置,以此类推,直到找到空闲的存储位置

链表法

在散列表中,数组的每个下标位置我们可以称之为槽或桶,每个槽会对应一条链表,所有散列值相同的元素我们会放到对应的链表中。

基于链表的散列冲突的处理方法比较适合存储大对象,大数据量的的散列表,而且,更灵活,比如用红黑树代替链表

1、高度、深度和层

节点的高度:节点到叶子节点的最长路径(边数),所有的叶子节点的高度为0.

节点的深度:根节点的这个节点所经历的变得个数,根的深度为0

节点的层数:节点的深度+1

树的高度:根节点的高度

二叉树

每个节点最多有两个子节点,分别是左子节点和右子节点,不过,二叉树并不要求每个节点都有两个子节点。

满二叉树:叶子节点全都在最底层,除了叶子节点外,每个节点都有左右两个子节点,这种二叉树叫做满二叉树

完全二叉树:叶子节点都在最地下两层,最后一层的叶子节点都靠左排列并且除了最后一层,其他层的节点个树都要达到最大,这种二叉树叫做完全二叉树

树的存储结构

顺序结构:需要开辟一块连续的内存空间存储数据

链式存储:存储空间不连续

链式存储①定义好节点

顺序结构:数组;存储的公式:如果父节点存储i位置,左子节点存储2i位置,右子节点存储2*i+1,i是数组的角标

二叉查找树:若任意节点的右子树不空,则右子树上所有结点的值均大于他的根节点的值,若任意节点的左子树不为空,则左子树上所有节点的值均小于他的根节点的值,

1、定义一个二叉查找树基础数据结构【链表结构】
public class BSTree{
private value;
private Node left;
private Node right;
//初始化构造方法
public Node (Node left,int value,Node right){
this.left=left;
this.value=value;
this.right=right;}}

相关文章:

散列表(1)

散列表概念 键通过散列函数后转换为数组的下标&#xff0c;在对应的下标位置上存储相应的信息 键------>散列函数-------->数组下标------->存储信息 散列函数 散列函数就是一个函数&#xff0c;能够将给定的key转换为特定散列值。hashValuehash&#xff08;key&…...

E. 23 Kingdom【Codeforces Round 1024 (Div. 2)】

E. 23 Kingdom 思路&#xff1a; 这道题的核心在于如何构造一个数组b&#xff0c;使得每个数的最远两个出现位置之差总和最大。通过分析&#xff0c;我们发现要最大化总美丽值&#xff0c;应尽可能让每个数的首次出现尽可能靠左、末次出现尽可能靠右。这样每个数的距离贡献j-i…...

TTS-Web-Vue系列:Vue3实现侧边栏与顶部导航的双向联动

&#x1f504; 本文是TTS-Web-Vue系列的最新文章&#xff0c;重点介绍如何在Vue3项目中实现侧边栏与顶部导航栏的双向联动功能。通过Vue3的响应式系统和组件通信机制&#xff0c;我们构建了一套高效、流畅的导航联动方案&#xff0c;让用户在不同入口都能获得一致的导航体验。 …...

【C++】模板(初阶)

一、模板与泛型编程 我们先来思考一下&#xff1a;如何实现一个通用的交换函数&#xff1f; void Swap(int& left, int& right) {int temp left;left right;right temp; }void Swap(double& left, double& right) {double temp left;left right;right te…...

大模型微调实战:基于GpuGeek平台的低成本高效训练方案

文章目录 引言一、GpuGeek平台使用入门1. 注册与账号设置2. 控制台功能概览3. 快速创建GPU实例3. 预置镜像与自定义环境 二、GpuGeek平台核心优势解析1. 显卡资源充足&#xff1a;多卡并行加速训练2. 镜像超多&#xff1a;开箱即用的开发环境3. 计费灵活&#xff1a;按需付费降…...

黑马k8s(六)

1.Deployment&#xff08;Pod控制器&#xff09; Selector runnginx 标签选择&#xff1a;会找pod打的标签 执行删除之后&#xff0c;pod也会删除&#xff0c;Terminating正在删除 如果想要访问其中的一个pod借助&#xff1a;IP地址端口号访问 假设在某一个瞬间&#xff0c;…...

WEB安全--Java安全--CC1利用链

一、梳理基本逻辑 WEB后端JVM通过readObject()的反序列化方式接收用户输入的数据 用户编写恶意代码并将其序列化为原始数据流 WEB后端JVM接收到序列化后恶意的原始数据并进行反序列化 当调用&#xff1a; ObjectInputStream.readObject() JVM 内部逻辑&#xff1a; → 反…...

16S18S_OTU分析(3)

OTU的定义 OTU&#xff1a;操作分类单元是在系统发生学研究或群体遗传学研究中&#xff0c;为了便于进行分析&#xff0c;人为给某一个分类单元&#xff08;如品系、种、属、分组等&#xff09;设置的同一标志。目的&#xff1a;OTU用于将相似的序列归为一类&#xff0c;以便于…...

嵌入式开发学习日志(数据结构--单链表)Day20

一、gdb调试 &#xff08;一&#xff09;一般调试步骤与命令 1、gcc -g &#xff08;调试版本&#xff0c;内含调试信息与源码&#xff1b;eg&#xff1a;gcc -g main.c linklist.c&#xff09; 2、gdb a.out&#xff08;调试可执行文件&#xff0c;eg&#xff1a;gdb …...

nginx报错-[emerg] getpwnam(“nginx“) failed in /etc/nginx/nginx.conf:2

报错 - nginx: [emerg] getpwnam(“nginx”) failed in /etc/nginx/nginx.conf:2 问题描述&#xff1a; nginx: [emerg] getpwnam(“nginx”) failed in /etc/nginx/nginx.conf:2 问题原因&#xff1a; 是因为配制文件中使用的启动账户在系统中并没有找到 解决方法&#x…...

Linux系统编程——fork函数的使用方法

在 Linux 系统编程 中&#xff0c;fork() 函数是创建新进程的关键系统调用。fork() 在当前进程&#xff08;父进程&#xff09;中创建一个几乎完全相同的子进程。子进程和父进程从调用 fork() 的位置继续执行&#xff0c;但它们是两个独立的进程&#xff0c;每个进程都有自己的…...

Linux进程信号处理(26)

文章目录 前言一、信号的处理时机处理情况“合适”的时机 二、用户态与内核态概念重谈进程地址空间信号的处理过程 三、信号的捕捉内核如何实现信号的捕捉&#xff1f;sigaction 四、信号部分小结五、可重入函数六、volatile七、SIGCHLD 信号总结 前言 这篇就是我们关于信号的最…...

黑马Java跟学.最新AI+若依框架项目开发(一)

黑马Java跟学.最新AI若依框架项目开发.一 前瞻为什么学习若依&#xff1f;AI局限性若依是什么?创新项目开发新方案课程安排前置知识 一、若依搭建若依版本官方非官方 RuoYi-Vue运行后端项目初始化项目Git下载Maven构建 MySQL相关导入sql配置信息 Redis相关启动配置信息 项目运…...

【自学30天掌握AI开发】第1天 - 人工智能与大语言模型基础

自学30天掌握AI开发 - 第1天 &#x1f4c6; 日期和主题 日期&#xff1a;第1天 主题&#xff1a;人工智能与大语言模型基础 &#x1f3af; 学习目标 了解人工智能的发展历史和基本概念掌握大语言模型的基本原理和工作机制区分不同类型的AI模型及其特点理解AI在当前社会中的…...

(十六)Java String类全面解析

一、String类概述 1.1 String的本质 在Java中&#xff0c;String类可能是使用最频繁的类之一&#xff0c;但它也是最容易被误解的类之一。从本质上讲&#xff0c;String代表的是一个不可变的Unicode字符序列。这种不可变性(immutability)是String类设计的核心特性。 java S…...

Android架构之自定义native进程

在Android五层架构中&#xff0c;native层基本上全是c的世界&#xff0c;这些c进程基本上靠android世界的第一个进程init进程创建&#xff0c;init通过rc配置文件&#xff0c;创建了众多的c子进程&#xff0c;也是这众多的c进程&#xff0c;构建了整个android世界的native层。 …...

#跟着若城学鸿蒙# HarmonyOS NEXT学习之AlphabetIndexer组件详解

一、组件介绍 AlphabetIndexer&#xff08;字母索引条&#xff09;是HarmonyOS NEXT中一个非常实用的UI组件&#xff0c;它主要用于在列表视图中提供快速的字母导航功能。当应用中有大量按字母顺序排列的数据&#xff08;如联系人列表、城市列表等&#xff09;时&#xff0c;A…...

React百日学习计划——Deepseek版

阶段一&#xff1a;基础巩固&#xff08;1-20天&#xff09; 目标&#xff1a;掌握HTML/CSS/JavaScript核心语法和开发环境搭建。 每日学习内容&#xff1a; HTML/CSS&#xff08;1-10天&#xff09; 标签语义化、盒模型、Flex布局、Grid布局、响应式设计&#xff08;媒体查询…...

Room持久化库:从零到一的全面解析与实战

简介 在Android开发中,Room作为官方推荐的数据库持久化库,提供了对SQLite的抽象层,使得数据库操作更加安全、高效且易于维护。 Room通过注解处理器和编译时验证,显著降低了数据库操作的复杂度,同时支持响应式编程模式,使开发者能够轻松实现数据变化的实时监听。对于企业…...

Linux云计算训练营笔记day07(MySQL数据库)

数据库 DataBase 保存数据的仓库 数据库管理系统 DBMS 这是一个可以独立运行&#xff0c;用于维护磁盘上的数据的一套软件 特点: 维护性高&#xff0c;灵活度高&#xff0c;效率高&#xff0c;可扩展性强 常见的DBMS Mysql Mariadb Oracle DB2 SQLServer MySQL是一个关系型…...

C语言之旅5---分支与循环【2】

&#x1f4ab;只有认知的突破&#x1f4ab;才来带来真正的成长&#x1f4ab;编程技术的学习&#x1f4ab;没有捷径&#x1f4ab;一起加油&#x1f4ab; &#x1f341;感谢各位的观看&#x1f341;欢迎大家留言&#x1f341;咱们一起加油&#x1f341;努力成为更好的自己&#x…...

K230 ISP:一种新的白平衡标定方法

第一次遇见需要利用光谱响应曲线进行白平衡标定的方法。很好奇是如何利用光谱响应曲线进行白平衡标定的。 参考资料参考&#xff1a;K230 ISP图像调优指南 K230 介绍 嘉楠科技 Kendryte 系列 AIoT 芯片中的最新一代 AIoT SoC K230 芯片采用全新的多核异构单元加速计算架构&a…...

【Web应用】Vue 项目前端项目文件夹和文件介绍

文章目录 ⭐前言⭐一、文件夹介绍&#x1f31f;1、.idea&#x1f31f;2、bin&#x1f31f;3、build&#x1f31f;4、node_modules&#x1f31f;5、public&#x1f31f;6、src ⭐二、文件介绍&#x1f31f;1、.editorconfig&#x1f31f;2、.env.development、.env.production、…...

Leetcode 3544. Subtree Inversion Sum

Leetcode 3544. Subtree Inversion Sum 1. 解题思路2. 代码实现 题目链接&#xff1a;3544. Subtree Inversion Sum 1. 解题思路 这一题我的思路上就是一个动态规划的思路&#xff0c;因为原则上我们只需要遍历一下所有的状态即可&#xff0c;但是这样显然时间复杂度过高&am…...

分别在windows和linux上使用curl,有啥区别?

作为开发者常用的网络工具&#xff0c;curl 在 Windows 和 Linux 上的使用看似相似&#xff0c;但实际存在不少细节差异。以下从 命令语法、环境特性、功能支持 和 开发体验 四个角度展开对比&#xff0c;帮助读者避免跨平台开发时的常见“坑”。 一、命令语法差异&#xff1a;…...

微服务八股(自用)

微服务 SpringCloud 注册中心&#xff1a;Eureka 负载均衡&#xff1a;Ribbon 远程调用&#xff1a;Feign 服务熔断&#xff1a;Hystrix 网关&#xff1a;Gateway/Zuul Alibaba 配置中心&#xff1a;Nacos 负载均衡&#xff1a;Ribbon 服务调用&#xff1a;Feign 服务…...

TCP首部格式及三次握手四次挥手

TCP协议详解&#xff1a;首部格式与连接管理 一、TCP首部格式 TCP首部最小20字节&#xff0c;最大60字节&#xff0c;包含以下字段&#xff1a; | 源端口号(16bit) | 目的端口号(16bit) | | 序列号(32bit) | | 确认号(32bit) | | 数据偏移(4bit)| 保留(6bit) |U|A|P|R|S|…...

Python查询ES错误ApiError(406, ‘Content-Type ...is not supported

现象 使用python查询es数据时出现下面错误 Traceback (most recent call last):File "getUsers.py", line 26, in <module>response es.search(index"lizz_users", bodyquery)File "/usr/local/lib/python3.6/site-packages/elasticsearch/_…...

下周,Coinbase将被纳入标普500指数

Coinbase加入标普500指数紧随比特币突破10万美元大关之后。加密资产正在日益成为美国金融体系的一部分。大型机构已获得监管批准创建现货比特币交易所交易基金&#xff0c;进一步推动了加密货币的主流化进程。 加密货币行业迎来里程碑时刻&#xff0c;Coinbase即将加入标普500…...

物理:由基本粒子组成的个体能否提炼和重组?

个体差异源于基本粒子组合的复杂性与随机性,这一假设若成立,确实可能为生物医学带来革命性突破——但需要突破技术、理论与系统层级的多重壁垒。以下从科学逻辑与技术路径展开分析: 一、随机组合中的共性与稳定结构 1. 自然界的自组织规律 涌现性(Emergence):尽管粒子组…...

Python Day 24 学习

讲义Day16内容的精进 NumPy数组 Q. 什么是NumPy数组&#xff1f; NumPy数组是Python中由NumPy库提供的一种多维数组对象&#xff0c;它称为N-dimensional array,简称ndarray。它是用于数值计算的核心数据结构&#xff0c;能够高效地存储和操作大量的同类型数据。 Q. NumPy数…...

ppy/osu构建

下载 .NET (Linux、macOS 和 Windows) | .NET dotnet还行 构建&#xff1a;f5 运行&#xff1a;dotnet run --project osu.Desktop -c Debug...

前端学习(2)—— CSS详解与使用

目录 一&#xff0c;CSS基础 1.1 语法规范 1.2 引入方式 1.3 选择器 1.3.1 基础选择器 1.3.2 复合选择器 1.3.3 选择器小结 二&#xff0c;CSS使用 2.1 字体设置 2.2 文本属性 2.3 背景属性 2.2 圆角矩形 三&#xff0c;关于浏览器 3.1 Chrome 调试工具 -- 查看 …...

邀请函|PostgreSQL培训认证报名正式开启

掌握PostgreSQL 轻松驾驭主流国产数据库 PostgreSQL培训认证 6月开课 报名火热进行中&#xff5e; 美创中国PostgreSQL培训认证合作机构 中国PostgreSQL培训认证由中国开源软件联盟PostgreSQL分会联合中国电子工业标准化技术协会共同打造&#xff0c;是国内权威的PG技术等级…...

力扣HOT100之二叉树:543. 二叉树的直径

这道题本来想到可以用递归做&#xff0c;但是还是没想明白&#xff0c;最后还是去看灵神题解了&#xff0c;感觉这道题最大的收获就是巩固了我对lambda表达式的掌握。 按照灵神的思路&#xff0c;直径可以理解为从一个叶子出发向上&#xff0c;在某个节点处拐弯&#xff0c;然后…...

深入理解 NumPy:Python 科学计算的基石

在数据科学、人工智能和科学计算的世界里&#xff0c;NumPy 是一块绕不过去的基石。它是 Python 语言中用于高性能科学计算的基础包&#xff0c;几乎所有的数据分析与机器学习框架&#xff08;如 Pandas、TensorFlow、Scikit-learn&#xff09;都离不开它的支持。 一、什么是 …...

基于STM32、HAL库的ADAU1701JSTZ-RL音频接口芯片驱动程序设计

一、简介: ADAU1701JSTZ-RL 是一款高性能音频编解码器 (Codec),专为便携式和低功耗应用设计。它集成了 ADC、DAC、麦克风前置放大器、耳机放大器和数字信号处理功能,支持 I2S/PCM 音频接口和 I2C 控制接口,非常适合与 STM32 微控制器配合使用。 二、硬件接口: 典型的 ST…...

SpringBoot--springboot简述及快速入门

spring Boot是spring提供的一个子项目&#xff0c;用于快速构建spring应用程序 传统方式&#xff1a; 在众多子项目中&#xff0c;spring framework项目为核心子项目&#xff0c;提供了核心的功能&#xff0c;其他的子项目都需要依赖于spring framework&#xff0c;在我们实际…...

智慧校园场景下iVX 研发基座应用实践与行业适配研究

一、智慧校园多系统协同实践 在智慧校园建设中&#xff0c;iVX 研发基座通过模块化协作开发模式实现跨系统集成与数据治理。以校园门户与子系统整合为例&#xff0c;基座通过统一身份认证体系实现单点登录&#xff08;SSO&#xff09;&#xff0c;用户中心基于 ABAC 模型动态控…...

故障诊断模型评估——混淆矩阵,如何使样本量一致(上)

往期精彩内容&#xff1a; Python-凯斯西储大学&#xff08;CWRU&#xff09;轴承数据解读与分类处理 基于FFT CNN - BiGRU-Attention 时域、频域特征注意力融合的轴承故障识别模型-CSDN博客 基于FFT CNN - Transformer 时域、频域特征融合的轴承故障识别模型-CSDN博客 P…...

Redis Cluster 集群搭建和集成使用的详细步骤示例

以下是Redis集群搭建和集成使用的详细步骤示例&#xff1a; 搭建Redis集群 环境准备 下载Redis&#xff1a;从Redis官方网站下载最新稳定版本的Redis源代码&#xff0c;解压到指定目录&#xff0c;如/opt/redis。安装依赖&#xff1a;确保系统安装了必要的依赖&#xff0c;如…...

【技巧】使用UV创建python项目的开发环境

回到目录 【技巧】使用UV创建python项目的开发环境 0. 为什么用UV 下载速度快、虚拟环境、多版本python支持、清晰的依赖关系 1. 安装基础软件 1.1. 安装python 下载地址&#xff1a;https://www.python.org/downloads/windows/ 1.2. 安装UV > pip install uv -i ht…...

竞业禁止协议中AI技能限制的深度剖析

首席数据官高鹏律师团队 在当今科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;领域成为了商业竞争的关键战场。随着AI技术在各行业的广泛渗透&#xff0c;竞业禁止协议中涉及AI技能的限制条款愈发受到关注&#xff0c;其背后蕴含着复杂而关键的法律与商业…...

Mirror的多人连接管理及房间系统

以下是一个基于Mirror的多人连接管理及房间系统的服务端实现方案&#xff0c;包含部署说明&#xff1a; 一、服务端架构设计 网络管理扩展 using Mirror; using UnityEngine;public class RoomNetworkManager : NetworkManager {// 房间字典&#xff08;房间ID -> 房间对象…...

基于Session实现短信登录全流程详解

前言 在当今的Web应用中&#xff0c;短信验证码登录已成为最常用的身份验证方式之一。本文将详细介绍基于Session实现短信登录的全套流程&#xff0c;包括技术选型、流程设计、具体实现以及安全防护措施。通过本文&#xff0c;您将掌握从发送验证码到完成登录的完整实现方案。…...

关于 javax.validation.constraints的详细说明

以下是关于 javax.validation.constraints&#xff08;现为 ​Jakarta Bean Validation&#xff09;的详细说明&#xff0c;涵盖核心注解、使用场景、代码示例及最佳实践&#xff1a; 一、javax.validation.constraints 是什么&#xff1f; ​作用​&#xff1a;提供一组标准注…...

linux系统如何将采集的串口数据存储到txt

步骤&#xff1a; 确认串口设备&#xff1a;通常为/dev/ttyS0&#xff08;COM1&#xff09;或/dev/ttyUSB0&#xff08;USB转串口&#xff09;。设置波特率等参数&#xff1a;使用stty命令&#xff0c;例如&#xff1a; bash stty -F /dev/ttyUSB0 9600 cs8 -icanon -ixon 实时…...

(顺序表、单链表、双链表)==>一篇解决!(Java版)

文章目录 一、线性表二、顺序表三、单链表四、双链表 一、线性表 线性表是最基本、最简单、也是最常用的一种数据结构。一个线性表是n个具有相同特性的数据元素的有限序列。 线性表的特征&#xff1a;数据元素之间具有一种“一对一”的逻辑关系。 线性表的分类&#xff1a; 线…...

大模型常用位置编码方式

深度学习中常见的位置编码方式及其Python实现&#xff1a; 一、固定位置编码&#xff08;Sinusoidal Positional Encoding&#xff09; 原理 通过不同频率的正弦和余弦函数生成位置编码&#xff0c;使模型能够捕捉绝对位置和相对位置信息。公式为&#xff1a; 公式标准数学表达…...

【fastadmin开发实战】在前端页面中使用bootstraptable以及表格中实现文件上传

先看效果&#xff1a; 1、前端页面中引入了表格 2、表格中实现文件上传 3、增加截止时间页面 难点在哪呢&#xff1f; 1、这是前端页面&#xff0c;并不支持直接使用btn-dialog的类属性实现弹窗&#xff1b; 2、前端页面一般绑定了layout模板&#xff0c;如何实现某个页面不…...