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

数据结构编程实践20讲(Python版)—17散列

本文目录

    • 17 散列(Hashing)
      • S1 说明
        • 特点
        • 应用领域
      • S2 示例:字符串哈希
      • S2 示例:文件、图片哈希
      • S3 应用1:食品安全追溯
      • S4 应用2:在线内容版权保护
      • S5 应用3:社交媒体内容审核

往期链接

01 数组02 链表03 栈04 队列05 二叉树06 二叉搜索树07 AVL树08 红黑树09 B树10 B+树
11 线段树12 树状数组13 图形数据结构14 邻接矩阵15 完全图16 有向图

17 散列(Hashing)

S1 说明

散列是一种将输入数据(通常称为键)转换为固定大小的字符串或数字的过程,通常称为散列值或哈希值。散列函数是执行此转换的算法,其输出是一个唯一的哈希码,用于快速查找和存储数据。

特点
  • 固定长度输出:
    无论输入数据的大小如何,散列函数的输出长度是固定的。例如,SHA-256 散列函数始终输出 256 位(32 字节)的哈希值。
  • 快速计算:
    散列函数的计算速度通常很快,能够在常量时间内生成哈希值。
  • 抗碰撞性:
    理想的散列函数应当使得不同的输入数据产生相同输出的概率极低。这意味着很难找到两个不同的输入具有相同的哈希值(称为碰撞)。
  • 不可逆性:
    散列函数应当是不可逆的,即从散列值无法反推原始输入。这使得散列在数据安全和加密中非常有用。
  • 敏感性:
    微小的输入变化会导致哈希值的大幅变化。这一特性被称为“雪崩效应”。
应用领域

散列在多个领域中有广泛的应用,包括:

  • 数据结构:
    哈希表:使用散列函数将键映射到数组中的位置,实现快速的查找、插入和删除操作。哈希表广泛用于实现集合和字典等数据结构。
  • 密码学:
    • 数字签名:用于创建数字签名,通过散列原始消息并对其哈希值进行加密,以确保数据的完整性和- 身份验证。
    • 消息认证码(MAC):结合密钥和消息的散列,用于验证消息的完整性和来源。
  • 数据完整性
    文件完整性检查:通过计算文件的哈希值,可以快速检查文件在传输或存储过程中是否被篡改(如使用 MD5 或 SHA-256)。
  • 数据库:
    索引:使用散列值作为索引,以加速数据库中的数据检索。
  • 分布式系统:
    • 负载均衡:散列函数可用于将请求分配到不同的服务器,以实现负载均衡。
    • 一致性哈希:在分布式缓存和存储系统中,使用一致性哈希来管理节点之间的负载分配。
  • 区块链:
    在区块链技术中,散列函数用于确保区块的完整性和安全性。每个区块包含前一个区块的哈希值,从而形成链式结构,确保数据不可篡改。
  • 数据去重:
    在数据存储和处理领域,通过计算数据的哈希值,可以有效地识别和去除重复数据。

S2 示例:字符串哈希

import hashlibdef generate_hash(data):"""生成数据的SHA-256哈希值"""hash_object = hashlib.sha256()hash_object.update(data.encode('utf-8'))  # 将字符串编码为字节return hash_object.hexdigest()  # 返回十六进制哈希值# 示例:生成字符串的哈希值
data = "这是一个测试的字符串"
hash_

相关文章:

数据结构编程实践20讲(Python版)—17散列

本文目录 17 散列(Hashing)S1 说明特点应用领域S2 示例:字符串哈希S2 示例:文件、图片哈希S3 应用1:食品安全追溯S4 应用2:在线内容版权保护S5 应用3:社交媒体内容审核往期链接 01 数组02 链表03 栈04 队列05 二叉树06 二叉搜索树07 AVL树08 红黑树09 B树10 B+树11 线段…...

看了大厂用AI审简历,我才发现社会的残酷真相!今年的秋招太可怕了

太可怕了!今年秋招,大厂竟然引进黑科技—— AI 面试、AI 智能分析简历, 这让打工人以后咋敢写精通 Office 三件套,就怕被 AI 一眼识破 劝你现在掌握 AI 技能,真的不是说说而已! 微软的最新职场 AI 统计数…...

京东大模型革命电商搜推技术:挑战、实践与未来趋势

大模型对搜推技术产生了深远的影响,极大地推动了搜推技术的演进趋势,使得搜推更加的智能化和个性化,然而在搜推中引入大模型时同样面临一系列的挑战,例如商品知识的幻觉,复杂查询的理解,个性化商品推荐&…...

深入学习二叉树(BinaryTree)(纯小白进)

目录: 一、 前言二、 正文2.1、 树的概念2.1.1、 树的结构2.1.2、 树的小知识 2.2、 认识二叉树2.2.1、 二叉树的概念2.2.2、 特殊的二叉树 2.3、 实现二叉树2.3.1、 结构2.3.2、 节点数2.3.3、 树深度2.3.4、 前、中、后序遍历 销毁2.3.4.1、 前序遍历2.3.4.2、 中…...

诗风秦韵诗词学习画廊宣言

诗风秦韵诗词学习画廊宣言 弘扬传统传承文明,奋斗路上不断前进,青春不朽梦想扬帆,华夏赞歌我心飞扬...

Cannot determine local hostname

1. 问题与解答 报错: o.s.cloud.commons.util.InetUtils : Cannot determine local hostname 可能原因: 缺少一个logback.xml 2. logback日志文件介绍 2.1 logback结构与组成 logback.xml 文件是 Logback 的核心配置文件,其基本…...

电工课堂-对晶闸管移相控制触发要求

晶闸管移相控制触发的要求主要包括触发信号的同步性、移相范围、输出功率、触发脉冲的参数和形式等。 触发信号的同步性:触发信号必须与主电路的电源频率保持一致,并具有固定的相位关系。这是为了确保在每个周期内晶闸管都能在相同的相位上被触发&#x…...

基于Arduino做的“鱿鱼游戏”BOSS面具,支持动作检测

这是一个结合了3D打印、舵机、PIR传感器和DFPlayer MP3模块的DIY项目,旨在制作一个带有动画眼睛的"鱿鱼游戏"老板面具。当检测到动作时,面具的眼睛会移动并播放声音,非常适合万圣节使用。 这个项目是一个很好的起点,特…...

数据库的查询操作

之前学习了怎么创建数据库&#xff0c;创建数据表以及给数据表添加数据&#xff0c;我们今天就学习一下数据的查询 一. 查询语句的语法 select 列名&#xff08;字段名&#xff09; form 表名 [where &#xff08;查询条件表达式&#xff09;] [order by <排序的列明>[…...

WebGL编程指南 - WebGL概述

WebGL&#xff0c;是一项用来在网页上绘制和渲染复杂三维图形&#xff08;3D图形&#xff09;&#xff0c;并允许用户与之进行交互的技术 WebGL的一些信息&#xff1a; 表层基于HTML5标准&#xff0c;通过Canvas元素公开底层基于OpenGL&#xff0c;与OpenGL ES规范非常接近暂…...

前端杂学录(十)

1.axios 的底层实现 1. XMLHttpRequests 在浏览器环境中&#xff0c;Axios 使用 XMLHttpRequest 对象来发送请求。这是一个古老的 Web API&#xff0c;用于在浏览器中进行异步 HTTP 请求。 2. Node.js 的 http 模块 在 Node.js 环境中&#xff0c;Axios 使用 Node.js 的 ht…...

C++上机|编写函数invert实现对一维数组的倒序

//编写函数invert实现对一维数组的倒序 # include <iostream> using namespace std;class invert_array {private://int a[10]{0,1,2,3,4,5,6,7,8,9};public: void invert(int A[], int n){int i,j,temp;int m (n-1)/2;for(i0;i<m;i){jn-1-i;tempA[i];A[i]A[j];A[j]t…...

使用LSPatch+PlusNE修改手机软件

一、问题概述 国内使用一些软件&#xff0c;即使科学上网&#xff0c;打开都是网络错误&#xff0c;更换节点同样如此。 二、软件下载 通过官网或者正规商店(如Google play)下载并且安装。 是的&#xff0c;先要下载一个无法使用的版本&#xff0c;后续对其进行修改。 三、下…...

基于springboot的4S店车辆管理系统

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的&#xff0c;前后端分离。 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;…...

C++从入门到起飞之——(multi)set与(multi)map的的使用 全方位剖析!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1. 序列式容器和关联式容器 2. set系列的使⽤ 2.1 set和multiset参考⽂档 2.2 set类的介绍 2.3 se…...

HTML5实现古典音乐网站源码模板2

文章目录 1.设计来源1.1 主界面1.2 古典音乐界面1.3 著名人物界面1.4 古典乐器界面1.5 历史起源界面1.6 联系我们界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&a…...

基于SpringBoot+Vue+uniapp的诗词学习系统的详细设计和实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…...

基于SpringBoot网上超市的设计与实现(论文+源码)_kaic

摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关键。因此超市商品销售信…...

《webpack深入浅出系列》

webpack深入浅出系列 ES6模块与CommonJS模块的主要区别 加载时机&#xff1a;ES6模块是编译时输出&#xff0c;即模块在编译阶段就已经确定了依赖关系&#xff1b;而CommonJS模块是运行时才加载&#xff0c;即运行到某个require语句时才加载对应的模块。 &#xff08;也就是说…...

云服务器使用挂载的数据盘空间(自用)

最近在使用浪潮云服务器的时候遇到系统盘存储空间全部使用完了&#xff0c;而浪潮提供的服务器配置里面还有数据盘空间&#xff0c;但是在使用df -h无法查看到数据盘的相关信息&#xff0c;查找后才发现是因为新开服务器没有对数据盘进行挂载&#xff0c;因此无法使用。在网上找…...

snmp usm OID

在Java中&#xff0c;SNMP&#xff08;简单网络管理协议&#xff09;是一种用于网络管理的互联网标准协议。它允许网络管理员从中央位置监控网络设备&#xff0c;如服务器、工作站、路由器、交换机和打印机等。SNMP通过允许这些设备报告关于它们状态的信息&#xff0c;从而帮助…...

数据仓库分层设计概念

数据仓库分层设计是一种结构化方法&#xff0c;用于组织和管理数据仓库中的数据。这种设计方法通过将数据从原始数据逐步转换为满足业务分析需求的结构化数据&#xff0c;提高了数据处理效率、数据质量和一致性。数据仓库分层设计的主要目的包括支持数据的重用、优化性能、提高…...

【HTML】defer 和 async 属性在 script 标签中分别有什么作用?

需要这两个属性的原因&#xff1f; 首先我们要知道的是&#xff0c;浏览器在解析 HTML 的过程中&#xff0c;遇到了 script 元素是不能继续构建 DOM 树的。 它会停止解析构建&#xff0c;首先去下载 js 代码&#xff0c;并且执行 js 的脚本&#xff1b;只有在等到 js 脚本执行…...

扫视扫描路径预测的评估:主观评估数 据库和基于循环神经网络的度量 记录

记录一 随着势头的不断增强&#xff0c;扫视预测逐渐成 为培养视觉注意力的热门研究课题。在扫视预测中&#xff0c;每个模型通常生成一个覆盖一系列注视点的扫描路径&#xff0c;以模拟动态扫视行为。因此&#xff0c; 通常通过计算预测的扫描路径与所有人类扫描 路径之间的相…...

【Java数据结构】优先级队列(堆)

【本节目标】 1. 掌握堆的概念及实现 2. 掌握 PriorityQueue 的使用 一. 优先级队列 1 概念 前面学过队列&#xff0c;队列是一种先进先出 (FIFO) 的数据结构 &#xff0c;但有些情况下&#xff0c; 操作的数据可能带有优先级&#xff0c;一般出队 列时&#xff0c;可…...

图书个性化推荐系统|基于springBoot的图书个性化推荐系统设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书&#xff08;可指定任意题目&#xff09; 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 本论文主要论述了如何使用JAVA语言开发一个图书个性化推荐系统&…...

通用车牌正则校验

要编写一个正则表达式来包含所有类型的车牌号&#xff0c;我们需要考虑以下几种常见的车牌类型&#xff1a; 1. 普通汽车车牌&#xff08;蓝牌/黄牌&#xff09; 规则&#xff1a;1个汉字 1个字母 5个字母或数字示例&#xff1a;京A12345、粤B5678X 2. 新能源车牌&#xf…...

使用 SSH 连接 GitLab 的常见问题及解决方案

使用 SSH 连接 GitLab 的常见问题及解决方案 在使用 SSH 连接到 GitLab 服务器时&#xff0c;可能会遇到类似于以下的错误信息&#xff1a; git192.168.xx.xxx: Permission denied (publickey).这个错误通常表示 SSH 无法验证你的公钥&#xff0c;导致无法访问 GitLab 仓库。…...

泛微E9开发 校验日期型字段是否符合要求

校验日期型字段是否符合要求 1、需求分析及展示效果1.1、需求确认1.2、展示效果 2、实现方法3、扩展知识——js日期相关函数 1、需求分析及展示效果 1.1、需求确认 “填报时间”是一个日期型字段&#xff0c;用户提出需求只能选择每个月的第二个周二&#xff0c;选择其他日期…...

ubuntu安装Vim和net-tools和htop

合并安装&#xff0c;快捷方便 sudo apt update sudo apt install net-tools vim htop在Ubuntu中安装Vim可以通过终端使用以下命令完成&#xff1a; sudo apt update sudo apt install vim这两条命令首先更新了本地的包索引&#xff0c;然后安装了Vim文本编辑器。 安装完成后…...