数据结构之堆(Heap)
数据结构之堆(Heap)
- 数据结构之堆(Heap)
- 一、堆的核心概念
- 1. 定义与性质
- 2. 存储方式
- 二、核心操作与算法
- 1. 操作复杂度概览
- 2. 关键操作详解
- (1) 向上调整(Sift Up)
- (2) 向下调整(Sift Down)
- (3) Floyd建堆算法
- 三、完整代码实现(C++模板版)
- 四、高级应用与扩展
- 1. 堆排序算法
- 2. 实际应用场景
- 3. 相关数据结构对比
- 五、常见问题解答
- 六、最佳实践建议
数据结构之堆(Heap)
一、堆的核心概念
1. 定义与性质
堆(Heap) 是一种特殊的完全二叉树数据结构,满足以下关键性质:
- 结构性:完全二叉树结构
- 除最后一层外,其他层节点全满
- 最后一层节点从左向右连续排列
- 有序性:
- 最大堆(Max Heap):
∀i, arr[i] ≥ arr[2i+1]
且arr[i] ≥ arr[2i+2]
- 最小堆(Min Heap):
∀i, arr[i] ≤ arr[2i+1]
且arr[i] ≤ arr[2i+2]
- 最大堆(Max Heap):
2. 存储方式
通过数组实现,利用完全二叉树的紧凑性:
索引关系(数组从0开始存储):
- 父节点索引:
parent(i) = (i-1)//2
- 左子节点:
left(i) = 2i+1
- 右子节点:
right(i) = 2i+2
存储示例:
10 / \ 8 9 → 数组存储:[10,8,9,5,3,7,6]/ \ / \ → 索引对应:0 1 2 3 4 5 6 5 3 7 6
二、核心操作与算法
1. 操作复杂度概览
操作 | 时间复杂度 | 空间复杂度 | 说明 |
---|---|---|---|
插入元素 | O(log n) | O(1) | 最坏情况下调整到根节点 |
删除堆顶 | O(log n) | O(1) | 需要重建堆结构 |
查找极值 | O(1) | O(1) | 直接访问数组首元素 |
构建堆 | O(n) | O(n) | Floyd算法优化 |
堆排序 | O(n log n) | O(1) | 原地排序 |
2. 关键操作详解
(1) 向上调整(Sift Up)
应用场景:插入新元素后维护堆性质
算法步骤:
- 将新元素置于数组末尾
- 与父节点比较:
while index > 0:parent = (index-1) // 2if heap[parent] >= heap[index]: breakswap(parent, index)index = parent
(2) 向下调整(Sift Down)
应用场景:删除堆顶后重建堆结构
算法步骤:
- 堆顶元素与末尾交换
- 删除末尾元素(原堆顶)
- 逐层向下比较:
void siftDown(vector<int>& heap, int index, int size) {while (true) {int left = 2 * index + 1;int right = 2 * index + 2;int target = index;if (left < size && heap[left] > heap[target])target = left;if (right < size && heap[right] > heap[target])target = right;if (target == index) break;swap(heap[index], heap[target]);index = target;} }
(3) Floyd建堆算法
优化原理:从最后一个非叶子节点(索引n/2-1)开始逆向调整
数学证明:
- 叶子节点数量 ≈ n/2,无需处理
- 总调整次数 = Σ(h-i)*2^i ≤ 2n → O(n)
// C++建堆实现
MaxHeap(const vector<int>& arr) {heap = arr;for (int i = heap.size()/2 - 1; i >= 0; i--) {siftDown(i, heap.size());}
}
三、完整代码实现(C++模板版)
#include <iostream>
#include <vector>
#include <functional>template <typename T, typename Compare = std::less<T>>
class Heap {
private:std::vector<T> data;Compare comp;void siftUp(int idx) {while (idx > 0) {int parent = (idx - 1) / 2;if (!comp(data[parent], data[idx])) break;std::swap(data[parent], data[idx]);idx = parent;}}void siftDown(int idx, int size) {while (true) {int left = 2*idx + 1;int right = 2*idx + 2;int target = idx;if (left < size && comp(data[target], data[left])) target = left;if (right < size && comp(data[target], data[right]))target = right;if (target == idx) break;std::swap(data[idx], data[target]);idx = target;}}public:explicit Heap(const Compare& cmp = Compare()) : comp(cmp) {}Heap(const std::vector<T>& arr, const Compare& cmp = Compare()) : comp(cmp) {data = arr;for (int i = data.size()/2 - 1; i >= 0; --i) {siftDown(i, data.size());}}void push(const T& val) {data.push_back(val);siftUp(data.size()-1);}void pop() {if (empty()) return;std::swap(data.front(), data.back());data.pop_back();siftDown(0, data.size());}const T& top() const {if (empty()) throw std::out_of_range("Heap is empty");return data.front();}bool empty() const { return data.empty(); }size_t size() const { return data.size(); }
};// 使用示例
int main() {// 最大堆示例Heap<int> maxHeap;for(int num : {3,5,1,9,7}) maxHeap.push(num);std::cout << "Max Heap: ";while (!maxHeap.empty()) {std::cout << maxHeap.top() << " "; // 输出:9 7 5 3 1maxHeap.pop();}// 最小堆示例Heap<int, std::greater<int>> minHeap;for(int num : {3,5,1,9,7}) minHeap.push(num);std::cout << "\nMin Heap: ";while (!minHeap.empty()) {std::cout << minHeap.top() << " "; // 输出:1 3 5 7 9minHeap.pop();}return 0;
}
四、高级应用与扩展
1. 堆排序算法
template <typename T>
void heapSort(std::vector<T>& arr) {Heap<T> heap(arr);for (int i = arr.size()-1; i >= 0; --i) {arr[i] = heap.top();heap.pop();}
}
2. 实际应用场景
领域 | 具体应用 | 堆类型 |
---|---|---|
操作系统 | 进程优先级调度 | 最大堆 |
网络路由 | Dijkstra最短路径算法 | 最小堆 |
实时系统 | 高优先级任务处理 | 最大堆 |
机器学习 | Top-K特征选择 | 最小堆 |
数据库系统 | 多路归并排序 | 胜者树/败者树 |
3. 相关数据结构对比
结构 | 插入 | 删除极值 | 查找极值 | 合并操作 | 空间 |
---|---|---|---|---|---|
无序数组 | O(1) | O(n) | O(n) | O(m+n) | O(n) |
有序数组 | O(n) | O(1) | O(1) | O(m+n) | O(n) |
二叉搜索树 | O(log n) | O(log n) | O(log n) | O(m+n) | O(n) |
堆 | O(log n) | O(log n) | O(1) | O(m+n) | O(n) |
五、常见问题解答
Q1:堆与优先队列的关系?
→ 优先队列是抽象数据结构,堆是其最高效的物理实现方式
Q2:如何选择最大堆/最小堆?
→ 根据需求方向选择:最大堆用于快速获取最大值,最小堆用于最小值
Q3:堆的局限性有哪些?
- 不支持快速查找任意元素(O(n))
- 合并两个堆效率低(O(m+n))
- 不适合需要频繁修改非堆顶元素的场景
Q4:如何实现动态调整优先级?
引入索引堆(Index Heap)结构:
template <typename T>
class IndexHeap {
private:std::vector<int> indexes; // 索引数组std::vector<T> keys; // 实际数据存储// 添加反向索引表维护std::unordered_map<int, int> reverse;
};
六、最佳实践建议
-
优先选择标准库实现
C++中优先使用priority_queue
(底层默认用最大堆):#include <queue> std::priority_queue<int> maxHeap; std::priority_queue<int, std::vector<int>, std::greater<int>> minHeap;
-
海量数据处理技巧
使用堆处理Top K问题的最佳实践:#include <queue> #include <vector> #include <functional>vector<int> find_top_k(const vector<int>& arr, int k) {if (k <= 0) return {};// 使用最小堆(greater比较器)priority_queue<int, vector<int>, greater<int>> min_heap;for (int num : arr) {if (min_heap.size() < k) {min_heap.push(num);} else {if (num > min_heap.top()) {min_heap.pop();min_heap.push(num);}}}// 将堆转换为有序结果vector<int> result;while (!min_heap.empty()) {result.push_back(min_heap.top());min_heap.pop();}reverse(result.begin(), result.end()); // 从大到小排序return result; }
-
调试技巧
可视化验证堆结构:void printHeap(const vector<int>& heap) {int level = 0, count = 1;for (int i=0; i<heap.size(); ++i) {cout << heap[i] << " ";if (i+1 == count) {cout << endl;level++;count += (1 << level);}} }
建议结合LeetCode练习题(如215.数组中的第K个最大元素、23.合并K个排序链表)进行实践巩固。
相关文章:
数据结构之堆(Heap)
数据结构之堆(Heap) 数据结构之堆(Heap)一、堆的核心概念1. 定义与性质2. 存储方式 二、核心操作与算法1. 操作复杂度概览2. 关键操作详解(1) 向上调整(Sift Up)(2) 向下调整(Sift Down…...
人工智能 - 机器学习、深度学习、强化学习是人工智能领域的理论基础和方法论
机器学习、深度学习、强化学习是人工智能领域的三大核心方向,各自具有独特的理论基础和方法论。以下是它们的核心理论知识总结: 一、机器学习(Machine Learning, ML) 1. 基础概念 目标:通过数据驱动的方式,让机器从经验中学习规律,完成预测、分类或决策任务。 核心范式…...
github上文件过大无法推送问题
GitHub 对文件大小有限制,超过 100 MB 的文件无法直接推送到仓库中。 解决思路: 使用 Git Large File Storage (Git LFS) 来管理大文件不上传对应的大文件 使用Git LFS: 1. 安装 Git LFS 首先,你需要安装 Git LFS。可以按照以…...
Elasticsearch:将 Ollama 与推理 API 结合使用
作者:来自 Elastic Jeffrey Rengifo Ollama API 与 OpenAI API 兼容,因此将 Ollama 与 Elasticsearch 集成非常容易。 在本文中,我们将学习如何使用 Ollama 将本地模型连接到 Elasticsearch 推理模型,然后使用 Playground 向文档提…...
【Linux】详谈 进程控制
目录 一、进程是什么 二、task_struct 三、查看进程 四、创建进程 4.1 fork函数的认识 4.2 2. fork函数的返回值 五、进程终止 5.1. 进程退出的场景 5.2. 进程常见的退出方法 5.2.1 从main返回 5.2.1.1 错误码 5.2.2 exit函数 5.2.3 _exit函数 5.2.4 缓冲区问题补…...
构建高效智能对话前端:基于Ant Design X 的deepseek对话应用
文章目录 实现的效果前言Ant Design X添加欢迎组件创建对话气泡存储对话历史渲染对话气泡 输入组件WebSocket 连接总结 实现的效果 待机页面: 等待页面: 完成页面: 前言 随着人工智能技术的飞速发展,大模型对话系统已成为…...
WordPress“更新失败,响应不是有效的JSON响应”问题的修复
在使用WordPress搭建网站时,许多人在编辑或更新文章时,可能会遇到一个提示框,显示“更新失败,响应不是有效的JSON响应”。这个提示信息对于不了解技术细节的用户来说,太难懂。其实,这个问题并不复杂&#x…...
华为交换机trunk简介配置
目录 一、Trunk 口简介二、Trunk 口配置案例及命令(一)组网需求(二)配置步骤(三)验证配置 三、注意事项 一、Trunk 口简介 Trunk 口是交换机中一种重要的端口类型,主要用于连接交换机与交换机、…...
DeepSeek从入门到精通(清华大学)
DeepSeek是一款融合自然语言处理与深度学习技术的全能型AI助手,具备知识问答、数据分析、编程辅助、创意生成等多项核心能力。作为多模态智能系统,它不仅支持文本交互,还可处理文件、图像、代码等多种格式输入,其知识库更新至2…...
【SpringBoot3】面向切面 AspectJ AOP 使用详解
文章目录 一、AspectJ介绍二、简单使用步骤 1、引入依赖2、定义一个Aspect3、开启AOP支持 三、AOP 核心概念四、切点(Pointcut) 1. execution2. within3. this & target4. args & args5. within & target & annotation 五、通知…...
容器运行常见数据库
一.涉及镜像压缩包 均为amd架构版本:mysql:5.7.42、postgres:13.16、dm8:20250206_rev257733_x86_rh6_64、oceanbase-ce:v4.0、opengauss:5.0.2 通过网盘分享的文件:db.tgz 链接: https://pan.baidu.com/s/1EBbFPZj1FxCA4_GxjVunWg?pwd563s 提取码: 5…...
OpenGL ES学习大纲
如果您想从头学习 OpenGL ES,以下是一个详细的学习大纲,涵盖了从基础到高级的知识点,循序渐进地帮助您掌握 OpenGL ES 的核心概念、API 使用、渲染管线、着色器编程、性能优化等内容。 1. 学习前的准备 1.1 基础知识 在学习 OpenGL ES 之前,您需要掌握以下基础知识: 数学…...
Kotlin 优雅的接口实现
1. 日常遇到的冗余的接口方法实现 日常开发中,经常会要实现接口,但是很多场景中,只需要用到其中一两个方法,例如 ActivityLifecycleCallbacks,它有很多个接口需要实现,但是很多时候我们只需要用到其中的一…...
数据结构实现顺序表的尾插,尾删,按值查找/修改/删除,按下标查找/增加/删除
头文件:head.h #ifndef __HEAD_H__ #define __HEAD_H__#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXSIZE 20enum num {success,false-1};typedef int datatype;typedef struct {int len;datatype data[MAXSIZE]; }S…...
qt实现文字跑马灯效果
实现跑马灯的方式多种多少样,可以通过定时器,或者animation等来实现。 本文通过定时器,将第一个文字,移动到最后一个这种方式来实现,还有其他方式哈。 直接上源码 h文件 #ifndef TEXTTICKER_H #define TEXTTICKER_…...
PyTorch Tensor 形状变化操作详解
PyTorch Tensor 形状变化操作详解 在深度学习中,Tensor 的形状变换是非常常见的操作。PyTorch 提供了丰富的 API 来帮助我们调整 Tensor 的形状,以满足模型输入、计算或数据处理的需求。本文将详细介绍 PyTorch 中常见的 Tensor 形状变换操作࿰…...
关于Node.js前端面试的试题概念、工作原理及实际应用
文章目录 1. 什么是Node.js?2. Node.js是如何工作的?3. Node.js与其他流行的框架相比有何优势?4. Node.js如何克服I/O操作阻塞的问题?5. 为什么Node.js是单线程的?6. 如果Node.js是单线程的,那么它是如何处…...
OpenCV机器学习(3)期望最大化(Expectation-Maximization, EM)算法cv::ml::EM
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::ml::EM 是 OpenCV 机器学习模块中的一部分,用于实现期望最大化(Expectation-Maximization, EM)算法。EM …...
Spring Boot 集成 Kettle
Kettle 简介 Kettle 最初由 Matt Casters 开发,是 Pentaho 数据集成平台的一部分。它提供了一个用户友好的界面和丰富的功能集,使用户能够轻松地设计、执行和监控 ETL 任务。Kettle 通过其强大的功能和灵活性,帮助企业高效地处理大规模数据集…...
Debezium同步之如何同步GIS数据
Debezium 可以用于同步数据库中的变更数据(CDC),包括GIS(地理信息系统)数据。GIS 数据通常存储在具有地理空间数据类型的表中,例如 PostGIS(PostgreSQL 的扩展)中的 geometry 或 geography 类型。通过 Debezium,可以实时捕获和同步这类数据的变更。本文章简单介绍Post…...
Java与C语言中取模运算符%的区别对比
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Java 文章目录 💯前言💯C语言中的取模运算符 %基本行为示例 注意事项示例:负数取模 💯Java中的取模运算符 %基本行为示例 对浮点数的支持示例:浮点数取模 符…...
如何commit后更新.gitignore实现push
目录 步骤 1: 更新 .gitignore 文件 步骤 2: 移除已追踪的大文件 步骤 3: 提交更改 步骤 4: 尝试推送 注意事项 如果已经执行了git commit,但后来意识到需要更新.gitignore文件以排除某些不应该被追踪的大文件或目录,并希望在不丢失现有提交记录的情…...
从MySQL迁移到PostgreSQL的完整指南
1.引言 在现代数据库管理中,选择合适的数据库系统对业务的成功至关重要。随着企业数据量的增长和对性能要求的提高,许多公司开始考虑从MySQL迁移到PostgreSQL。这一迁移的主要原因包括以下几个方面: 1.1 性能和扩展性 PostgreSQL以其高性能…...
20250214 随笔 Nginx 负载均衡在数据库中的应用
Nginx 负载均衡在数据库中的应用 在高并发环境下,数据库的性能往往是系统的瓶颈。为了提高数据库的吞吐能力、优化请求分配、减少单点故障,我们可以使用 Nginx 负载均衡 来优化数据库的访问。本文将介绍如何使用 Nginx 进行数据库负载均衡,以…...
从养殖场到科技前沿:YOLOv11+OpenCV精准计数鸡蛋与鸡
前言 谁能想到,鸡蛋和鸡的计数居然能变成一项高科技活儿?想象一下,早上去市场,卖家把鸡蛋摔得稀巴烂,结果鸡蛋滚得到处都是——难道你就得一个个捡回来数?还得小心别弄错?可是,你又不是超人!别担心,科技来帮忙!今天的主角是YOLOv11和OpenCV,它们是计算机视觉领域的…...
【Qt】 Data Visualization
三维数据可视化 三维柱状图三维图的创建程序截图示例代码 三维散点图三维图创建程序截图示例代码 三维曲面图三维图创建程序截图示例代码 Data Visualization 是 Qt 中的一个三维数据可视化模块,可用于绘制三维柱状图、三维散点图和三维曲面。与 Charts 模块类似&am…...
python基础语法
文章目录 字面量定义分类 注释定义分类单行注释多行注释 变量定义 数据类型类型转换定义 案例 标识符定义命名规则内容限定大小写敏感不可使用关键字 命名规范变量的命名规范 运算符数学运算符赋值运算符复合赋值运算符 定义字符串定义方式 字符串拼接语法 字符串格式化语法1字…...
【C++游戏开发-五子棋】
使用C开发五子棋游戏的详细实现方案,涵盖核心逻辑、界面设计和AI对战功能: 1. 项目结构 FiveChess/ ├── include/ │ ├── Board.h // 棋盘类 │ ├── Player.h // 玩家类 │ ├── AI.h // AI类 │ └── Game.h // 游戏主逻辑 ├── src/ …...
C/C++ | 每日一练 (2)
💢欢迎来到张胤尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 C/C | 每日一练 (2)题目参考答案封装继承多态虚函数底…...
如何在 VS Code 中快速使用 Copilot 来辅助开发
在日常开发中,编写代码往往是最耗时的环节之一。而 GitHub Copilot,作为一款 AI 编码助手,可以帮助开发者 自动补全代码、生成代码片段,甚至直接编写完整的函数,大幅提升编码效率。那么,如何在 VS Code 中快…...
FFmpeg源码:av_strlcpy函数分析
一、引言 在C/C编程中经常会用到strcpy这个字符串复制函数。strcpy是C/C中的一个标准函数,可以把含有\0结束符的字符串复制到另一个地址空间。但是strcpy不会检查目标数组dst的大小是否足以容纳源字符串src,如果目标数组太小,将会导致缓冲区…...
【生产变更】- 集群中配置SCAN ip的不同端口应用
【生产变更】- 集群中配置SCAN ip的不同端口应用 一、概述二、操作步骤三、故障解决 一、概述 使用非默认端口(1521)监听scan ip。 二、操作步骤 1、添加11521端口 srvctl add listener -l lis11521 -o /opt/grid/products/11.2.0 -p 11521 srvctl st…...
RabbitMQ 3.12.2:单节点与集群部署实战指南
前言:在当今的分布式系统架构中,消息队列已经成为不可或缺的组件之一。它不仅能够实现服务之间的解耦,还能有效提升系统的可扩展性和可靠性。RabbitMQ 作为一款功能强大且广泛使用的开源消息中间件,凭借其高可用性、灵活的路由策略…...
Node.js技术原理分析系列——如何在Node.js中新增一个内置模块
本文由体验技术团队曹杨毅原创。 Node.js 是一个开源的、跨平台的JavaScript运行时环境,它允许开发者在服务器端运行JavaScript代码。Node.js 是基于Chrome V8引擎构建的,专为高性能、高并发的网络应用而设计,广泛应用于构建服务器端应用程序…...
从低清到4K的魔法:FlashVideo突破高分辨率视频生成计算瓶颈(港大港中文字节)
论文链接:https://arxiv.org/pdf/2502.05179 项目链接:https://github.com/FoundationVision/FlashVideo 亮点直击 提出了 FlashVideo,一种将视频生成解耦为两个目标的方法:提示匹配度和视觉质量。通过在两个阶段分别调整模型规模…...
康耐视CAM-CIC-10MR-10-GC工业相机
康耐视(COGNEX)的工业相机CAM-CIC-10MR-10-GC是CAM-CIC-10MR系列中的一款型号,主要应用于工业自动化检测和高精度视觉系统 基本参数与特性 分辨率与帧率: CAM-CIC-10MR-10-GC属于康耐视CIC系列,具备10MP(1000万像素)的分辨能力,帧率为10fps。该系列相机支持卷帘快门(R…...
解惑Python:一文解决osgeo库安装失败问题
Osgeo(Open Source Geospatial Foundation)是一个支持开源地理空间数据处理的基金会,我们可以在python中使用“osgeo”库来访问其提供的高效地理空间数据。例如,我们使用该模块提供的GDAL处理栅格数据,使用OGR处理矢量…...
3、树莓派5 安装VNC查看器 开启VNC服务器
在前序文章中( 2、树莓派5第一次开机),可以使用三种方式开机,其中使用网线及wifi的方式均需要使用到VNC查看器进行远程桌面控制,本文将介绍如何下载安装并配置及使用VNC查看器及服务器,对前序文章做一些补充…...
Django 创建表时 “__str__ ”方法的使用
在 Django 模型中,__str__ 方法是一个 Python 特殊方法(也称为“魔术方法”),用于定义对象的字符串表示形式。它的作用是控制当对象被转换为字符串时,应该返回什么样的内容。 示例: 我在初学ModelForm时尝…...
STM32 CAN过滤器配置和应用方法介绍
目录 概述 一、CAN过滤器核心概念 二、过滤器配置步骤(以标准ID为例) 三、不同模式的配置示例 四、高级配置技巧 五、调试与问题排查 六、关键计算公式 总结 概述 在STM32微控制器中,CAN过滤器可以配置为标识符屏蔽模式和标识符列表模…...
【第1章:深度学习概览——1.3 深度学习的核心组件与概念解析之神经网络基础】
大家好!今天咱们一头扎进深度学习的神秘领域,好好探索一下其最重要的基石 —— 神经网络。不管你是深度学习的新手小白,还是已经接触过一些基础概念,这篇文章都能助力你更透彻地理解神经网络的原理和运作机制。咱们从最基础的知识入手,一步步揭开神经网络的神秘面纱! 一、…...
Python中如何进行数据库连接?
在 Python 中进行数据库连接,不同的数据库需要使用不同的库。下面分别介绍几种常见数据库(SQLite、MySQL、PostgreSQL)的连接方法。 1. 连接 SQLite 数据库 SQLite 是一种轻量级的嵌入式数据库,Python 标准库中自带了sqlite3模块…...
解析 WebGPU 中 device.createBuffer 的参数意义
在 WebGPU 开发里,device.createBuffer 方法扮演着至关重要的角色,它用于创建一个 GPU 缓冲区对象,这个对象能够存储顶点数据、索引数据、统一数据等。下面我们就来详细剖析该方法各个参数的意义。 1. size:决定缓冲区容量 size …...
PLC的集成RAM,存储器卡,用户程序存储空间,数据存储容量分别指的什么,有什么关联?
1. 集成RAM 定义:集成RAM(随机存取存储器)是PLC内部的高速易失性存储器,用于临时存储运行时的数据(如输入/输出状态、中间变量、计数器/定时器的当前值等)。 特点: 易失性:断电后数…...
BFS-FloodFill 算法 解决最短路问题 多源 解决拓扑排序
文章目录 一、FloodFill 算法[733. 图像渲染](https://leetcode.cn/problems/flood-fill/description/)2.思路3.代码 [200. 岛屿数量](https://leetcode.cn/problems/number-of-islands/description/)2.思路3.代码 [LCR 105. 岛屿的最大面积](https://leetcode.cn/problems/ZL6…...
USB2.03.0接口区分usb top工具使用
一. USB2.0 & 3.0接口支持区分 1.1. 颜色判断 USB接口的颜色并不是判断版本的可靠标准,但根据行业常见规范分析如下: USB接口颜色与版本对照表: 接口颜色常见版本内部触点数量传输速度黑色USB2.04触点480 Mbps (60 MB/s)白色USB2.0(多…...
2025百度快排技术分析:模拟点击与发包算法的背后原理
一晃做SEO已经15年了,2025年还有人问我如何做百度快速排名,我能给出的答案就是:做好内容的前提下,多刷刷吧!百度的SEO排名算法一直是众多SEO从业者研究的重点,模拟算法、点击算法和发包算法是百度快速排名的…...
idea 2019.3常用插件
idea 2019.3常用插件 文档 idea 2019.3常用插件idea 2023.3.7常用插件 idea 2019.3常用插件 插件名称插件版本说明1AceJump3.5.9AceJump允许您快速将插入符号导航到编辑器中可见的任何位置。只需按“ctrl;”,键入一个字符,然后在Ace Jump…...
【Python 学习 / 5】函数详解(定义、参数、作用域、lambda、内置函数)
文章目录 一、函数1. 定义函数1.1 基本函数定义1.2 带参数的函数1.3 带返回值的函数 2. 参数传递2.1 位置参数2.2 默认参数2.3 可变参数2.3.1 使用*args2.3.2 使用**kwargs 2.4 参数的混合使用 3. 作用域3.1 局部和全局变量3.2 global 关键字输出: 3.3 nonlocal关键…...
WPF7-数据绑定基础
1. WPF数据绑定试验 1.1. 数据绑定的核心实现1.2. {Binding}语法1.3. 理解 DataContext 1. WPF数据绑定试验 以下是一个简单的 WPF 数据绑定示例,使用两个TextBox控件分别表示Name和Age来进行进行数据绑定试验。 数据模型类 创建一个 Person 类,包含…...