数据结构与算法Python版 骑士周游问题与深度优先搜索
文章目录
- 一、图的应用-骑士周游问题
- 二、图的深度优先搜索
一、图的应用-骑士周游问题
骑士周游问题
- 在一个8×8的国际象棋棋盘上,一个棋子“马”(骑士),按照“马走日”的规则,从一个格子出发,要走遍所有棋盘格恰好一次。把一个这样的走棋序列称为一次“周游”
- 采用图搜索算法,解决骑士周游问题
- 将合法走棋次序表示为一个图
- 采用图搜索算法搜寻一个长度为(行×列-1)的路径,路径上包含每个顶点恰一次
构建骑士周游图
- 将棋盘格作为顶点,按照“马走日”规则的走棋步骤作为连接边。建立每一个棋盘格的所有合法走棋步骤能够到达的棋盘格关系图
- 一个8×8的国际象棋棋盘,行编号从07,列编写从07。整个棋盘从左下角到右上角的编号为0~63。
构建骑士周游图Python实现
def is_legal(x, y, size=8):"""判断坐标(x,y)是否在棋盘上"""if x < 0 or x >= size:return Falseif y < 0 or y >= size:return Falsereturn Truedef get_next_positions(x, y, size=8):"""从当前坐标(x,y)出发,马走日能到达的棋盘位置"""options = [(2, -1), (2, 1), (1, 2), (-1, 2), (-2, 1), (-2, -1), (-1, -2), (1, -2)]next_positions = []for option in options:next_pos = (x + option[0], y + option[1])if is_legal(*next_pos):next_positions.append(next_pos)return next_positionsdef get_node_id(row, col, size=8):"""计算顶点ID"""return row * size + coldef knight_graph(size=8):"""构建骑士周游图"""g = Graph()# 遍历每个格子for row in range(size):for col in range(size):begin_node_id = get_node_id(row, col)for pos in get_next_positions(row, col):end_node_id = get_node_id(pos[0], pos[1])g.add_edge(begin_node_id, end_node_id)return gk_graph = knight_graph()
for i in k_graph.vertexes.values():print(i)
print(f"一共{k_graph.get_edge_count()}条边")### 输出结果
0 connected to : [17, 10]
17 connected to : [32, 34, 27, 11, 2, 0]
10 connected to : [25, 27, 20, 4, 0, 16]
1 connected to : [16, 18, 11]
16 connected to : [33, 26, 10, 1]
18 connected to : [33, 35, 28, 12, 3, 1, 8, 24]
11 connected to : [26, 28, 21, 5, 1, 17]
2 connected to : [17, 19, 12, 8]
19 connected to : [34, 36, 29, 13, 4, 2, 9, 25]
12 connected to : [27, 29, 22, 6, 2, 18]
8 connected to : [25, 18, 2]
3 connected to : [18, 20, 13, 9]
20 connected to : [35, 37, 30, 14, 5, 3, 10, 26]
13 connected to : [28, 30, 23, 7, 3, 19]
9 connected to : [24, 26, 19, 3]
4 connected to : [19, 21, 14, 10]
21 connected to : [36, 38, 31, 15, 6, 4, 11, 27]
14 connected to : [29, 31, 4, 20]
5 connected to : [20, 22, 15, 11]
22 connected to : [37, 39, 7, 5, 12, 28]
15 connected to : [30, 5, 21]
6 connected to : [21, 23, 12]
23 connected to : [38, 6, 13, 29]
7 connected to : [22, 13]
25 connected to : [40, 42, 35, 19, 10, 8]
24 connected to : [41, 34, 18, 9]
26 connected to : [41, 43, 36, 20, 11, 9, 16, 32]
27 connected to : [42, 44, 37, 21, 12, 10, 17, 33]
28 connected to : [43, 45, 38, 22, 13, 11, 18, 34]
29 connected to : [44, 46, 39, 23, 14, 12, 19, 35]
30 connected to : [45, 47, 15, 13, 20, 36]
31 connected to : [46, 14, 21, 37]
33 connected to : [48, 50, 43, 27, 18, 16]
32 connected to : [49, 42, 26, 17]
34 connected to : [49, 51, 44, 28, 19, 17, 24, 40]
35 connected to : [50, 52, 45, 29, 20, 18, 25, 41]
36 connected to : [51, 53, 46, 30, 21, 19, 26, 42]
37 connected to : [52, 54, 47, 31, 22, 20, 27, 43]
38 connected to : [53, 55, 23, 21, 28, 44]
39 connected to : [54, 22, 29, 45]
41 connected to : [56, 58, 51, 35, 26, 24]
40 connected to : [57, 50, 34, 25]
42 connected to : [57, 59, 52, 36, 27, 25, 32, 48]
43 connected to : [58, 60, 53, 37, 28, 26, 33, 49]
44 connected to : [59, 61, 54, 38, 29, 27, 34, 50]
45 connected to : [60, 62, 55, 39, 30, 28, 35, 51]
46 connected to : [61, 63, 31, 29, 36, 52]
47 connected to : [62, 30, 37, 53]
49 connected to : [59, 43, 34, 32]
48 connected to : [58, 42, 33]
50 connected to : [60, 44, 35, 33, 40, 56]
51 connected to : [61, 45, 36, 34, 41, 57]
52 connected to : [62, 46, 37, 35, 42, 58]
53 connected to : [63, 47, 38, 36, 43, 59]
54 connected to : [39, 37, 44, 60]
55 connected to : [38, 45, 61]
57 connected to : [51, 42, 40]
56 connected to : [50, 41]
58 connected to : [52, 43, 41, 48]
59 connected to : [53, 44, 42, 49]
60 connected to : [54, 45, 43, 50]
61 connected to : [55, 46, 44, 51]
62 connected to : [47, 45, 52]
63 connected to : [46, 53]
一共336条边
二、图的深度优先搜索
深度优先搜索(Depth First Search)
- 深度优先搜索是沿着树的单支尽量深入向下搜索,如果到无法继续的程度还未找到问题解,就回溯上一层再搜索下一支
- 深度优先搜索算法实现
- 实现一:用于解决骑士周游问题,其特点是每个顶点仅访问一次
- 实现二:允许顶点被重复访问,更为通用
深度优先搜索-算法过程
- 如果沿着单支深入搜索到无法继续(所有合法移动都已经被走过了)时,路径长度还没有达到预定值(8×8棋盘为63),那么就清除颜色标记,返回到上一层。换一个分支继续深入搜索
- 引入一个栈来记录路径,并实施返回上一层的回溯操作
def knight_tour(n, path, cur: Vertex, limit=63):"""骑士周游算法n:层次;path:路径;cur:当前顶点;limit:搜索总深度"""cur.set_color("gray")path.append(cur)if n < limit:nbr_list = list(cur.get_connections())i = 0done = Falsewhile i < len(nbr_list) and not done:# 选择白色未经过的顶点深入if nbr_list[i].get_color() == "white":done = knight_tour(n + 1, path, nbr_list[i], limit)i += 1# 都无法完成总深度,回溯,试本层下一个顶点if not done:path.pop()cur.set_color("white")else:done = Truereturn done
骑士周游问题-算法改进
- 上述算法的时间复杂度为O(k^n),其中k等于棋盘行大小(例如8),n等于棋盘格数目(例如64)。这是一个指数时间复杂度的算法
- 骑士周游问题改进算法-Warnsdorff算法,修改了遍历下一格的次序,将cur的合法移动目标棋盘格进行排序,具有最少合法移动目标的格子优先搜索
- 启发式规则heuristic:是指采用先验的知识来改进算法性能的做法,启发式规则经常用于人工智能领域,
可以有效地减小搜索范围、更快达到目标。例如上面的Warnsdorff算法,棋类程序算法会预先存入棋谱、布阵口诀、高手习惯等“启发式规则”
def order_by_avail(cur: Vertex):"""排序:具有最少合法移动目标的格子优先即当前顶点cur连接的所有顶点中,按选择连接边数量从少到多排列"""res = []for i in cur.get_connections():if i.get_color() == "white":count = 0for j in i.get_connections():if j.get_color() == "white":count += 1res.append((count, i))res.sort(key=lambda x: x[0])return [x[1] for x in res]def knight_tour_plus(n, path, cur: Vertex, limit=63):"""骑士周游算法n:层次;path:路径;cur:当前顶点;limit:搜索总深度"""cur.set_color("gray")path.append(cur)if n < limit:nbr_list = order_by_avail(cur)i = 0done = Falsewhile i < len(nbr_list) and not done:# 选择白色未经过的顶点深入if nbr_list[i].get_color() == "white":done = knight_tour_plus(n + 1, path, nbr_list[i], limit)i += 1# 都无法完成总深度,回溯,试本层下一个顶点if not done:path.pop()cur.set_color("white")else:done = Truereturn donek_graph = knight_graph()
stack = []
knight_tour_plus(0, stack, k_graph.vertexes[4])
print([x.key for x in stack])### 骑士周游问题其中一个解
[4, 14, 31, 46, 63, 53, 47, 62, 52, 58, 48, 33, 16, 1, 11, 5, 15, 30, 13, 7, 22, 39, 54, 37, 20, 3, 9, 24, 41, 56, 50, 60, 43, 26, 32, 49, 59, 42, 57, 40, 25, 10, 0, 17, 27, 21, 36, 51, 61, 55, 45, 35, 18, 8, 2, 19, 34, 28, 38, 44, 29, 23, 6, 12]
您正在阅读的是《数据结构与算法Python版》专栏!关注不迷路~
相关文章:
数据结构与算法Python版 骑士周游问题与深度优先搜索
文章目录 一、图的应用-骑士周游问题二、图的深度优先搜索 一、图的应用-骑士周游问题 骑士周游问题 在一个88的国际象棋棋盘上,一个棋子“马”(骑士),按照“马走日”的规则,从一个格子出发,要走遍所有棋…...
HIVE数据仓库分层
1:为什么要分层 大多数情况下,我们完成的数据体系却是依赖复杂、层级混乱的。在不知不觉的情况下,我们可能会做出一套表依赖结构混乱,甚至出现循环依赖的数据体系。 我们需要一套行之有效的数据组织和管理方法来让我们的数据体系…...
WOFOST作物模型(3):敏感性分析
目录 一、定义参数范围二、采样生成参数样本三、运行不同参数组下的WOFOST四、计算敏感度与可视化1.敏感度2.二阶交互敏感度五、敏感变量对产量的影响结果可视化一、定义参数范围 使用TAGP(Total Above Ground Production),地上总产量 TSUM1,temperature sum from emergence…...
【2024年-6月-14日-开源社区openEuler实践记录】探索 test - tools:高效测试的开源宝库
开篇引言 大家好,我是 fzr123,在软件开发领域深耕多年,一直致力于探索各种提升效率的工具与技术。今天,我将为大家深入介绍一款在测试领域极具价值的开源项目——test - tools,它为开发者们提供了一系列强大的测试功能…...
go-xorm连接
package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""time""xorm.io/xorm" )func MysqlDbContent() {//数据库基本信息var (userName string "root"password string "12345678"ipAddress string &…...
Java字节分割文件流
使用 Java 通过字节分割大文件并将其以文件流的方式读写的示例代码。这个代码展示了如何将一个大文件分割成多个小文件,并以字节流的方式操作文件。 完整代码示例 import java.io.*;public class FileSplitter {public static void main(String[] args) {// 原始文…...
【潜意识Java】深入详细理解分析Java中的toString()方法重写完整笔记总结,超级详细。
目录 一、toString() 方法是啥? (一)默认的 toString() 方法 (二)toString() 方法的作用 二、为啥要重写 toString() 方法? (一)提高代码的可读性 (二)…...
仙盟系统开发——启动app失败
var 返回 仙盟使者.Cyber_CallApp(VOAPP, 命令, 携带);...
使用ArcGIS Pro自带的Notebook计算多个遥感指数
在之前的分享中,我们介绍了如何使用ArcPy将GEE下载的遥感影像转为单波段文件。基于前面创建的单波段文件,我们可以一次性计算多种遥感指数,例如NDVI、EVI、NDSI等。我这里直接在ArcGIS Pro中自带的Notebook进行的运行。如下图所示,…...
深入Android架构(从线程到AIDL)_认识进程(Process)与IPC架构02
3、 设定IPC通信 -- 使用AndroidManifest.xml文件 在Android框架里,一个应用(程序)套件(Application Package)通常含有多个Java类(Class),这些类可以在同一个进程(Process)里执行;也可以在不同的进程里执行 。通常,一个进程…...
在K8S中,节点状态哪个组件负责上报?
在Kubernetes中,节点状态是kubelet组件负责定期上报的。Kubelet是运行在每个节点上的代理程序,它与Kubernetes Master节点上的控制面板组件紧密协作,以确保节点上的Pod能够正确运行。 kubelet的主要职责之一就是:与Kubernetes API…...
AI 神经网络在智能家居场景中的应用
在科技持续进步的当下,智能家居领域正经历着深刻变革,AI 神经网络技术的融入成为推动这一变革的关键力量,为家居生活带来了诸多显著变化与提升,本文将几种常见的AI算法应用做了一下总结,希望对物联网从业者有所帮助。 …...
C++基础:SGI STL二级空间配置器内存池
2024/12/14-2024/12/ : 这篇稍微写一下阅读SGI STL内存池的收获。 reference: [1] 深度剖析SGI STL二级空间配置器内存池源码 [2] C内存管理:new / delete 和 cookie [3] 侯捷 内存管理 文章目录 一、写在前面二、二级空间配置器解读2.1 从 malloc 和 fr…...
Python简介
Python 是一种高级编程语言,以其简洁易读的语法和强大的功能而广受欢迎。以下是对 Python 的详细简介: python官网:https://www.python.org/ python中文官网:Python中文网 官网 历史与起源: Python 由荷兰人 Guido…...
Linux之ARM(MX6U)裸机篇----7.蜂鸣器实验
一,蜂鸣器模块 封装步骤: ①初始化SNVS_TAMPER这IO复用为GPIO ②设置SNVS_TAMPPER这个IO的电气属性 ③初始化GPIO ④控制GPIO输出高低电平 bsp_beep.c: #include "bsp_beep.h" #include "cc.h"/* BEEP初始化 */ void beep_init…...
手机实时提取SIM卡打电话的信令声音-双卡手机来电如何获取哪一个卡的来电
手机实时提取SIM卡打电话的信令声音 --双卡手机来电如何获取哪一个卡的来电 一、前言 前面的篇章《手机实时提取SIM卡打电话的信令声音-智能拨号器的双SIM卡切换方案》中,我们论述了局域网SIP坐席通过手机外呼出去时,手机中主副卡的呼叫调度策略。 但…...
GPU 进阶笔记(一):高性能 GPU 服务器硬件拓扑与集群组网
记录一些平时接触到的 GPU 知识。由于是笔记而非教程,因此内容不求连贯,有基础的同学可作查漏补缺之用 1 术语与基础 1.1 PCIe 交换芯片1.2 NVLink 定义演进:1/2/3/4 代监控1.3 NVSwitch1.4 NVLink Switch1.5 HBM (High Bandwidth Memory) 由…...
Unresolved plugin: ‘org.apache.maven.plugins:maven-site-plugin:3.12.1‘
问题 使用idea 社区办加载项目提示下面问题: Unresolved plugin: org.apache.maven.plugins:maven-site-plugin:3.12.1 问题解决 maven插件地址: https://maven.apache.org/plugins/maven-dependency-plugin/plugins.html Maven 中央仓库地址&#…...
GO性能优化的一些记录:trace工具的使用
使用场景: 1 想要查看接口延时性偏高 2 深入了解协程具体如何运营的详细信息(运行时长,或者什么原因导致了协程运行受阻) 可以使用 trace 功能,程序便会对下面的一系列事件进行详细记录,并且会依据所搜集到…...
springboot maven 构建 建议使用 --release 21 而不是 -source 21 -target 21,因为它会自动设置系统模块的位置
使用 --release 选项代替 -source 和 -target 是一种更安全、更兼容的方式,特别是在构建使用较新版本 JDK 的项目时。以下是详细解释和建议: 1. 为什么推荐使用 --release 问题点: 使用 -source 和 -target 标志时,仅设置了代码的语言级别和字节码目标版本,但编译器仍可…...
设计模式-创建型-单例模式
1. 单例模式简介 单例模式(Singleton Pattern)是一种常见的创建型设计模式,它确保一个类只有一个实例,并提供全局访问点。在很多情况下,我们只希望某个类在整个应用程序中有一个唯一的实例,且该实例需要在…...
linux 网卡配置
linux网卡可以通过命令和配置文件配置,如果是桌面环境还可以通过图形化界面配置. 1.ifconfig(interfaces config)命令方式 通常需要以root身份登录或使用sudo以便在Linux机器上使用ifconfig工具。依赖于ifconfig命令中使用一些选项属性,ifconfig工具不仅可以被用来…...
python文件操作相关(excel)
python文件操作相关(excel) 1. openpyxl 库openpyxl其他用法创建与删除操作单元格追加数据格式化单元格合并单元格插入图片公式打印设置保护工作表其他功能 2. pandas 库3. xlrd 和 xlwt 库4. xlsxwriter 库5. pyxlsb 库应用场景参考资料 在 Python 中&a…...
利用Abel_Cain软件实现ARP欺骗
ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主…...
搭建android开发环境 android studio
1、环境介绍 在进行安卓开发时,需要掌握java,需要安卓SDK,需要一款编辑器,还需要软件的测试环境(真机或虚拟机)。 早起开发安卓app,使用的是eclipse加安卓SDK,需要自行搭建。 目前开…...
使用 Python -m build打包 Python 项目:详解过程与细节
使用 Python -m build 打包 Python 项目:详解过程与细节 Python 项目的打包是发布和分发软件的核心环节。本文将基于用户提供的 pyproject.toml 文件和项目目录结构,详细说明 Python -m build 命令的执行过程,并解答 是否会将 oe_eval 中的代…...
019-spring-基于aop的事务控制原理
1、事务配置: <tx:annotation-driven transaction-manager"transactionManager"/> transaction-manager 默认是找这个bean:transactionManager 2、从命名空间开始找到对应的解析配置如下: 对应的是这个 后续跟源码没有搞明…...
210.xxl-job定时任务:架构,可视化,GLUE模式,负载均衡,分片
目录 一、为什么要用xxl-job 二、xxl-job架构 三、启动调度中心 1.初始化数据库 2.编译源码 四、启动执行器 五、GLUE模式运行 六、负载均衡 七、分片 1.分片环境准备 2.分片实现 八、感谢支持 一、为什么要用xxl-job 以前我们用quartz实现定时任务,但是那是单机…...
LVS 负载均衡原理 | 配置示例
注:本文为 “ LVS 负载均衡原理 | 配置” 相关文章合辑。 部分内容已过时,可以看看原理实现。 未整理去重。 使用 LVS 实现负载均衡原理及安装配置详解 posted on 2017-02-12 14:35 肖邦 linux 负载均衡集群是 load balance 集群的简写,翻…...
堆内存易碎片化
堆内存容易碎片化主要是由于其内存分配和释放的特性以及管理方式的复杂性所导致的。以下是对堆内存容易碎片化的详细解释: 一、内存分配和释放的非连续性 堆内存的分配和释放并不是连续的,这意味着在多次分配和释放后,原本连续的内存空间可…...
Docker镜像瘦身:从1.43G到22.4MB
Docker镜像瘦身:从1.43G到22.4MB 背景1、创建项目2、构建第一个镜像3、修改基础镜像4、多级构建5、使用Nginx背景 在使用 Docker 时,镜像大小至关重要。我们从 create-react-app (https://reactjs.org/docs/create-a-new-react-app.html)获得的样板项目通常都超过 1.43 GB…...
Linux套接字通信学习
Linux套接字通信 代码源码:https://github.com/say-Hai/TcpSocketLearn/tree/CThreadSocket 在网络通信的时候, 程序猿需要负责的应用层数据的处理(最上层),而底层的数据封装与解封装(如TCP/IP协议栈的功能)通常由操作系统、网络协…...
XIAO Esp32S3制作网络摄像头——音频获取
1、功能介绍 本文主要是基于XIAO Esp32S3(Sense)做的一款网络摄像头,主要包含以下功能 1 音频获取/保存 2 视频获取/视频保存 3 行人检测/火焰检测/行人追踪(告警) 4 指定区域 5 摄像头旋转 。。。 本文主要实现第一步,音频获取,后续会陆续实现后面的功能,敬请期…...
Docker搭建RocketMQ
Docker搭建RocketMQ 操作系统: CentOS 7 x64 版本号: CentOS Linux release 7.9.2009 (Core) IP地址: 192.168.157.130 Docker 信息: Client: Docker Engine - Community Version: 24.0.7 API version: 1.43 Go version: go1.20.10 Git commit: …...
Python 迭代器与生成器
Python 中的迭代器和生成器是处理集合元素的重要工具,它们在处理大量数据时特别有用,因为它们不需要一次性将所有数据加载到内存中。 迭代器(Iterator) 迭代器是一个实现了迭代器协议的对象,这意味着它有两个方法&am…...
细说STM32F407单片机通过IIC读写EEPROM 24C02
目录 一、操作说明 二、工程配置 1、时钟、DEBUG、GPIO、USART6、NVIC、Code Generator 2、 IIC2 (1)Master Features组,主设备参数 (2)Slave Features组,从设备参数 三、软件设计 1、KELED 2、E…...
Redis 深度解析:从入门到精通
引言 Redis 是一个开源的、高性能的键值存储系统,它支持多种数据结构,并且提供了丰富的功能和接口。作为内存数据库,Redis 以其快速的数据访问速度、灵活的数据模型以及持久化选项而闻名。本文将详细介绍 Redis 的核心概念、工作原理及其应用…...
6-pandas数据读取
前言 一、分组聚合 1.groupby使用: groupby() 是 pandas 库中用于对数据进行分组操作的一个非常重要的方法。 import pandas as pddata {城市: [北京, 上海, 广州, 北京, 上海, 广州],人口: [2154, 2424, 1303, 2154, 2424, 1303],年龄: [25, 30, 35, 25, 30, 3…...
omi friend实战记录
一、简介 omi friend是国外githab上开源的一个“AI硬件”的制作教程,它的形状是个三角形,属于项链佩戴这类的。可以接入llm进行对话,他有麦克风、扬声器,还有电池。外形好看,功能实用。还有专属的一系列app可以供方便…...
马原复习笔记
文章目录 前言导论物质实践人类社会资本主义社会主义共产主义后记 前言 一月二号下午四点多考试,很友好,不是早八,哈哈哈。之前豪言壮语和朋友说这次马原要全对,多做了几次测试之后,发现总有一些知识点是自己不知道的…...
VIM: Vision Mamba基于双向状态空间模型的高效视觉表示学习
这篇文章的主要内容可以概括如下: 背景与动机: 近年来,状态空间模型(SSM)在长序列建模中展现出巨大潜力,尤其是Mamba模型在硬件感知设计上的高效性。 然而,现有的SSM模型在处理视觉数据时面临…...
CannotRetrieveUpdates alert in disconnected OCP 4 cluster解决
环境: Red Hat OpenShift Container Platform (RHOCP) 4 问题: Cluster Version Operator 不断发送警报,表示在受限网络/断开连接的 OCP 4 集群中无法接收更新。 在隔离的 OpenShift 4 集群中看到 CannotRetrieveUpdates 警报: …...
libmodbus源码中重要的两个结构体讲解
文章目录 一、libmodbus重要数据结构讲解**1. 结构体 `_modbus`**定义成员解析小结**2. 结构体 `_modbus_backend`**定义成员解析小结**3. 两者关系和工作流程****关系****工作流程**一、libmodbus重要数据结构讲解 这两个结构体是 libmodbus 的核心,定义了 Modbus 通信上下文…...
PostgreSQL的一主两从集群搭建部署 (两同步)
一、实验环境 虚拟机名IP身份简称keep-postgres12-node1192.168.122.87主节点node1keep-postgres12-node2192.168.122.89备节点node2keep-postgres12-node3192.168.122.90备节点node3 二、安装数据库 源码包方式(主) 1、创建用户 [rootkeep-postgre…...
CPT203 Software Engineering 软件工程 Pt.5 软件测试(中英双语)
文章目录 8. 软件测试8.1 Testing(测试)8.1.1 A note of testing under the V & A framework8.1.2 The Basics8.1.3 The Goals8.1.4 The Stages 8.2 Developing testing(开发测试)8.2.1 Unit testing(单元测试&…...
在 Blazor 和 ASP.NET Core 中使用依赖注入和Scoped 服务实现数据共享方法详解
依赖注入(Dependency Injection,简称 DI)是一种设计模式,用于将对象的依赖关系从对象内部解耦出来,由外部容器进行管理和提供。在 Blazor 和 ASP.NET Core 中,DI 是内置的核心功能,它通过服务生…...
【信号滤波 (下)】采样条件,多种滤波算法对比(Matlab/C++)
目录 一、信号采样条件采样定理ADC的SPS设置 二、常用滤波算法对比A.滑动平均滤波B.陷波滤波陷波滤波器简介FIR(有限脉冲响应)滤波器和IIR(无限脉冲响应)滤波器 基于IIR实现陷波滤波滤波原理讲解双二阶滤波器计算过程陷波滤波优势 在上一篇中,介绍了信号时域到频域的…...
将广播发送和接收端实现一遍,完成一个发送端发送信息,对应多个接收端接收信息实验。
1、将广播发送和接收端实现一遍,完成一个发送端发送信息,对应多个接收端接收信息实验。 接受端 #include<myhead.h> #define handel_err(res,val) if(val-1){perror(res);return-1;} int main(int argc, const char *argv[]) {int rfdsocket(AF_…...
Nginx 负载均衡详解
一、Nginx 简介 Nginx 是一个高性能的开源 Web 服务器和反向代理服务器,以其轻量级、高并发、低内存消耗等特点著称。Nginx 不仅适用于静态资源的快速分发,还广泛应用于负载均衡、反向代理等场景。通过Nginx,可以轻松地构建一个高效、可靠且…...
自动驾驶新纪元:城区NOA功能如何成为智能驾驶技术的分水岭
目录 一、NOA 的定义 二、NOA 的主要特点 导航集成 场景覆盖 智能决策 高级感知能力 驾驶员参与 三、NOA 的优势 四、NOA的衡量指标 定性评价指标 安全性评价指标定义 可靠性评价指标定义 舒适性评价指标定义 通行效率评价指标 定量评价指标 五、代表厂商的实测…...