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

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...