当前位置: 首页 > 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;因此无法使用。在网上找…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...