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

【算法基础】三指针排序算法 - JAVA

一、基础概念

1.1 什么是三指针排序

三指针排序是一种特殊的分区排序算法,通过使用三个指针同时操作数组,将元素按照特定规则进行分类和排序。这种算法在处理包含有限种类值的数组时表现出色,最经典的应用是荷兰国旗问题(Dutch National Flag Problem)。

1.2 三指针排序的基本思想

三指针排序的核心思想是:

  • 使用三个指针将数组划分为若干个区域
  • 通过元素交换,确保每个区域内的元素都满足特定条件
  • 一次遍历完成所有元素的分类排序

1.3 时间复杂度与空间复杂度

  • 时间复杂度:O(n),仅需一次遍历
  • 空间复杂度:O(1),只使用常数级别的额外空间(几个指针变量)

二、三指针排序的分类

2.1 按值分类的三指针排序

这是最常见的三指针排序应用,将数组中的元素按照特定值分为三类:

  • 小于基准值的元素
  • 等于基准值的元素
  • 大于基准值的元素

2.2 多值三指针排序

处理有三种不同元素的数组,如荷兰国旗问题中的红、白、蓝三色:

  • 第一类元素(如0或红色)
  • 第二类元素(如1或白色)
  • 第三类元素(如2或蓝色)

三、三指针排序实现(荷兰国旗问题)

3.1 数据结构设计

三指针排序主要操作简单数组,不需要特殊的数据结构设计,只需要三个指针变量:

int low = 0;        // 指向第一类元素(0)的右边界
int mid = 0;        // 遍历指针,指向当前处理的元素
int high = n - 1;   // 指向第三类元素(2)的左边界

3.2 排序算法实现

public class ThreePointerSort {/*** 三指针排序算法(荷兰国旗问题)* 将数组中的0、1、2三种元素排序*/public void sortColors(int[] nums) {int low = 0;        // 0的右边界int mid = 0;        // 当前处理元素int high = nums.length - 1;  // 2的左边界while (mid <= high) {if (nums[mid] == 0) {// 当前元素为0,将其交换到左侧区域swap(nums, low, mid);low++;mid++;} else if (nums[mid] == 1) {// 当前元素为1,保持位置不变mid++;} else { // nums[mid] == 2// 当前元素为2,将其交换到右侧区域swap(nums, mid, high);high--;// 注意:这里mid不递增,因为交换后的元素需要重新检查}}}/*** 交换数组中两个元素的位置*/private void swap(int[] nums, int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}
}

3.3 实现细节

三个区域划分

  • [0, low-1]:所有等于0的元素
  • [low, mid-1]:所有等于1的元素
  • [mid, high]:待处理的元素
  • [high+1, n-1]:所有等于2的元素

处理逻辑

  • 当前元素为0:将其交换到左侧区域,lowmid都向右移动
  • 当前元素为1:保持位置不变,只移动mid
  • 当前元素为2:将其交换到右侧区域,high向左移动,mid不动(需要重新检查交换后的元素)

终止条件

  • mid > high时,所有元素都已处理完毕

四、执行示例

4.1 示例数组

以数组 [2, 0, 1, 2, 1, 0] 为例:

4.2 执行过程

  1. 初始状态low=0, mid=0, high=5
    • 数组:[2, 0, 1, 2, 1, 0]
  2. 第一步nums[mid]=2
    • 交换 nums[mid]nums[high][0, 0, 1, 2, 1, 2]
    • high=4, mid=0 (不变)
  3. 第二步nums[mid]=0
    • 交换 nums[low]nums[mid][0, 0, 1, 2, 1, 2] (实际未变)
    • low=1, mid=1
  4. 第三步nums[mid]=0
    • 交换 nums[low]nums[mid][0, 0, 1, 2, 1, 2] (实际未变)
    • low=2, mid=2
  5. 第四步nums[mid]=1
    • mid=3
  6. 第五步nums[mid]=2
    • 交换 nums[mid]nums[high][0, 0, 1, 1, 2, 2]
    • high=3, mid=3
  7. 第六步nums[mid]=1
    • mid=4
  8. 第七步mid=4 > high=3算法终止
    • 最终数组:[0, 0, 1, 1, 2, 2]

五、三指针扩展应用

5.1 快速排序的三路划分

三路快排是三指针思想的另一个重要应用:

  • 将数组划分为小于、等于、大于基准值的三个部分
  • 特别适合处理有大量重复元素的数组
  • 可显著提高快排效率
public void quickSort3Way(int[] arr, int low, int high) {if (low >= high) return;// 选择基准值int pivot = arr[low];int lt = low;      // 小于区域右边界int gt = high;     // 大于区域左边界int i = low + 1;   // 当前处理元素while (i <= gt) {if (arr[i] < pivot) {swap(arr, lt++, i++);} else if (arr[i] > pivot) {swap(arr, i, gt--);} else {i++;}}// 递归排序小于和大于部分quickSort3Way(arr, low, lt - 1);quickSort3Way(arr, gt + 1, high);
}

5.2 处理特定数据集的分组

三指针排序可用于将数组按特定规则分为三组,如:

  • 负数、零和正数
  • 奇数、能被3整除的数和其他数
  • 特定范围内的元素、低于和高于范围的元素

5.3 优化特定范围查找

当需要找出数组中属于特定值范围的所有元素时,可使用三指针方法快速划分:

public int[] findElementsInRange(int[] nums, int low, int high) {// 使用三指针划分数组int[] result = new int[nums.length];int count = partitionByRange(nums, low, high);// 复制中间区域元素并返回// ...
}private int partitionByRange(int[] nums, int lowVal, int highVal) {int left = 0;int curr = 0;int right = nums.length - 1;while (curr <= right) {if (nums[curr] < lowVal) {swap(nums, left++, curr++);} else if (nums[curr] > highVal) {swap(nums, curr, right--);} else {curr++;}}return right - left + 1; // 返回范围内元素数量
}

六、完整示例程序

6.1 处理三种颜色的完整实现

public class ThreeColorSort {public static void main(String[] args) {int[] colors = {2, 0, 1, 1, 0, 2, 1, 2, 0, 0, 1, 2};System.out.println("排序前: " + arrayToString(colors));sortColors(colors);System.out.println("排序后: " + arrayToString(colors));}public static void sortColors(int[] nums) {int low = 0;        // 0的右边界int mid = 0;        // 当前处理元素int high = nums.length - 1;  // 2的左边界while (mid <= high) {if (nums[mid] == 0) {swap(nums, low++, mid++);} else if (nums[mid] == 1) {mid++;} else { // nums[mid] == 2swap(nums, mid, high--);}}}private static void swap(int[] nums, int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}private static String arrayToString(int[] arr) {StringBuilder sb = new StringBuilder("[");for (int i = 0; i < arr.length; i++) {sb.append(arr[i]);if (i < arr.length - 1) {sb.append(", ");}}sb.append("]");return sb.toString();}
}

6.2 基于值范围的三路划分

public class ThreeWayPartition {public static void main(String[] args) {int[] arr = {5, 2, 8, 12, 3, 6, 9, 4, 10, 7};int lowVal = 4;int highVal = 8;System.out.println("原数组: " + arrayToString(arr));System.out.println("划分范围: [" + lowVal + ", " + highVal + "]");partitionByRange(arr, lowVal, highVal);System.out.println("划分后: " + arrayToString(arr));}public static void partitionByRange(int[] nums, int lowVal, int highVal) {int left = 0;int curr = 0;int right = nums.length - 1;while (curr <= right) {if (nums[curr] < lowVal) {swap(nums, left++, curr++);} else if (nums[curr] > highVal) {swap(nums, curr, right--);} else {curr++;}}}private static void swap(int[] nums, int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}private static String arrayToString(int[] arr) {StringBuilder sb = new StringBuilder("[");for (int i = 0; i < arr.length; i++) {sb.append(arr[i]);if (i < arr.length - 1) {sb.append(", ");}}sb.append("]");return sb.toString();}
}

七、总结

三指针排序算法是一种高效、简洁的算法,特别适合处理有限种类值的排序问题。

核心要点

  • 一次遍历完成排序
  • 原地操作,不需要额外空间
  • 线性时间复杂度 O(n)
  • 特别适合处理三种不同元素的排序问题

优点

  • 简单易实现
  • 高效(一次遍历)
  • 空间利用率高(原地操作)
  • 稳定性可控

缺点

  • 仅适用于处理有限种类元素的排序
  • 需要明确定义元素的优先级或类别

应用场景

  • 荷兰国旗问题(三色排序)
  • 快速排序的三路划分优化
  • 特定元素分组(如正数、零、负数)
  • 数据预处理和清洗
  • 基于特征值的数据分类

三指针排序是分治思想和指针技术的巧妙结合,体现了算法设计中"简单而高效"的理念。掌握这一技术不仅有助于解决特定问题,更能启发我们思考更广泛的算法设计方法。

相关文章:

【算法基础】三指针排序算法 - JAVA

一、基础概念 1.1 什么是三指针排序 三指针排序是一种特殊的分区排序算法&#xff0c;通过使用三个指针同时操作数组&#xff0c;将元素按照特定规则进行分类和排序。这种算法在处理包含有限种类值的数组时表现出色&#xff0c;最经典的应用是荷兰国旗问题&#xff08;Dutch …...

从实列中学习linux shell9 如何确认 服务器反应迟钝是因为cpu还是 硬盘io 到底是那个程序引起的。cpu负载多高算高

在 Linux 系统中,Load Average(平均负载) 是衡量系统整体压力的关键指标,但它本身没有绝对的“高/低”阈值,需要结合 CPU 核心数 和 其他性能指标 综合分析。以下是具体判断方法: 一、Load Average 的基本含义 定义:Load Average 表示 单位时间内处于可运行状态(R)和不…...

[面试]SoC验证工程师面试常见问题(三)

SoC验证工程师面试常见问题(三) 在 SoC 验证工程师的面试中,面试官可能会要求候选人现场编写 SystemVerilog、UVM (Universal Verification Methodology) 或 SystemC 代码,以评估其编程能力、语言掌握程度以及解决实际验证问题的能力。这种随机抽题写代码的环节通常…...

架构进阶:深入学习企业总体架构规划(Oracle 战略专家培训课件)【附全文阅读】

本文主要讨论了企业总体技术架构规划的重要性与实施建议。针对Oracle战略专家培训课件中的内容&#xff0c;文章强调了行业面临的挑战及现状分析、总体技术架构探讨、SOA集成解决方案讨论与问题解答等方面。文章指出&#xff0c;为了消除信息孤岛、强化应用系统&#xff0c;需要…...

stm32教程:软件I2C通信协议 代码模板提供

早上好啊大伙&#xff0c;这一期也是stm32的基础教学&#xff0c;这一期说的是 —— I2C通信协议。 文章目录 一、I2C协议概述二、物理层特性硬件结构速率模式 三、协议层机制起始与停止信号数据帧结构应答机制时钟同步与仲裁 四、通信协议1. 起始信号&#xff08;START Condit…...

Java零基础入门Day4:数组与二维数组详解

一、为什么需要数组&#xff1f; 当程序需要处理批量同类型数据时&#xff0c;使用多个变量存储会非常繁琐。例如存储70个学生姓名时&#xff0c;需定义70个变量&#xff0c;而数组可以简化这一过程&#xff0c;提高代码可维护性。 示例&#xff1a;变量存储的弊端 String n…...

一条 SQL 查询语句是如何执行的(MySQL)

第一讲&#xff1a;一条 SQL 查询语句是如何执行的 总览图示 MySQL 查询的执行流程可以大致分为以下步骤&#xff08;如图所示&#xff09;&#xff1a; 连接器&#xff08;Connection&#xff09;查询缓存&#xff08;Query Cache&#xff0c;MySQL 8.0 已废弃&#xff09;…...

IntelliJ IDEA

文章目录 一、集成开发环境(IDE, Integrated Development Environment)二、IntelliJ IDEAIDEA 安装 三、IDEA 管理 Java 程序的结构四、IDEA 开发 HelloWorld 程序 一、集成开发环境(IDE, Integrated Development Environment) 把代码编写&#xff0c;编译&#xff0c;执行等多…...

详细说明StandardCopyOption.REPLACE_EXISTING参数的作用和使用方法

StandardCopyOption.REPLACE_EXISTING 是 Java java.nio.file.StandardCopyOption 枚举类中的一个常量&#xff0c;它主要用于在文件复制或移动操作中处理目标文件已存在的情况。下面详细介绍其作用和使用方法。 作用 在使用 java.nio.file.Files 类的 copy() 或 move() 方法时…...

Linux 下使用tcpdump进行网络分析原

简介 tcpdump 是一个命令行数据包分析器&#xff0c;可实时捕获和检查网络流量。它通常用于网络故障排除、性能分析和安全监控。 安装 Debian/Ubuntu sudo apt update && sudo apt install tcpdump -yCentOS/RHEL sudo yum install tcpdump -ymacOS brew install…...

人车交叉作业防撞系统介绍

一、技术原理与核心功能 UWB脉冲测距技术 系统基于UWB技术&#xff0c;通过纳秒级非正弦窄脉冲&#xff08;脉冲宽度0.21.5ns&#xff09;实现实时测距&#xff0c;精度可达1030厘米。 工作原理&#xff1a;人员佩戴防撞标签&#xff08;A&#xff09;与车载基站&#xff08;B&…...

移动端开发中设备、分辨率、浏览器兼容性问题

以下是针对移动端开发中设备、分辨率、浏览器兼容性问题的 系统化解决方案&#xff0c;按开发流程和技术维度拆解&#xff0c;形成可落地的执行步骤&#xff1a; 一、基础环境适配&#xff1a;从「起点」杜绝兼容性隐患 1. Viewport 元标签标准化 <meta name"viewpor…...

Git 基本操作(二)

目录 撤销修改操作 情况一 情况二 情况三 删除文件 升级git 撤销修改操作 在日常编码过程中&#xff0c;有些时候&#xff0c;我们可能写着写着发现目前的版本的代码越写越挫&#xff0c;越不符合标准&#xff0c;想让我们当前的文件去恢复到上一次提交的版本…...

多模态大模型轻量化探索-开源SmolVLM模型架构、数据策略及其衍生物PDF解析模型SmolDocling

在《多模态大模型轻量化探索-视觉大模型SAM的视觉编码器》介绍到&#xff0c;缩小视觉编码器的尺寸&#xff0c;能够有效的降低多模态大模型的参数量。再来看一个整体的工作&#xff0c;从视觉侧和语言模型侧综合考量模型参数量的平衡模式&#xff0c;进一步降低参数量&#xf…...

gRPC学习笔记记录以及整合gin开发

gprc基础 前置环境准备 grpc下载 项目目录下执行 go get google.golang.org/grpclatestProtocol Buffers v3 https://github.com/protocolbuffers/protobuf/releases/download/v3.20.1/protoc-3.20.1-linux-x86_64.zip go语言插件&#xff1a; go install google.golang.…...

Linux diff 命令使用详解

简介 Linux 中的 diff 命令用于逐行比较文件。它以各种格式报告差异&#xff0c;广泛应用于脚本编写、开发和补丁生成。 基础语法 diff [OPTION]... FILES常用选项 -i&#xff1a;忽略大小写 -u&#xff1a;打印输出时不包含任何多余的上下文行 -c&#xff1a;输出不同行周…...

非对称加密算法(RSA、ECC、SM2)——密码学基础

对称加密算法&#xff08;AES、ChaCha20和SM4&#xff09;Python实现——密码学基础(Python出现No module named “Crypto” 解决方案) 这篇的续篇&#xff0c;因此实践部分少些&#xff1b; 文章目录 一、非对称加密算法基础二、RSA算法2.1 RSA原理与数学基础2.2 RSA密钥长度…...

【安装指南】Chat2DB-集成了AI功能的数据库管理工具

一、Chat2DB 的介绍 Chat2DB 是一款开源的、AI 驱动的数据库工具和 SQL 客户端&#xff0c;提供现代化的图形界面&#xff0c;支持 MySQL、Oracle、PostgreSQL、DB2、SQL Server、SQLite、H2、ClickHouse、BigQuery 等多种数据库。它旨在简化数据库管理、SQL 查询编写、报表生…...

【C++】认识map和set

目录 前言&#xff1a; 一&#xff1a;认识map和set 二&#xff1a;map和set的使用 1.set的使用 2.map的使用 三&#xff1a;map的insert方法返回值 四&#xff1a;map的[ ]的使用 五&#xff1a;multiset和multimap 六&#xff1a;map和set的底层数据结构 七&#x…...

LWIP带freeRTOS系统移植笔记

以正点原子学习视频为基础的文章 LWIP带freeRTOS系统移植 准备资料/工程 1、lwIP例程1 lwIP裸机移植 工程 &#xff0c; 作为基础工程 改名为LWIP_freeRTOS_yizhi工程 2、lwIP例程6 lwIP_FreeRTOS移植 工程 3、freeRTO源码 打开https://www.freertos.org/网址下载…...

【MinerU技术原理深度解析】大模型时代的文档解析革命

目录 一、MinerU概述 获取MinerU 二、核心功能与技术亮点 1. 多模态解析能力 2. 高效预处理能力 3. 多场景适配性 4. API服务 三、技术架构解析 3.1 概述 1. 模块化处理流程 2. 关键模型与技术 3.2 核心组件技术原理 3.2.1 布局检测(Layout Detection) 3.2.2 公式…...

rabbitMQ如何确保消息不会丢失

rabbitmq消息丢失的三种情况 生产者将消息发送到RabbitMQ的过程中时&#xff0c;消息丢失。消息发送到RabbitMQ&#xff0c;还未被持久化就丢失了数据。消费者接收到消息&#xff0c;还未处理&#xff0c;比如服务宕机导致消息丢失。 解决方案 生产者发送过程中&#xff0c;…...

数字智慧方案5970丨智慧农业大数据服务建设方案(69页PPT)(文末有下载方式)

详细资料请看本解读文章的最后内容。 资料解读&#xff1a;智慧农业大数据服务建设方案 在当今数字化时代&#xff0c;农业领域也正经历着深刻变革&#xff0c;智慧农业大数据服务建设方案应运而生。这一方案对推动农业现代化进程意义非凡&#xff0c;下面让我们深入剖析其核心…...

英一真题阅读单词笔记 22-23年

2022年真题阅读单词 2022 年 Text 1 第一段 1 complain [kəmˈpleɪn] v. 抱怨&#xff0c;投诉&#xff1b;诉说&#xff08;病痛&#xff09; 2 plastic [ˈplstɪk] n. 塑料&#xff1b;信用卡 a. 造型的&#xff0c;塑造的&#xff1b;塑料制的 3 durable [ˈd…...

Java大师成长计划之第10天:锁与原子操作

&#x1f4e2; 友情提示&#xff1a; 本文由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;平台gpt-4o-mini模型辅助创作完成&#xff0c;旨在提供灵感参考与技术分享&#xff0c;文中关键数据、代码与结论建议通过官方渠道验证。 在多线程编程中&#xff0c;锁与原子…...

2025大模型安全研究十大框架合集(10份)

2025大模型安全研究十大框架合集的详细介绍&#xff1a; Anthropic AI信任研究框架 Anthropic于2024年10月更新的《安全责任扩展政策》(RSP)&#xff0c;提出了一个灵活的动态AI风险治理框架。该框架规定当AI模型达到特定能力时&#xff0c;将自动升级安全措施&#xff0c;如…...

溯因推理思维——AI与思维模型【92】

一、定义 溯因推理思维模型是一种从结果出发,通过分析、推测和验证,寻找导致该结果的可能原因的思维方式。它试图在已知的现象或结果基础上,逆向追溯可能的原因,构建合理的解释框架,以理解事物的本质和内在机制。 二、由来 溯因推理的思想可以追溯到古希腊哲学家亚里士…...

系统架构设计师:设计模式——结构型设计模式

一、结构型设计模式 结构型设计模式涉及如何组合类和对象以获得更大的结构。结构型类模式采用继承机制来组合接口或实现。一个简单的例子是采用多重继承方法将两个以上的类组合成一个类&#xff0c;结果这个类包含了所有父类的性质。 这一模式尤其有助于多个独立开发的类库协…...

接口测试实战指南:从入门到精通的质量保障之道

为什么接口测试如此重要&#xff1f; 在当今快速迭代的软件开发环境中&#xff0c;接口测试已成为质量保障体系中不可或缺的一环。据统计&#xff0c;有效的接口测试可以发现约70%的系统缺陷&#xff0c;同时能将测试效率提升3-5倍。本指南将从实战角度出发&#xff0c;系统性…...

对第三方软件开展安全测评,如何保障其安全使用?

对第三方软件开展安全测评&#xff0c;能够精准找出软件存在的各类安全隐患&#xff0c;进而为软件的安全使用给予保障。此次会从漏洞发现、风险评估、测试环境等多个方面进行具体说明。 漏洞发现情况 在测评过程中&#xff0c;我们借助专业技术与工具&#xff0c;对第三方软…...

计算方法实验四 解线性方程组的间接方法

【实验性质】 综合性实验。 【实验目的】 掌握迭代法求解线性方程组。 【实验内容】 应用雅可比迭代法和Gauss-Sediel迭代法求解下方程组&#xff1a; 【理论基础】 线性方程组的数值解法分直接算法和迭代算法。迭代法将方程组的求解转化为构造一个向量序列&…...

Qt 中基于 QTableView + QSqlTableModel 的分页搜索与数据管理实现

Qt 中基于 QTableView QSqlTableModel 的分页搜索与数据管理实现 一、组件说明 QTableView&#xff1a;一个基于模型的表格视图控件&#xff0c;支持排序、选择、委托自定义。QSqlTableModel&#xff1a;与数据库表直接绑定的模型类&#xff0c;可用于展示和编辑数据库表数据…...

云计算-容器云-服务网格Bookinfo

服务网格&#xff1a;创建 Ingress Gateway 将 Bookinfo 应用部署到 default 命名空间下&#xff0c;请为 Bookinfo 应用创建一个网 关&#xff0c;使外部可以访问 Bookinfo 应用。 上传ServiceMesh.tar.gz包 [rootk8s-master-node1 ~]# tar -zxvf ServiceMesh.tar.gz [rootk…...

PostgreSQL自定义函数

自定义函数 基本语法 //建一个名字为function_name的自定义函数create or replace function function_name() returns data_type as //returns 返回一个data_type数据类型的结果&#xff1b;data_type 是返回的字段的类型&#xff1b;$$ //固定写法......//方法体$$ LANGUAGE …...

学习记录:DAY22

我的重生开发之旅&#xff1a;优化DI容器&#xff0c;git提交规范&#xff0c;AOP处理器&#xff0c;锁与并发安全 前言 我重生了&#xff0c;重生到了五一开始的一天。上一世&#xff0c;我天天摆烂&#xff0c;最后惨遭实习生优化。这一世&#xff0c;我要好好内卷… 今天的…...

HarmonyOS NEXT第一课——HarmonyOS介绍

一、什么是HarmonyOS 万物互联时代应用开发的机遇、挑战和趋势 随着万物互联时代的开启&#xff0c;应用的设备底座将从几十亿手机扩展到数百亿IoT设备。全新的全场景设备体验&#xff0c;正深入改变消费者的使用习惯。 同时应用开发者也面临设备底座从手机单设备到全场景多设…...

数据库系统概论|第五章:数据库完整性—课程笔记1

前言 在前文介绍完数据库标准语言SQL之后&#xff0c;大家已经基本上掌握了关于数据库编程的基本操作&#xff0c;那我们今天将顺承介绍关于数据库完整性的介绍&#xff0c;数据库的完整性是指数据的正确性和相容性。数据的完整性是为了防止数据库中存在不符合语义的数据&…...

开源无人机地面站QGroundControl安卓界面美化与逻辑优化实战

QGroundControl作为开源无人机地面站软件,其安卓客户端界面美化与逻辑优化是提升用户体验的重要工程。 通过Qt框架的界面重构和代码逻辑优化,可以实现视觉升级与性能提升的双重目标。本文将系统讲解QGC安卓客户端的二次开发全流程,包括开发环境搭建、界面视觉升级、多分辨率…...

工作记录 2017-12-12 + 在IIS下发布wordpress

工作记录 2017-12-12 序号 工作 相关人员 1 修改邮件上的问题。 更新RD服务器。 在IIS下发布wordpress。 郝 服务器更新 RD服务器更新了&#xff0c;更新的文件放在190的D:\Temp\CHTeam\fnehr_update_20171212\下了。 数据库更新: 数据库没有更新 更新的文件&#xf…...

BBR 之 ProbeRTT 新改

早在 1981 年&#xff0c;Jaffe 在 Flow Control Power is Nondecentralizable 中就给出过论证&#xff0c;测量 maxbw 必然引入队列&#xff0c;而获得 minrtt 时带宽必然欠载&#xff0c;这确定了后面 30 年的拥塞控制算法基调&#xff0c;但 BBR 在 35 年后非常聪明地在两者…...

[创业之路-354]:农业文明到智能纪元:四次工业革命下的人类迁徙与价值重构

农业文明到智能纪元&#xff1a;四次工业革命下的人类迁徙与价值重构 从游牧到定居&#xff0c;从蒸汽轰鸣到算法洪流&#xff0c;人类文明的每一次跨越都伴随着生产关系的剧烈震荡。四次工业革命的浪潮不仅重塑了物质世界的生产方式&#xff0c;更将人类推向了身份认同与存在…...

敏感词 v0.25.0 新特性之 wordCheck 策略支持用户自定义

开源项目 敏感词核心 https://github.com/houbb/sensitive-word 敏感词控台 https://github.com/houbb/sensitive-word-admin 版本特性 大家好&#xff0c;我是老马。 敏感词一开始了内置了多种检验策略&#xff0c;但是很多用户在使用的过程中希望可以自定义策略。 所以 v0…...

从0到上线,CodeBuddy 如何帮我快速构建旅游 App?

引言 腾讯云AI代码助手之前就改成了CodeBuddy我相信这也是在为后期做准备。那么这篇文章会对CodeBuddy进行比较详细的介绍&#xff0c;并一起来上手实战&#xff0c;感受一下实际开发中这款插件能带给我们多少的便利。本篇文章是一边写一边进行测试&#xff0c;并不是测试完之…...

微信小程序 自定义组件 标签管理

环境 小程序环境&#xff1a; 微信开发者工具&#xff1a;RC 1.06.2503281 win32-x64 基础运行库&#xff1a;3.8.1 概述 基础功能 标签增删改查&#xff1a;支持添加/删除单个标签、批量删除、重置默认标签 数据展示&#xff1a;通过对话框展示结构化数据并支持复制 动…...

从 Eclipse Papyrus / XText 转向.NET —— SCADE MBD技术的演化

从KPN[1]的萌芽开始&#xff0c;到SCADE的推出[2]&#xff0c;再到Scade 6的技术更迭[3]&#xff0c;SCADE 基于模型的开发技术已经历许多。现在&#xff0c;Scade One 已开启全新的探索 —— 从 Eclipse Papyrus / XText 转向.NET 8跨平台应用。 [1]: KPN, Kahn进程网络 (197…...

【学习笔记】机器学习(Machine Learning) | 第五章(2)| 分类与逻辑回归

机器学习&#xff08;Machine Learning&#xff09; 简要声明 基于吴恩达教授(Andrew Ng)课程视频 BiliBili课程资源 文章目录 机器学习&#xff08;Machine Learning&#xff09;简要声明 二、决策边界决策边界的数学表达线性决策边界示例非线性决策边界非线性决策边界的示例…...

python 常用web开发框架及使用示例

Python常用Web开发框架及使用示例 Python拥有丰富的Web开发框架生态系统&#xff0c;以下是主流框架及其使用示例&#xff1a; 一、Flask - 轻量级框架 安装 pip install flask 基础示例 from flask import Flask, request, jsonifyapp Flask(__name__)app.route(/) def…...

[ Qt ] | 第一个Qt程序

1. 创建Qt项目 我们打开Qt Create工具&#xff0c;左上角“文件”&#xff0c;新建文件。 --- --- --- --- 这个是我们的APP“走出国门”的时候&#xff0c;要关注的&#xff0c;这里就不说了。 后面这两个直接默认&#xff0c;下一步就行~~。 2. 项目默认内容 下面就是Qt C…...

react + antd 实现后台管理系统

文章目录 完整路由搭建Layout 和 Aside组件引入 AntdAside组件实现 项目效果图 项目完整代码地址 https://gitee.com/lyh1999/react-back-management 项目完整代码地址 react依赖安装 最好采用yarn 安装 react-router 安装依赖 配置路由 history模式 / // src/router/…...

vue3+ts项目 配置vue-router

安装vue-router pnpm install vue-router配置 1.src/router/index.ts文件下的内容 import type { App } from vue import type { RouteRecordRaw } from vue-router import { createRouter, createWebHistory } from vue-router import remainingRouter from ./modules/remai…...