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

Dijkstra 算法代码步骤[leetcode.743网络延迟时间]

有 n 个网络节点,标记为 1 到 n

给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i] = (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。

现在,从某个节点 K 发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1 。

示例 1:

输入:times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2
输出:2

算法流程

  1. 初始化

    • 邻接矩阵 g 存储边权。

    • dis 数组存储源点到各点的最短距离,初始为 INF

    • done 数组标记节点是否已确定最短路径。

  2. Dijkstra 主循环

    • 选择当前未处理的、距离最短的节点 x

    • 如果 x 不可达,返回 -1

    • 更新 maxDis 为 dis[x](因为 dis[x] 是递增的)。

    • 标记 x 为已处理。

    • 松弛 x 的所有邻居 y,更新 dis[y]

  3. 终止条件

    • 所有节点已处理,返回 maxDis(最长延迟时间)。

时间复杂度

  • 邻接矩阵实现O(n^2)(适用于稠密图)。

  • 堆优化(优先队列)O(E log V)(适用于稀疏图,但本题未使用)。

空间复杂度

  • O(n^2)(邻接矩阵存储)。

1. 初始化

final int INF = Integer.MAX_VALUE / 2; // 防止加法溢出
int[][] g = new int[n][n]; // 邻接矩阵
for (int[] row : g) {Arrays.fill(row, INF);
}
  • INF:表示“无穷大”,用于初始化不可达的边。Integer.MAX_VALUE / 2 是为了防止后续计算 dis[x] + g[x][y] 时溢出。

  • g:邻接矩阵,g[i][j] 表示从节点 i 到 j 的传输时间(权重)。

  • 初始化邻接矩阵:所有边初始为 INF(表示初始时所有节点之间不可达)。


2. 构建图的邻接矩阵

for (int[] t : times) {g[t[0] - 1][t[1] - 1] = t[2];
}
  • times 是一个二维数组,其中 times[i] = [u, v, w] 表示从节点 u 到 v 的传输时间为 w

  • 存储到邻接矩阵

    • g[t[0] - 1][t[1] - 1] = t[2]:因为节点编号从 1 开始,而数组索引从 0 开始,所以需要 -1 调整。


3. Dijkstra 算法初始化

int maxDis = 0;
int[] dis = new int[n];
Arrays.fill(dis, INF);
dis[k - 1] = 0;
boolean[] done = new boolean[n];
  • maxDis:记录所有最短路径中的最大值(即网络延迟时间)。

  • disdis[i] 表示从源节点 k 到节点 i 的最短距离,初始为 INF(不可达)。

  • dis[k - 1] = 0:源节点到自身的距离为 0

  • done:标记节点是否已经确定最短路径。


4. Dijkstra 主循环

while (true) {int x = -1;for (int i = 0; i < n; i++) {if (!done[i] && (x < 0 || dis[i] < dis[x])) {x = i;}}if (x < 0) {return maxDis; // 所有节点已处理完毕}if (dis[x] == INF) { // 有节点无法到达return -1;}maxDis = dis[x]; // 更新最大延迟时间done[x] = true; // 标记 x 的最短路径已确定for (int y = 0; y < n; y++) {dis[y] = Math.min(dis[y], dis[x] + g[x][y]);}
}

(1) 选择当前未处理的最短路径节点

int x = -1;
for (int i = 0; i < n; i++) {if (!done[i] && (x < 0 || dis[i] < dis[x])) {x = i;}
}
  • x:当前未处理(!done[i])且距离 dis[i] 最小的节点。

  • 贪心策略:每次选择距离源节点最近的未处理节点进行扩展。

(2) 检查是否所有节点已处理

if (x < 0) {return maxDis; // 所有节点已处理完毕
}
  • x < 0:表示所有节点都已处理,返回 maxDis(即最长延迟时间)。

(3) 检查是否有节点不可达

if (dis[x] == INF) { // 有节点无法到达return -1;
}
  • dis[x] == INF:表示当前节点 x 无法从源节点到达,直接返回 -1

(4) 更新 maxDis 并标记 x 为已处理

maxDis = dis[x]; // 更新最大延迟时间
done[x] = true; // 标记 x 的最短路径已确定
  • maxDis:由于 Dijkstra 每次处理的 dis[x] 是递增的,所以直接更新即可。

  • done[x] = true:表示 x 的最短路径已确定,后续不再更新。

(5) 松弛操作(更新邻居的最短距离)

for (int y = 0; y < n; y++) {dis[y] = Math.min(dis[y], dis[x] + g[x][y]);
}
  • 松弛(Relaxation):尝试通过 x 缩短 y 的最短路径:

    • 如果 dis[x] + g[x][y] < dis[y],则更新 dis[y]

完整版代码:

class Solution {public int networkDelayTime(int[][] times, int n, int k) {final int INF = Integer.MAX_VALUE / 2; // 防止加法溢出int[][] g = new int[n][n]; // 邻接矩阵for (int[] row : g) {Arrays.fill(row, INF);}for (int[] t : times) {g[t[0] - 1][t[1] - 1] = t[2];}int maxDis = 0;int[] dis = new int[n];Arrays.fill(dis, INF);dis[k - 1] = 0;boolean[] done = new boolean[n];while (true) {int x = -1;for (int i = 0; i < n; i++) {if (!done[i] && (x < 0 || dis[i] < dis[x])) {x = i;}}if (x < 0) {return maxDis; // 最后一次算出的最短路就是最大的}if (dis[x] == INF) { // 有节点无法到达return -1;}maxDis = dis[x]; // 求出的最短路会越来越大done[x] = true; // 最短路长度已确定(无法变得更小)for (int y = 0; y < n; y++) {// 更新 x 的邻居的最短路dis[y] = Math.min(dis[y], dis[x] + g[x][y]);}}}
}

 

示例

输入

times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2

执行流程

  1. 初始化

    • dis = [INF, 0, INF, INF](源节点 k=2 的距离为 0)。

  2. 第一次循环

    • 选择 x=1dis[1] = 0)。

    • 松弛邻居 y=0 和 y=2

      • dis[0] = min(INF, 0 + 1) = 1

      • dis[2] = min(INF, 0 + 1) = 1

    • maxDis = 0

  3. 第二次循环

    • 选择 x=0 或 x=2dis[0] = 1dis[2] = 1)。

    • 假设选 x=0,但没有邻居可更新。

    • maxDis = 1

  4. 第三次循环

    • 选择 x=2

    • 松弛邻居 y=3

      • dis[3] = min(INF, 1 + 1) = 2

    • maxDis = 1

  5. 第四次循环

    • 选择 x=3

    • 没有邻居可更新。

    • maxDis = 2

  6. 结束

    • 所有节点已处理,返回 maxDis = 2

最终输出2(最长延迟时间)。

相关文章:

Dijkstra 算法代码步骤[leetcode.743网络延迟时间]

有 n 个网络节点&#xff0c;标记为 1 到 n。 给你一个列表 times&#xff0c;表示信号经过 有向 边的传递时间。 times[i] (ui, vi, wi)&#xff0c;其中 ui 是源节点&#xff0c;vi 是目标节点&#xff0c; wi 是一个信号从源节点传递到目标节点的时间。 现在&#xff0c;…...

Ubuntu22.04/24.04 P104-100 安装驱动和 CUDA Toolkit

硬件环境 使用一块技嘉 B85m-DS3H 安装 P104-100, CPU是带集成显卡的i5-4690. 先在BIOS中设置好显示设备优先使用集成显卡(IGX). 然后安装P104-100开机. 登入Ubuntu 后查看硬件信息, 检查P104-100是否已经被检测到 # PCI设备 lspci -v | grep -i nvidia lspci | grep NVIDIA …...

Golang 学习指南

目录 变量与常量数据类型与控制结构常用数据结构函数与错误处理指针与并发Gin 框架与 go mod小结与参考资料 1. 变量与常量 变量&#xff08;var&#xff09; 用于定义可变的值。可以指定类型&#xff0c;也可以自动推断类型。示例&#xff1a;var name string "Golang…...

Ubuntu 磁盘空间占用清理(宝塔)

目录 前言1. 基本知识2. 实战 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器&#xff0c;无代码爬取&#xff0c;就来&#xff1a;bright.cn 本身自搭建了一个宝塔&#xff0c;突然一下子多了好些空…...

AntBio: 2025 AACR Meeting - Charting New Oncology Frontiers Together

AntBio cordially invites you to attend the 2025 AACR Annual Meeting and jointly chart a new course in oncology research! The global benchmark for cancer research and therapeutics—the 2025 American Association for Cancer Research (AACR) Annual Meeting—wi…...

数模学习:二,MATLAB的基本语法使用

注释代码&#xff1a; (1)在每行语句后面加上分号&#xff0c;则不显示该行代码的运算结果。 在每行代码前加%&#xff0c;则该行代码会被注释掉 (2) 多行注释&#xff1a; 选中要注释的多行语句&#xff0c;按快捷键Ctrl R (3) 取消注释&#xff1a; 选中要注释的多行语句…...

【Webpack \ Vite】多环境配置

环境变量脚本命令 如何通过不同的环境变量或不同的配置文件进行项目区分&#xff0c;动态加载配置。通常&#xff0c;使用环境变量是最简单且灵活的方法&#xff0c;因为它不需要改变构建命令或创建多个配置文件 环境变量 在根目录下创建 .env.xxx 文件&#xff0c;为不同的环…...

已知漏洞打补丁

. 打补丁 根据MS漏洞编号或者CVE漏洞编号都可以找到对应的HotfixID。 1.根据MS漏洞编号可以使用&#xff1a;https://learn.microsoft.com/zh-cn/security-updates/securitybulletins/securitybulletins 即可找到KB编号。 2.根据CVE漏洞编号可以使用&#xff1a;https://cve…...

WGS84(GPS)、火星坐标系(GCJ02)、百度地图(BD09)坐标系转换Java代码

在做基于百度地图、高德地图等电子地图做为地图服务的二次开发时&#xff0c;通常需要将具有WGS84等坐标的矢量数据&#xff08;如行政区划、地名、河流、道路等GIS地理空间数据&#xff09;添加到地图上面。 然而&#xff0c;在线地图大多使用的是火星坐标系&#xff0c;需要…...

R语言操作n

1.加载安装vegan包 2.查看data(varechem)和data(varespec),探索其维度和结构 3.基于varespec构建物种互作网络&#xff0c;输出gml文件并采用gephi可视化为图片&#xff0c;输出pdf&#xff0c;阈值为r>0.6&#xff0c;p<0.05 4.基于varespec和varechem构建物种-环境互作…...

ChatGPT与DeepSeek在科研论文撰写中的整体科研流程与案例解析

随着人工智能技术的快速发展&#xff0c;大语言模型如ChatGPT和DeepSeek在科研领域展现出强大的潜力&#xff0c;尤其是在论文撰写方面。本文旨在介绍如何利用ChatGPT和DeepSeek提升科研论文撰写的效率与质量&#xff0c;并提供一个具体案例&#xff0c;详细阐述其技术流程及公…...

VScode在 Markdown 编辑器中预览

1. 使用在线 Mermaid 编辑器 步骤&#xff1a; 打开 Mermaid Live Editor。将你 .md 文件中的 Mermaid 代码&#xff08;从 mermaid 到结束的代码块&#xff09;复制粘贴到编辑器的左侧输入框。编辑器会自动在右侧生成可视化的 ER 图。你可以点击右上角的下载按钮&#xff0c;…...

驱动开发硬核特训 · Day 22(下篇): # 深入理解 Power-domain 框架:概念、功能与完整代码剖析

一、Power-domain 框架基础概念 ✏️ 什么是 Power-domain&#xff1f; 在 Linux 内核中&#xff0c;Power-domain&#xff08;电源域&#xff09; 是指一组硬件模块的逻辑集合&#xff0c;这些模块可以被统一控制电源状态&#xff08;上电、断电&#xff09;。 Linux 内核通…...

无人机超声波避障技术要点与难点!

一、超声波避障技术要点 4. 障碍物建模 通过最小二乘法平面拟合&#xff0c;将单点测距数据转化为障碍物表面模型&#xff0c;提高避障准确性。 使用队列&#xff08;wallqueue&#xff09;存储障碍物信息&#xff0c;并进行去重处理&#xff0c;避免重复避障。 5. 避障轨…...

ASCII字符编码标准及字符表

目录 概述 1 标准 ASCII 表&#xff08;0-127&#xff09; 2 大写字母&#xff08;A-Z&#xff09; 3 小写字母&#xff08;a-z&#xff09; 4 说明 概述 ASCII&#xff08;American Standard Code for Information Interchange&#xff0c;美国信息交换标准代码&#xff…...

联想昭阳笔记本 风扇一键静音优化操作指南

【联想昭阳笔记本 一键静音优化操作指南】 第1步&#xff1a;安装官方工具 Lenovo Vantage 打开【开始菜单】→ 搜索【Microsoft Store】&#xff0c;打开。在 Store 里搜索【Lenovo Vantage】&#xff0c;下载安装。安装好后&#xff0c;打开【Lenovo Vantage】。进入【设备…...

go语言八股文(三)

1.java和go的区别 1. 语言设计目标 Java&#xff1a; 通用性&#xff1a;设计为一种通用的、面向对象的编程语言&#xff0c;适用于多种应用场景&#xff0c;如桌面应用、服务器端应用、移动应用等。跨平台性&#xff1a;通过“一次编写&#xff0c;到处运行”&#xff08;Wr…...

Flutter 学习之旅 之 flutter 有时候部分手机【TextField】无法唤起【输入法软键盘】的一些简单整理

Flutter 学习之旅 之 flutter 有时候部分手机【TextField】无法唤起【输入法软键盘】的一些简单整理 目录 Flutter 学习之旅 之 flutter 有时候部分手机【TextField】无法唤起【输入法软键盘】的一些简单整理 一、简单介绍 二、现象描述 三、尝试的解决方案 1、根据应用的…...

【工具】scMultiMap基于单细胞多模态数据实现增强子与靶基因的细胞类型特异性映射

文章目录 介绍代码参考 介绍 在与疾病相关的细胞类型中绘制增强子和靶基因图谱&#xff0c;能够为全基因组关联研究&#xff08;GWAS&#xff09;变异的功能机制提供关键见解。单细胞多模态数据能够测量同一细胞中的基因表达和染色质可及性&#xff0c;从而实现细胞类型特异性…...

rt-linux下的cgroup cpu的死锁bug

一、背景 rt-linux系统有其非常大的实时性的优势&#xff0c;但是与之俱来的是该系统上有一些天然的缺陷。由于rt-linux系统允许进程在内核态执行的逻辑里&#xff0c;在持锁期间&#xff0c;甚至持spinlock锁期间&#xff0c;都能被其他进程抢占。这一特性能带来实时性的好处…...

Java 内存泄漏 详解

Java 内存泄漏是指程序中某些对象不再被使用&#xff0c;但由于某些原因无法被垃圾回收器&#xff08;Garbage Collector, GC&#xff09;回收&#xff0c;导致内存被持续占用&#xff0c;最终可能引发性能问题或 OutOfMemoryError。 本文将从底层原理、源码层面详细解释 Java …...

Rabbit MQ的基础认识

零、介绍 MQ&#xff1a;message queue&#xff08;消息队列&#xff1a;先进先出&#xff09; Rabbit MQ&#xff1a; 一、优势 1.应用解耦 2.异步提速 3.削峰填谷 4.总结 二、劣势...

GIS开发笔记(16)解决基于osg和osgearth三维地图上添加placeNode图标点击不易拾取的问题

一、实现效果 二、实现原理 在图标添加的位置同时添加一个红色圆球,半径为5000~8000米,图标和圆球挂接到同一个group节点,group节点再挂接到根节点,当点击到圆球时,通过遍历父节点就可以找到被点击的图标节点。 三、参考代码 //添加图标代码 #pragma once #include &…...

JDBC 使用流程详解

1. 加载数据库驱动 目的&#xff1a;注册数据库驱动类&#xff0c;使 JDBC 能识别特定数据库&#xff08;如 MySQL、Oracle&#xff09;。 代码示例&#xff1a; // JDBC 4.0 后无需显式加载驱动&#xff08;SPI 自动发现&#xff09;&#xff0c;但部分旧项目仍需手动加载 C…...

小白学习java第16天(上): javaWeb

0.背景介绍 1.前言 首先我们需要javaweb里面的大概流程是干什么的&#xff0c;怎么才能实现的&#xff1f;&#xff0c;每一部分是靠什么进行的&#xff1f;以及背后实现的功能是干什么的&#xff1f;。。。。对于我来说要是不解决这些&#xff0c;会让我感觉不踏实&#xff…...

vue 打包设置

1、vue webpack配置 filename: [path][base].gz,// 设置成这样就行了 const { defineConfig } require(vue/cli-service)const debug process.env.NODE_ENV ! productionconst CompressionWebpackPlugin require(compression-webpack-plugin)const TerserPlugin require(…...

Excel如何安装使用EPM插件并且汉化?

Excel如何使用EPM插件 Excel如何使用EPM插件一、安装EPM插件二、启动EPM插件三、插件汉化设置 Excel如何使用EPM插件 一、安装EPM插件 在安装EPM插件时&#xff0c;若运行安装包后出现报错提示&#xff0c;通常是因为系统缺少 Visual Studio 2010 组件&#xff0c;需先安装该…...

在Linux中使用fcntl函数和ioctl函数

特性fcntlioctl作用对象文件描述符&#xff08;通用文件操作&#xff09;设备文件&#xff08;硬件或驱动控制&#xff09;标准化程度POSIX 标准&#xff0c;行为一致设备相关&#xff0c;无统一标准典型场景文件锁、非阻塞模式、描述符复制终端控制、网络配置、硬件操作移植性…...

ESP32-S3 入门学习笔记(四):LED实验

ESP32-S3 入门学习笔记&#xff08;四&#xff09;&#xff1a;LED实验 开发板&#xff1a;正点原子ESP32S3 B站学习链接&#xff1a;link 1. GPIO&LED 简介 1.1 GPIO 简介 GPIO 是负责控制或采集外部器件信息的外设&#xff0c;主要负责输入输出功能。以下是ATK-MWS3S…...

clickhouse#复制修改数据

需求 在ClickHouse表中存在一些数据&#xff0c;你需要复制其中几行数据&#xff0c;这个复制不是完全复制&#xff0c;额外需要修改其中某几列数据项。 语句 INSERT INTO xxx_table SELECT * REPLACE ({except_value_1} AS {column_name_1},...{except_value_n} AS {colum…...

Java安全之cc链学习集合

CC1 InvokerTransformer https://blog.csdn.net/weixin_53912233/article/details/137786954 LazyMap https://blog.csdn.net/weixin_53912233/article/details/137787763 CC1链学习记录_cc1 链子 学习-CSDN博客 Java反序列化Commons-Collections篇02-CC1链补充 | Drunk…...

分享:google高级搜索常用的4个入口

网站和文件&#xff1a;google.com/advanced_search图片&#xff1a;google.com/advanced_image_search视频&#xff1a;google.com/advanced_video_search书籍&#xff1a;google.com/advanced_book_search...

内存四区(堆)

在上一次分享中&#xff0c;我和大家分享了栈区&#xff0c;今天栈区来了。 而内存四区中&#xff0c;堆区是干嘛的呢&#xff1f; 堆区&#xff0c;也是用来存放数据的&#xff0c;只不过呢&#xff0c;堆区中的数据的生死存亡是由程序员来控制的。 当然如果你一直不管堆区…...

Ldap高效数据同步- MirrorMode双主复制模式配置详解(下)

#作者&#xff1a;朱雷 上篇&#xff1a;《Ldap高效数据同步- MirrorMode双主复制模式配置详解&#xff08;上&#xff09;》 链接: link 文章目录 三、配置Mirror复制类型3.3. 在ldap-0上增加test2用户3.4. 在ldap-1上查看3.5. 在ldap-1上增加test4用户3.7. 最终两台LDAP数据…...

亚组风险比分析与可视化

1. 结果解读 1.1 风险比概述 1.1.1 风险比基本概念 风险比(Hazard Ratio)用于衡量治疗组与对照组事件发生的风险差异。 风险比为1,表示两组风险相同;小于1,治疗组风险低;大于1,治疗组风险高。 1.1.2 性别亚组分析 A性风险比小于1,表明治疗对A性有积极效果,风险降低。…...

2个小时1.5w字| React Golang 全栈微服务实战

文章目录 前言Golang 入门教程1. 下载与环境配置安装 GoWindows 安装macOS 安装Linux 安装 理解 GOROOT 和 GOPATHGOROOTGOPATHGo Modules 与 GOPATH 的关系查看和设置 Go 环境变量 配置 GOPATH 2. 语法与包管理Go 基础语法运行 Go 程序构建 Go 程序包管理 (Go Modules)常用标准…...

Spring security详细上手教学(三)密码管理

Spring security详细上手教学&#xff08;三&#xff09;密码管理 本章节两部分内容 实现PasswordEncoder使用Spring Security Crypto模块提供的工具 1. 使用 password encoder 通常&#xff0c;系统不会使用纯文本来保存密码&#xff0c;需要进行加密/哈希等一系列处理以加…...

ADC读取异常情况汇总

MCU ADC读取内部参考电压 Vrefint 如果某个输入引脚的电压高于供电电压&#xff0c;可能存在读取内部参考电压数值不准或者读数是4095。 虽然宽电压支持&#xff0c;最好硬件设计硬件避免这种情况&#xff0c;避免异常情况。...

给函数参数设置默认值的方式

在 JavaScript 中&#xff0c;给函数参数设置默认值主要有以下几种方式&#xff1a; 1. 函数体内手动检查赋值&#xff08;ES5 及以前&#xff09; 在函数内部检查参数是否为 undefined&#xff0c;然后手动赋值默认值。 function greet(name, age) {name name ! undefined…...

【C语言】内存分配的理解

很多时候我们声明变量&#xff0c;系统就自动为我们处理好了内存。 这主要取决于内存分配发生的时间和内存区域。C语言中主要有以下几种内存分配方式&#xff1a; 栈 (Stack) 内存分配 (自动内存): 何时发生: 在函数内部声明的非static局部变量&#xff08;包括基本类型如 int…...

特征工程四:数据特征提取TfidfVectorizer的使用

TfidfVectorizer 深度解析 TfidfVectorizer 是 scikit-learn 中用于文本特征提取的核心工具&#xff0c;它将原始文本转换为 TF-IDF 特征矩阵&#xff0c;是自然语言处理(NLP)和文本挖掘的基础组件。 一、核心原理 1. TF-IDF 计算 TF (Term Frequency)&#xff1a;词频&…...

深度学习涉及的数学与计算机知识总结

深度学习涉及的数学与计算机知识可总结为以下核心模块&#xff0c;结合理论与实践需求分为数学基础和计算机技能两大方向&#xff1a; 一、数学知识 线性代数 核心&#xff1a;矩阵运算&#xff08;乘法、转置、逆矩阵&#xff09;、向量空间、特征值与特征向量、奇异值分解&am…...

引领印尼 Web3 变革:Mandala Chain 如何助力 1 亿用户迈向数字未来?

当前 Web3 的发展正处于关键转折点&#xff0c;行业亟需吸引新用户以推动 Web3 的真正大规模采用。然而&#xff0c;大规模采用面临着核心挑战&#xff1a;数据泄露风险、集中存储的安全漏洞、跨系统互操作性障碍&#xff0c;以及低效的服务访问等问题。如何才能真正突破这些瓶…...

Mysql从入门到精通day6————时间和日期函数精讲

关于Mysql的日期和时间计算函数种类非常繁多,此处我们对常用的一些函数的用法通过实例演示让读者体会他们的用法,文章末尾也给出了时间和日期计算的全部函数 函数1:curdate()和current_date()函数 作用:获取当前日期 select curdate(),current_date();运行效果:...

C#如何正确的停止一个多线程Task?CancellationTokenSource 的用法。

在 C# 中停止一个 Task 需要谨慎处理&#xff0c;因为直接强制终止&#xff08;如 Thread.Abort()&#xff09;会导致资源泄漏或状态不一致。推荐使用 ​​协作式取消&#xff08;Cooperative Cancellation&#xff09;​​ 通过 CancellationToken 实现安全停止。以下是详细方…...

【Redis】Redis Zset实现原理:跳表+哈希表的精妙设计

一、实现&#xff1a; Zset有序集合是一种由 跳表(Skip List)哈希表(Hash Table) 实现的数据结构。 二、特点功能&#xff1a; Set特性排序 三、跳表与哈希表分析&#xff1a; Zset的实现由两个数据结构&#xff1a; 1.跳表(Skip List)&#xff1a;用于存储数据的排序和快…...

【前端】jQuery 对数据进行正序排列

你可以使用 jQuery 对数据进行正序排列&#xff08;按 jbsj 升序&#xff09;。以下是完整的代码示例&#xff1a; <!DOCTYPE html> <html> <head><title>按时间排序</title><script src"https://code.jquery.com/jquery-3.6.0.min.js&…...

Matlab 报错:尝试将 SCRIPT vl_sift 作为函数执行:

问题描述&#xff1a; 运行matlab程序出现报错&#xff1a; 警告: 名称不存在或不是目录: xxx\vlfeat-0.9.21\toolbox\mex\mexw64 xxxx 尝试将 SCRIPT vl_sift 作为函数执行: xxxx\vlfeat-0.9.21\toolbox\sift\vl_sift.m原因分析&#xff1a; 缺少 \vlfeat-0.9.21\toolbox…...

前端权限管理

前端权限 本质上就是控制前端视图层的展示和前端所发送的请求 一、RBAC 用户&#xff08;User&#xff09;&#xff1a;系统的使用者 角色&#xff08;Role&#xff09;&#xff1a;权限的集合&#xff08;如管理员、普通用户&#xff09;。 权限&#xff08;Permission&am…...

【PVR】《Adaptive Palm Vein Recognition Method》

[1]程良彬.自适应的手掌静脉识别方法研究[D].桂林电子科技大学,2023.DOI:10.27049/d.cnki.ggldc.2023.000681. 文章目录 1、Background and Motivation2、Related Work3、Advantages / Contributions4、Method4.1、Datasets and Metrics4.2、基于最大化手掌内切圆的感兴趣区域提…...