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

青少年编程与数学 02-016 Python数据结构与算法 15课题、字符串匹配

青少年编程与数学 02-016 Python数据结构与算法 15课题、字符串匹配

  • 一、字符串匹配问题的基本概念
    • (一)定义
    • (二)术语
  • 二、暴力匹配算法(Naive String Matching)
    • (一)算法逻辑
    • (二)示例代码
    • (三)时间复杂度
  • 三、KMP算法(Knuth-Morris-Pratt)
    • (一)算法逻辑
    • (二)部分匹配表的构建
    • (三)示例代码
    • (四)时间复杂度
  • 四、Rabin-Karp算法
    • (一)算法逻辑
    • (二)示例代码
    • (三)时间复杂度
  • 五、Boyer-Moore算法
    • (一)算法逻辑
    • (二)示例代码
    • (三)时间复杂度
  • 总结

课题摘要:
字符串匹配问题是计算机科学中的一个经典问题,它涉及在较长的文本字符串中查找一个较短的模式字符串的所有出现位置。字符串匹配问题在文本编辑器、搜索引擎、生物信息学等领域都有广泛的应用。

关键词:字符串


一、字符串匹配问题的基本概念

(一)定义

  1. 给定两个字符串:文本字符串 ( T ) 和 模式字符串 ( P ),字符串匹配问题的目标是找到模式字符串 ( P ) 在文本字符串 ( T ) 中的所有出现位置。
  2. 例如,文本字符串 ( T = “ababcabcacbab” ),模式字符串 ( P = “abc” ),则 ( P ) 在 ( T ) 中的出现位置为 2 和 4(从0开始计数)。

(二)术语

  1. 文本字符串 ( T ):较长的字符串,长度为 ( n )。
  2. 模式字符串 ( P \):较短的字符串,长度为 ( m )。
  3. 匹配位置:模式字符串 ( P ) 在文本字符串 ( T ) 中出现的起始位置。

二、暴力匹配算法(Naive String Matching)

暴力匹配算法是最直观的字符串匹配方法,它通过逐个比较文本字符串和模式字符串的字符来查找匹配位置。

(一)算法逻辑

  1. 从文本字符串的第 0 个字符开始,逐个比较文本字符串和模式字符串的字符。
  2. 如果当前字符匹配成功,则继续比较下一个字符;如果匹配失败,则将文本字符串的比较位置向右移动一位,重新开始匹配。
  3. 重复上述过程,直到找到所有匹配位置或遍历完整个文本字符串。

(二)示例代码

def naive_string_matching(text, pattern):n = len(text)m = len(pattern)matches = []for i in range(n - m + 1):j = 0while j < m and text[i + j] == pattern[j]:j += 1if j == m:matches.append(i)return matches

(三)时间复杂度

在最坏情况下,暴力匹配算法的时间复杂度为 ( O((n - m + 1) \times m) ),即 ( O(n \times m) )。当文本字符串和模式字符串的长度都较大时,效率较低。

三、KMP算法(Knuth-Morris-Pratt)

KMP算法是一种高效的字符串匹配算法,它通过预处理模式字符串来避免暴力匹配中的重复比较。

(一)算法逻辑

  1. 部分匹配表(Partial Match Table,PMT):KMP算法的核心是部分匹配表,它记录了模式字符串中每个子串的最长公共前后缀长度。
  2. 预处理:根据模式字符串 ( P ) 构建部分匹配表。
  3. 匹配过程:在匹配过程中,当某个字符匹配失败时,根据部分匹配表跳过已经匹配的部分,从而减少不必要的比较。

(二)部分匹配表的构建

部分匹配表的构建过程如下:

  1. 初始化两个指针 ( i ) 和 ( j ),其中 ( i ) 表示当前处理的字符位置,( j ) 表示当前已匹配的最长公共前后缀的长度。
  2. 遍历模式字符串,根据 ( j ) 的值更新部分匹配表。

(三)示例代码

def build_pmt(pattern):m = len(pattern)pmt = [0] * mj = 0for i in range(1, m):while j > 0 and pattern[i] != pattern[j]:j = pmt[j - 1]if pattern[i] == pattern[j]:j += 1pmt[i] = jreturn pmtdef kmp_string_matching(text, pattern):n = len(text)m = len(pattern)pmt = build_pmt(pattern)matches = []j = 0for i in range(n):while j > 0 and text[i] != pattern[j]:j = pmt[j - 1]if text[i] == pattern[j]:j += 1if j == m:matches.append(i - m + 1)j = pmt[j - 1]return matches

(四)时间复杂度

KMP算法的时间复杂度为 ( O(n + m) ),其中 ( n ) 是文本字符串的长度,( m ) 是模式字符串的长度。预处理部分匹配表的时间复杂度为 ( O(m) ),匹配过程的时间复杂度为 ( O(n) )。

四、Rabin-Karp算法

Rabin-Karp算法是一种基于哈希的字符串匹配算法,它通过计算文本字符串和模式字符串的哈希值来快速匹配。

(一)算法逻辑

  1. 哈希函数:选择一个合适的哈希函数,将字符串映射为一个整数值。
  2. 预处理:计算模式字符串的哈希值。
  3. 匹配过程:逐个计算文本字符串中每个子串的哈希值,并与模式字符串的哈希值进行比较。如果哈希值相等,则进一步比较字符串是否完全匹配。

(二)示例代码

def rabin_karp_string_matching(text, pattern):n = len(text)m = len(pattern)matches = []base = 256  # 哈希函数的基数prime = 101  # 一个较大的素数# 计算模式字符串的哈希值pattern_hash = 0for char in pattern:pattern_hash = (pattern_hash * base + ord(char)) % prime# 计算文本字符串中第一个子串的哈希值text_hash = 0for i in range(m):text_hash = (text_hash * base + ord(text[i])) % prime# 如果第一个子串匹配成功if text_hash == pattern_hash and text[:m] == pattern:matches.append(0)# 计算 base^(m-1) % primebase_m1 = 1for _ in range(m - 1):base_m1 = (base_m1 * base) % prime# 逐个计算文本字符串中剩余子串的哈希值for i in range(m, n):text_hash = (text_hash - ord(text[i - m]) * base_m1) % primetext_hash = (text_hash * base + ord(text[i])) % primeif text_hash == pattern_hash and text[i - m + 1:i + 1] == pattern:matches.append(i - m + 1)return matches

(三)时间复杂度

Rabin-Karp算法的平均时间复杂度为 ( O ( n + m ) O(n + m) O(n+m) ),但在最坏情况下(如哈希冲突较多时)时间复杂度可能退化为 ( O ( n × m ) O(n \times m) O(n×m) )。

五、Boyer-Moore算法

Boyer-Moore算法是一种高效的字符串匹配算法,它通过从右向左比较字符来减少不必要的比较。

(一)算法逻辑

  1. 坏字符规则:当某个字符匹配失败时,根据模式字符串中该字符的位置,跳过一定数量的字符。
  2. 好后缀规则:当某个后缀匹配失败时,根据模式字符串中该后缀的位置,跳过一定数量的字符。
  3. 匹配过程:从右向左比较字符,结合坏字符规则和好后缀规则进行跳过。

(二)示例代码

def boyer_moore_string_matching(text, pattern):n = len(text)m = len(pattern)matches = []# 坏字符规则bad_char = {}for i in range(m):bad_char[pattern[i]] = i# 好后缀规则good_suffix = [0] * msuffix = [0] * mfor i in range(m - 1):suffix[i] = m - 1 - ifor i in range(m - 1):j = iwhile j >= 0 and pattern[j] == pattern[m - 1 - i + j]:j -= 1good_suffix[i] = j + 1# 匹配过程i = 0while i <= n - m:j = m - 1while j >= 0 and pattern[j] == text[i + j]:j -= 1if j < 0:matches.append(i)i += m - good_suffix[0]else:bad_char_shift = j - bad_char.get(text[i + j], -1)good_suffix_shift = m - good_suffix[j]i += max(bad_char_shift, good_suffix_shift)return matches

(三)时间复杂度

Boyer-Moore算法的平均时间复杂度为 ( O(n / m) ),在某些情况下可以达到线性时间复杂度 ( O(n) )。然而,在最坏情况下(如模式字符串和文本字符串完全相同)时间复杂度可能退化为 ( O(n \times m) )。

总结

字符串匹配问题在计算机科学中有广泛的应用,常见的字符串匹配算法包括暴力匹配算法、KMP算法、Rabin-Karp算法和Boyer-Moore算法。这些算法各有优缺点,适用于不同的场景:

  1. 暴力匹配算法:实现简单,但效率较低,适用于模式字符串较短的情况。
  2. KMP算法:通过预处理部分匹配表,避免重复比较,效率较高,适用于模式字符串较长的情况。
  3. Rabin-Karp算法:基于哈希的算法,平均情况下效率较高,但存在哈希冲突的问题。
  4. Boyer-Moore算法:通过坏字符规则和好后缀规则,从右向左比较字符,跳过不必要的比较,效率较高,尤其在模式字符串较长且字符集较大时表现良好。

在实际应用中,可以根据具体问题的需求选择合适的字符串匹配算法。

相关文章:

青少年编程与数学 02-016 Python数据结构与算法 15课题、字符串匹配

青少年编程与数学 02-016 Python数据结构与算法 15课题、字符串匹配 一、字符串匹配问题的基本概念&#xff08;一&#xff09;定义&#xff08;二&#xff09;术语 二、暴力匹配算法&#xff08;Naive String Matching&#xff09;&#xff08;一&#xff09;算法逻辑&#xf…...

基础层数据从kafka读取写入hbase的优化方案

背景: 上游kafka的topic只有一个分区,所以spark在消费的时候,无论设置的executor数有多少,最终只有一个executor在执行,如果不指定executor num的话,默认是开启两个executor,有一个executor的资源是浪费的,例如下面显示的情况,其实只有一个executor是active的状态. 在消费的时…...

thingsboard3.9.1编译问题处理

问题1&#xff1a; [ERROR] Failed to execute goal org.thingsboard:gradle-maven-plugin:1.0.12:invoke (default) on project http: Execution default of goal org.thingsboard:gradle-maven-plugin:1.0.12:invoke failed: Plugin org.thingsboard:gradle-maven-plugin:1.…...

Adobe Photoshop 2025 Mac中文 Ps图像编辑

Adobe Photoshop 2025 Mac中文 Ps图像编辑 一、介绍 Adobe Photoshop 2025 Mac版集成了多种强大的图像编辑、处理和创作功能。①强化了Adobe Sensei AI的应用&#xff0c;通过智能抠图、自动修复、图像生成等功能&#xff0c;用户能够快速而精确地编辑图像。②3D编辑和动画功…...

什么是VLA

视觉-语言-动作&#xff08;VLA&#xff09;技术综述&#xff1a;迈向具身智能的未来 1. 引言 随着人工智能从单一模态感知迈向多模态交互&#xff0c;视觉-语言-动作&#xff08;Vision-Language-Action, VLA&#xff09; 技术逐渐成为连接感知、推理与物理行动的核心桥梁。V…...

数据结构:C语言版严蔚敏和解析介绍,附pdf

《数据结构&#xff1a;C语言版&#xff08;第2版&#xff09;》严蔚敏李冬梅吴伟民.pdf 《数据结构&#xff1a;C语言版》严蔚敏&#xff0c;李冬梅.pdf 《数据结构C语言第2版习题解析与实验指导》李冬梅.pdf 「《数据结构&#xff1a;C语言版&#xff08;第2版 &#xff09;》…...

C++线段树详解与实现技巧

📚 C++线段树详解与实现技巧 线段树(Segment Tree)是一种高效处理 区间查询 和 区间更新 的数据结构,时间复杂度为 O(log n)。本文结合代码实例,详解其核心原理与实现细节。 🌳 线段树结构特点 完全二叉树:使用数组存储,父子节点关系通过下标计算。区间划分:每个节…...

202527 | RabbitMQ-基础 | 队列 | Direct + Fanout + Topic 交换机 | 消息转换器

RabbitMQ RabbitMQ 架构与核心概念详解 一、整体架构图 #mermaid-svg-UTlKmvHL7RNWK6vu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-UTlKmvHL7RNWK6vu .error-icon{fill:#552222;}#mermaid-svg-UTlKmvHL7RNWK6v…...

【学习笔记】服务器上使用 nbconvert 将 Jupyter Notebook 转换为 PDF

1. 环境准备&#xff1a;安装必要工具 在服务器终端运行以下命令&#xff0c;确保依赖已安装&#xff1a; (1) 安装 nbconvert 和 pandoc pip install nbconvert pandoc (2) 安装 LaTeX&#xff08;推荐 TeX Live&#xff09; # Ubuntu/Debian sudo apt-get update sudo a…...

List、Set集合通过Stream流求和

目录 一、泛型为Integer、Long、Double、BigDecimal求和 二、泛型为实体类 对单个属性求和 对多个属性分别分组求和 并返回聚合后的对象 多字段乘积求和&#xff08;基本数据类型&#xff09; 多字段乘积求和&#xff08;BigDecimal&#xff09; 对对象中的多个字段求和…...

微软VSCode 能否击败 Cursor 和 Windsurf?

微软是否能利用平台优势和许可限制来阻止竞争对手? AI 代码编辑器之战加剧 蓬勃发展的 AI 代码编辑领域竞争日益激烈,这个最具变革性和盈利性的新技术领域正在适应相互间的竞争。Visual Studio Code 目前是最主导的代码编辑器。 “根据 Stack Overflow 调查,Visual Studi…...

VSCode会击败Cursor和Windsurf吗?

VSCode 会击败 Cursor 和 Windsurf 吗&#xff1f;微软能不能靠自己的地盘优势和规则限制打压对手&#xff1f;答案是"能"&#xff0c;但他们真的会这么干吗&#xff1f; Cursor & Windsurf vs VSCode Copilot 大PKAI编程工具大战越来越激烈现在最火最赚钱的AI…...

机器学习(4)—— K近邻算法

文章目录 1. K近邻算法&#xff08;K-Nearest Neighbors, KNN&#xff09;原理1.1. K近邻算法是什么算法&#xff1f;1.2. 核心思想 2. K近邻算法的步骤2.1. 选择K值2.2. 计算距离2.3. 选择最近邻&#xff1a;2.4. 做出预测&#xff1a; 3. K值的选择4. 数据标准化5. 优缺点6. …...

深入解读 React 纯组件(PureComponent)

什么是纯组件&#xff1f; React 的纯组件(PureComponent)是 React.Component 的一个变体&#xff0c;它通过浅比较(shallow comparison)props 和 state 来自动实现 shouldComponentUpdate() 方法&#xff0c;从而优化性能。 核心特点 1. 自动浅比较&#xff1a; PureCompon…...

常见MQ及类MQ对比:Redis Stream、Redis Pub/Sub、RocketMQ、Kafka 和 RabbitMQ

常见MQ及类MQ对比 基于Grok调研 Redis Stream、Redis Pub/Sub、RocketMQ、Kafka 和 RabbitMQ 关键点&#xff1a; Redis Pub/Sub 适合简单实时消息&#xff0c;但不持久化&#xff0c;消息可能丢失。Redis Stream 提供持久化&#xff0c;适合需要消息历史的场景&#xff0c;但…...

202528 | RabbitMQ-高级 | 消息可靠性 | 业务幂等性 | 延迟消息

消息可靠性 RabbitMQ发送者可靠性 一、发送者重连机制 #mermaid-svg-gqr6Yr5UNZX87ZDU {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-gqr6Yr5UNZX87ZDU .error-icon{fill:#552222;}#mermaid-svg-gqr6Yr5UNZX87ZD…...

Java EE期末总结(第六章)

一、IoC 1、Bean装配流程 IOC装配流程在代码中的对应就体现在Service这个注解 依赖注入在代码中体现在 &#xff0c;比如 Resource UserService userService 二、AOP 简化流程&#xff0c;为程序员简便操作 tmd编不下去了我自己看视频都没理解md不弄了&#xff1b; 给两个…...

ASP.NET Core 性能优化:内存缓存

文章目录 前言一、什么是缓存二、内存缓存三、使用内存缓存1&#xff09;注册内存缓存服务2&#xff09;注入与基本使用3&#xff09;高级用法GetOrCreate&#xff08;避免缓存穿透&#xff09;异步方法&#xff1a;GetOrCreateAsync&#xff08;避免缓存穿透&#xff09;两种过…...

Go小技巧易错点100例(二十六)

本期分享&#xff1a; 1. string转[]byte是否会发生内存拷贝 2. Go程序获取文件的哈希值 正文&#xff1a; string转[]byte是否会发生内存拷贝 在Go语言中&#xff0c;字符串转换为字节数组&#xff08;[]byte&#xff09;确实会发生内存拷贝。这是因为在Go中&#xff0c;字…...

《算法笔记》3.5小节——入门模拟->进制转换

1022 D进制的AB #include <iostream> using namespace std; int maxn32;int main() {int z[maxn],num0,a,b,d;cin>>a>>b>>d;int resab;do{z[num]res%d;resres/d;}while(res);for (int i num-1; i >0 ; i--) {cout<<z[i];}return 0; }问题 A:…...

【MQTT-协议原理】

MQTT-协议原理 ■ MQTT-协议原理■ MQTT-服务器 称为"消息代理"&#xff08;Broker&#xff09;■ MQTT协议中的订阅、主题、会话■ 一、订阅&#xff08;Subscription&#xff09;■ 二、会话&#xff08;Session&#xff09;■ 三、主题名&#xff08;Topic Name&a…...

JWT认证服务与授权 .netCore

1.实现流程图 2.认证信息概述 Header:System.IdentityModel.Tokens.Jwt.JwtHeader Payload: System.IdentityModel.Tokens.Jwt.JwtPayload Issuer: http://localhost:7200 Audience: http://localhost:7200 Expiration: 2025/4/11 15:06:14 Claim - Type: http://schemas…...

编译原理 实验二 词法分析程序自动生成工具实验

文章目录 实验环境的准备实验实验预备知识分析案例所要做的任务实战 实验环境的准备 安装flex 安装MinGW MinGW Installation Manager页面 apply changes 下载比较耗时 只看到了一个文件&#xff0c;复制过去 配置环境变量 使用gcc -v检验是否安装完成 实验 实验预备知识…...

【C++初学】课后作业汇总复习(一)概述、输入输出、类的入门——理解封装

一、概述、输入输出、类的入门——理解封装 - 1. ab input two number output sum of a and b; #include <iostream>using namespace std;int main() {int a 0;int b 0;cin >> a >> b;cout << ab <<endl;return 0; }2.输入1~7任意一个整数&…...

数学建模:针对汽车行驶工况构建思路的延伸应用

前言&#xff1a; 汽车行驶工况构建的思简单理解为将采集的大量数据进行“去除干扰、数据处理&#xff0c;缩减至1800S的数据”&#xff0c;并可达到等效替换的目的&#xff0c;可以使在试验室快速复现&#xff1b;相应的解决思路、办法可应用在 “通过能量流采集设备大量采集…...

Qt 之opengl shader language

着色器示例代码 实际运行效果...

dolphinscheduler创建文件夹显示存储未启用的问题--已解决

只要修改api-server/comf/common.properties和standalone-server/conf/common.properties里面的内容就可以了&#xff0c;应为你要靠standalone-server这个服务启动dolphinscheduler-web&#xff0c;其他就算怎么改你重启dolphinscheduler的时候系统也不会识别新的common.prope…...

解密 Linux 线程:多线程编程与资源管理

个人主页&#xff1a;chian-ocean 文章专栏-Linux 前言&#xff1a; 在Linux中&#xff0c;线程 是一种轻量级的执行单元&#xff0c;它是进程的一部分。多个线程可以在同一个进程内并行执行任务&#xff0c;通常它们共享该进程的资源&#xff0c;如内存空间、文件描述符等。…...

Node.js net模块详解

Node.js 的 net 模块提供了基于 TCP 或 IPC 的网络通信能力&#xff0c;用于创建服务器和客户端。以下是 net 模块的核心 API 详解&#xff0c;包含类、方法、事件及示例。 1. 模块引入 const net require(net);2. 核心类与方法 2.1 net.Server 类 用于创建 TCP 或 IPC 服务…...

Node.js中fs模块详解

Node.js 中 fs 模块&#xff08;非 Promise&#xff09;API 详解 Node.js 的 fs 模块提供了同步和异步的文件系统操作。以下是非 Promise 版本的 API 详解&#xff1a; 1. 文件读取操作 const fs require(fs);// 异步读取文件 fs.readFile(file.txt, utf8, (err, data) >…...

Mouse without Borders – 用一套鼠标 / 键盘控制四台电脑

同时操控 2 台电脑&#xff0c;只需一个鼠标和键盘&#xff01;完全免费&#xff0c;由微软官方提供 | 零度解说_哔哩哔哩_bilibili Mouse Without Borders 简介‌ Mouse Without Borders&#xff08;无界鼠标&#xff09;是由微软开发的免费键鼠共享工具&#xff0c;支持在局…...

《车辆人机工程-汽车驾驶操纵实验》

汽车操纵装置有哪几种&#xff0c;各有什么特点 汽车操纵装置是驾驶员直接控制车辆行驶状态的关键部件&#xff0c;主要包括以下几种&#xff0c;其特点如下&#xff1a; 一、方向盘&#xff08;转向操纵装置&#xff09; 作用&#xff1a;控制车辆行驶方向&#xff0c;通过转…...

使用DaemonSet部署集群守护进程集

使用DaemonSet部署集群守护进程集 文章目录 使用DaemonSet部署集群守护进程集[toc]一、使用DaemonSet部署日志收集守护进程集二、管理DaemonSet部署的集群守护进程集1.对DaemonSet执行滚动更新操作2.对DaemonSet执行回滚操作3.删除DaemonSet 一、使用DaemonSet部署日志收集守护…...

破解升腾c10,改造成下载机(第二篇:获取xterm终端)

当c10刷好华为ct3100系统后&#xff0c;就开始获取xterm终端&#xff0c;然后再安装entware. 第一步&#xff1a;获取xterm终端。 点击桌面左下角的工具图标 再点browser 输入百度网址&#xff0c;访问&#xff01; 然后再将网页另存为&#xff5e;&#xff5e;&#xff5e;…...

浏览器多开

使用浏览器的用户功能&#xff0c;创建多个用户即可完成浏览器多开的需求&#xff0c;插件等相对独立 需要命名 然后就可以通过多个用户切换来实现多开了&#xff0c;不同任务选择不同用户...

使用Python实现的音符生成和节拍器程序

推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 **摘要****先决条件****设置**生成音符频率播放音符节拍器合并结论摘要 节拍器和随机音符生成器各有用途,但单独使用时功能有限。本…...

【生活相关-日语-日本-东京-留学生-搬家后或新入驻-水道局申请饮用水(1)-办理手续】

【生活相关-日语-日本-东京-搬家后-水道局申请饮用水-办理手续】 1、前言2、情况说明&#xff08;1&#xff09;他人代办&#xff08;2&#xff09;打电话&#xff08;3&#xff09;网络申请&#xff08;4&#xff09;你将会面临什么&#xff0c;主要步骤&#xff08;5&#xf…...

PyTorch模型构造实战:从基础到复杂组合

本文通过多个示例演示如何使用PyTorch构建不同类型的神经网络模型&#xff0c;涵盖基础多层感知机、自定义块、顺序块以及复杂组合模型。所有代码均附带输出结果&#xff0c;帮助读者直观理解模型结构。 1. 多层感知机&#xff08;MLP&#xff09; 使用nn.Sequential快速构建一…...

【高性能缓存Redis_中间件】一、快速上手redis缓存中间件

一、铺垫 在当今的软件开发领域&#xff0c;消息队列扮演着至关重要的角色。它能够帮助我们实现系统的异步处理、流量削峰以及系统解耦等功能&#xff0c;从而提升系统的性能和可维护性。Redis 作为一款高性能的键值对数据库&#xff0c;不仅提供了丰富的数据结构&#xff0c;…...

并发编程--互斥锁与读写锁

并发编程–互斥锁与读写锁 文章目录 并发编程--互斥锁与读写锁1. 基本概念2. 互斥锁2.1 基本逻辑2.2 函数接口2.3示例代码12.4示例代码2 3. 读写锁3.1 基本逻辑3.2示例代码 1. 基本概念 互斥与同步是最基本的逻辑概念&#xff1a; 互斥指的是控制两个进度使之互相排斥&#x…...

Linux下Docker安装超详细教程(以CentOS为例)

前言 Docker 已成为现代应用开发和部署的标配工具。本教程将手把手教你 在 CentOS 系统上安装 Docker&#xff0c;涵盖从环境准备到验证安装的全流程&#xff0c;并解决常见问题。无论你是运维工程师还是开发者&#xff0c;均可快速上手。 一、环境要求 操作系统 CentOS 7 或更…...

Ubuntu 服务器版本 设置socket服务(Python)

1. 确定 Socket 类型 Socket 服务可以是: 网络 Socket:基于 TCP/UDP 协议(如 Web 服务器、API 服务)。 Unix Domain Socket:本地进程间通信(如 Docker、MySQL 默认使用)。 2. 编写一个简单的 Socket 服务示例(Python) 以 Python 为例,创建一个 TCP Socket 服务:…...

对于GAI虚假信息对舆论观察分析

摘要 生成式人工智能&#xff08;Generative Artificial Intelligence, GAI&#xff09;的技术革新重构了信息生产机制&#xff0c;但也加剧了虚假信息对舆论生态的异化风险。 关键词&#xff1a;生成式人工智能、虚假信息、舆论异化、智能治理 一、生成式人工智能虚假信息下…...

HTTP:三.HTTP连接

HTTP(Hypertext Transfer Protocol)是一种用于传输超文本数据的应用层协议。它是互联网上最常用的协议,用于在客户端和服务器之间传输数据。HTTP协议通常用于从Web服务器传输网页和文件到客户端浏览器,并支持其他用途,如传输API数据和传输文件。 HTTP连接是指客户端向服务…...

hyper-v server服务器部署远程访问(我目前环境:hyper-v服务器+路由器+公网ip)

Hyper-v server部署(裸金属方式) 系统镜像下载安装# 下载地址:17763.737.190906-2324.rs5_release_svc_refresh_SERVERHYPERCORE_OEM_x64FRE_zh-cn_1.iso 安装的过程很简单,和安装Windows操作系统没啥区别,这里就不记录了。 安装过程可参考:安装Hyper-v Server 2016 部…...

MCP遇见Web3:从边缘计算到去中心化的无限想象

MCP遇见Web3:从边缘计算到去中心化的无限想象 在数字化转型的浪潮中,边缘计算(MCP,Micro Control Protocol)和Web3技术分别在计算效率与去中心化架构上发挥着各自的优势。当两者融合,会碰撞出哪些火花?作为一名技术极客,我最近开始深度研究MCP与Web3工具的集成,试图探…...

【HarmonyOS Next之旅】DevEco Studio使用指南(十三) -> ArkTS/TS代码重构

目录 1 -> Refactor-Extract代码提取 2 -> Refactor-Convert代码转换 3 -> Refactor-Rename代码重命名 4 -> Move File 5 -> Safe Delete 1 -> Refactor-Extract代码提取 在编辑器中支持将函数内、类方法内等区域代码块或表达式&#xff0c;提取为新方…...

STM32 HAL DHT11驱动程序

DHT11驱动程序会占用TIM3定时器&#xff0c;进行高精度延时。程序共包含4个文件 DHT11.c DHT11.h delay.c delay.h DHT11.c #include "stm32f1xx_hal.h" #include "dht11.h" #include "delay.h" // 添加延时头文件 #define DHT_PORT GPIOB…...

asm汇编源代码之文件操作相关

提供7个子程序:   1. 关闭文件 FCLOSE   2. 打开文件 FOPEN   3. 文件大小 FSIZE   4. 读文件 FREAD   5. 写文件 FWRITE   6. 建立文件 FCREATE   7. 读取或设置文件指针 FPOS 具体功能及参数描述如下 ; ---------------------------- FCLOSE PROC  FAR ; IN…...

Github 2025-04-12 Rust开源项目日报Top10

根据Github Trendings的统计,今日(2025-04-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目2uv: 极快的Python软件包安装程序和解析器 创建周期:147 天开发语言:Rust协议类型:Apache License 2.0Star数量:7…...