狄克斯特拉算法
狄克斯特拉算法(Dijkstra’s algorithm)是一种用于在带权图中找到从单一源点到所有其他顶点的最短路径的算法。它适用于处理带有非负权值的图。
下面将详细解释算法的工作原理、时间复杂度以及如何通过优化数据结构来改进其性能。
狄克斯特拉算法的工作原理
-
初始化:算法开始时,将所有顶点标记为未访问。源点到自身的距离设为0,其他所有顶点到源点的距离设为无穷大(表示尚未找到路径)。
-
选择最小距离顶点:在未访问的顶点中,选择一个具有最小距离的顶点,称为当前顶点。
-
松弛操作:对于当前顶点的每一个邻接顶点,执行松弛操作。如果通过当前顶点到邻接顶点的路径比已知的路径更短,则更新该邻接顶点的距离。
-
标记访问:将当前顶点标记为已访问,然后从未访问顶点集合中移除。
-
重复迭代:重复步骤2到4,直到所有顶点都被访问或者找到目标顶点。
时间复杂度分析
-
原始算法:在每次迭代中,算法需要从所有未访问的顶点中选择一个最小距离的顶点,这需要 O(n) 的时间。由于有 n 个顶点,因此总的时间复杂度是 O(n^2)。
-
优化后的算法:通过使用优先队列(如二叉堆或斐波那契堆),算法可以在 O(log n) 的时间内找到最小距离的顶点。更新邻接顶点的距离并将其重新插入优先队列也需要 O(log n) 的时间。因此,对于每个顶点的松弛操作,总时间复杂度是 O(n log n)。由于有 m 条边,每个边可能需要进行一次松弛操作,所以边的松弛操作总时间复杂度是 O(m log n)。综合考虑,优化后的算法时间复杂度是 O((n + m) log n)。
数据结构优化
-
优先队列:使用优先队列可以快速访问最小元素,并且可以在对数时间内插入和删除元素。这是优化狄克斯特拉算法的关键。
-
二叉堆:一种常见的实现优先队列的数据结构,但在最坏情况下,插入和删除操作的时间复杂度为 O(log n)。
-
斐波那契堆:另一种实现优先队列的数据结构,它在平均情况下可以提供更好的性能,特别是在删除最小元素时,平均时间复杂度接近 O(1)。
实际应用中的注意事项
-
图的表示:图可以以邻接矩阵或邻接表的形式表示。邻接矩阵适用于稠密图,而邻接表适用于稀疏图。
-
负权边:狄克斯特拉算法不适用于包含负权边的图。对于这种情况,可以使用贝尔曼-福特算法。
-
算法变体:存在狄克斯特拉算法的变体,如 A* 搜索算法,它使用启发式信息来进一步优化搜索过程。
代码实现
使用数组实现的Dijkstra算法
package mainimport "math"type Graph struct {vertices int // 图中顶点的数量edges [][]int // 存储边权重的邻接表
}// NewGraph 创建一个新的图实例
func NewGraph(v int) *Graph {return &Graph{vertices: v,edges: make([][]int, v),}
}// DijkstraArray 使用数组实现的Dijkstra算法来计算从源顶点到所有其他顶点的最短路径
func (g *Graph) DijkstraArray(src int) []int {dist := make([]int, g.vertices) // 存储从源顶点到每个顶点的最短距离visited := make([]bool, g.vertices) // 记录顶点是否已经被访问过// 初始化距离数组,所有顶点距离设为无穷大for i := range dist {dist[i] = math.MaxInt32}dist[src] = 0 // 源顶点到自身的距离设为0// 找到最短距离的顶点进行迭代更新for count := 0; count < g.vertices-1; count++ {u := g.minDistance(dist, visited) // 从未访问过的顶点中找到距离最小的顶点visited[u] = true // 标记顶点u为已访问// 更新顶点u的邻接顶点的最短距离for v := 0; v < g.vertices; v++ {if !visited[v] && g.edges[u][v] != 0 && dist[u]+g.edges[u][v] < dist[v] {dist[v] = dist[u] + g.edges[u][v]}}}return dist // 返回从源顶点到所有其他顶点的最短距离数组
}// minDistance 辅助函数,找到当前距离数组中距离最小的顶点
func (g *Graph) minDistance(dist []int, visited []bool) int {min := math.MaxInt32minIndex := -1for v := range dist {if !visited[v] && dist[v] <= min {min = dist[v]minIndex = v}}return minIndex
}func main() {g := NewGraph(9)g.edges = [][]int{{0, 4, 0, 0, 0, 0, 0, 8, 0},{4, 0, 8, 0, 0, 0, 0, 11, 0},{0, 8, 0, 7, 0, 4, 0, 0, 2},{0, 0, 7, 0, 9, 14, 0, 0, 0},{0, 0, 0, 9, 0, 10, 0, 0, 0},{0, 0, 4, 14, 10, 0, 2, 0, 0},{0, 0, 0, 0, 0, 2, 0, 1, 6},{8, 11, 0, 0, 0, 0, 1, 0, 7},{0, 0, 2, 0, 0, 0, 6, 7, 0},}distances := g.DijkstraArray(0)println("Shortest distances from source vertex 0:")for i, dist := range distances {println(i, ":", dist)}
}
使用最小堆实现优先级队列的Dijkstra算法
package main import ( "container/heap" "fmt" "math"
) // Item 是优先级队列中的元素,包含顶点和其距离
type Item struct { vertex int // 顶点 dist int // 顶点的当前距离 index int // 顶点在dist数组中的索引(可选,用于更新)
} // PriorityQueue 是优先级队列,基于Item的dist字段排序
type PriorityQueue []*Item func (pq PriorityQueue) Len() int { return len(pq) } func (pq PriorityQueue) Less(i, j int) bool { return pq[i].dist < pq[j].dist
} func (pq PriorityQueue) Swap(i, j int) { pq[i], pq[j] = pq[j], pq[i] pq[i].index = i pq[j].index = j
} func (pq *PriorityQueue) Push(x interface{}) { n := len(*pq) item := x.(*Item) item.index = n *pq = append(*pq, item)
} func (pq *PriorityQueue) Pop() interface{} { old := *pq n := len(old) item := old[n-1] item.index = -1 // for safety *pq = old[0 : n-1] return item
} func (pq *PriorityQueue) update(item *Item, dist int) { item.dist = dist heap.Fix(pq, item.index)
} // Edge 表示图中的一条边
type Edge struct { to int // 目标顶点 weight int // 边的权重
} // Graph 表示整个图结构
type Graph struct { vertices int // 图中顶点的数量 edges [][]*Edge // 存储边的邻接表,使用指针避免复制
} // DijkstraMinHeap 使用最小堆优先级队列的Dijkstra算法
func (g *Graph) DijkstraMinHeap(src int) []int { dist := make([]int, g.vertices) for i := range dist { dist[i] = math.MaxInt32 } dist[src] = 0 pq := make(PriorityQueue, 0) heap.Init(&pq) heap.Push(&pq, &Item{vertex: src, dist: 0}) for pq.Len() > 0 { item := heap.Pop(&pq).(*Item) u := item.vertex for _, edge := range g.edges[u] { v := edge.to alt := dist[u] + edge.weight if alt < dist[v] { dist[v] = alt heap.Push(&pq, &Item{vertex: v, dist: alt}) } } } return dist
} func main() { // 初始化图的边的连接关系 graph := Graph{ vertices: 9, edges: [][]*Edge{ {{to: 1, weight: 4}, {to: 7, weight: 8}}, {{to: 0, weight: 4}, {to: 2, weight: 8}, {to: 7, weight: 11}}, {{to: 1, weight: 8}, {to: 3, weight: 7}, {to: 5, weight: 4}, {to: 8, weight: 2}}, {{to: 2, weight: 7}, {to: 4, weight: 9}, {to: 5, weight: 14}}, {{to: 3, weight: 9}, {to: 5, weight: 10}}, {{to: 2, weight: 4}, {to: 3, weight: 14}, {to: 4, weight: 10}, {to: 6, weight: 2}}, {{to: 5, weight: 2}, {to: 7, weight: 1}, {to: 8, weight: 6}}, {{to: 0, weight: 8}, {to: 1, weight: 11}, {to: 6, weight: 1}, {to: 8, weight: 7}}, {{to: 2, weight: 2}, {to: 6, weight: 6}, {to: 7, weight: 7}}, }, } distances := graph.DijkstraMinHeap(0)fmt.Println("Shortest distances from source vertex 0:")for i, dist := range distances {fmt.Printf("%d: %d\n", i, dist)}
}
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
狄克斯特拉算法
狄克斯特拉算法(Dijkstra’s algorithm)是一种用于在带权图中找到从单一源点到所有其他顶点的最短路径的算法。它适用于处理带有非负权值的图。 下面将详细解释算法的工作原理、时间复杂度以及如何通过优化数据结构来改进其性能。 狄克斯特拉算法的工作…...
![](https://img-blog.csdnimg.cn/direct/b996904cdef04f44aff1abb33484a633.jpeg)
2024推荐整理几个磁力导航网站可提供海量资源的
都2024现在网上找资源像流水得鱼一样,抓一大把结果很难吃,我通宵特意整理的网站,网上有许多磁力导航网站可以提供海量的磁力链接资源,以下是一些有效的磁力导航网站推荐: 磁力搜索 链接: 资源类型&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
链式访问:C语言中的函数调用技巧
链式访问:C语言中的函数调用技巧 在C语言编程中,链式访问(chained calls)是一个常见的编程技巧,它允许你在一行代码中连续调用多个函数或方法。这种技巧不仅能够让代码更加简洁和易读,还能减少临时变量的使…...
![](https://www.ngui.cc/images/no-images.jpg)
数据库设计(实战项目)-1个手机号多用户身份
一. 背景: 该需求是一个互联网医院的预约单场景,护士在小程序上申请患者查房预约单,医生在小程序上对预约单进行接单,护士开始查房后填写查房小结,客户需要对用户信息进行授权,医生查房后进行签字ÿ…...
![](https://i-blog.csdnimg.cn/direct/7eaedef26b134768b5877f949f5c1169.png)
vue+fineReport 使用前端搜索+报表显示数据
--fineReprot 将需要搜索的参数添加到模版参数 sql: --前端传递参数 注:因为每次点击搜索的结果需要不一样,还要传递一个时间戳的参数: let timesamp new Date().getTime()...
![](https://www.ngui.cc/images/no-images.jpg)
高阶面试-存储系统的设计
概述 分类 块存储 block storage文件存储 file storage对象存储 object storage 区别: 块存储 概述 位于最底层,块,是物理存储设备上数据存储的最小单位。硬盘(Hard Disk Drive,HDD)就属于块存储。常见的还有固态硬盘(SSD)、…...
![](https://img-blog.csdnimg.cn/img_convert/da17fdbd845db39aa5548ff640e8c146.png)
柔性测斜仪:土木工程与地质监测的得力助手
在现代土木工程和地质工程领域,精确监测土壤和岩石的位移情况对于确保工程安全至关重要。柔性测斜仪作为一种高精度、稳定性和灵活性兼备的测量设备,已逐渐成为工程师和研究人员的得力助手。本文将深入探讨柔性测斜仪在多个关键领域的应用及其重要性。 点…...
![](https://www.ngui.cc/images/no-images.jpg)
数字资产和数据资产你真的了解吗?
数据作为新型生产要素,是数字化、网络化、智能化的基础,已快速融入生产、分配、流通、消费和社会服务管理等各环节,深刻改变着生产方式、生活方式和社会治理方式。 何为数据资产?即由个人或企业拥有或控制的,能为企业带…...
![](https://img-blog.csdnimg.cn/direct/dce2f17947364053b44296afc0661c59.png)
【每日一练】python运算符
1. 算术运算符 编写一个Python程序,要求用户输入两个数,并执行以下运算:加法、减法、乘法、求余、除法、以及第一个数的第二个数次方。将结果打印出来。 a input("请输入第一个数:") b input("请输入第二个数&…...
![](https://img-blog.csdnimg.cn/direct/1eaf67aa26374b9a94ed9aba3280a483.png)
CesiumJS【Basic】- #032 绘制虚线(Primitive方式)
文章目录 绘制虚线(Primitive方式)1 目标2 代码2.1 main.ts绘制虚线(Primitive方式) 1 目标 使用Primitive方式绘制虚线 2 代码 2.1 main.ts // 定义线条的起点和终点var start = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)...
![](https://img-blog.csdnimg.cn/direct/302c0a534f86495b9023a2374c9e3fba.png)
海尔智家:科技优秀是一种习惯
海尔智家:科技优秀是一种习惯 2024-06-28 15:19代锡海 6月24日,2023年度国家科学技术奖正式揭晓。海尔智家“温湿氧磁多维精准控制家用保鲜电器技术创新与产业化”项目荣获国家科学技术进步奖,成为家电行业唯一牵头获奖企业。 很多人说&…...
![](https://img-blog.csdnimg.cn/direct/b3f5e47c620b4f968487538803f7ccc8.png)
【Android】实现图片和视频混合轮播(无限循环、视频自动播放)
目录 前言一、实现效果二、具体实现1. 导入依赖2. 布局3. Banner基础配置4. Banner无限循环机制5. 轮播适配器6. 视频播放处理7. 完整源码 总结 前言 我们日常的需求基本上都是图片的轮播,而在一些特殊需求,例如用于展览的的数据大屏,又想展…...
![](https://www.ngui.cc/images/no-images.jpg)
VLAN基础
一、什么是Vlan VLAN(Virtual Local Area Network)是虚拟局域网的简称,是一种将单一物理局域网(LAN)在逻辑层面上划分为多个独立的广播域的技术。每个VLAN都是一个独立的广播域,其内部主机可以直接通信&am…...
![](https://img-blog.csdnimg.cn/img_convert/d87a3ecb2fbdcc7d33844c9a7a17b1d5.png)
pytest-yaml-sanmu(五):跳过执行和预期失败
除了手动注册标记之外,pytest 还内置了一些标记可直接使用,每种内置标记都会用例带来不同的特殊效果,本文先介绍 3 种。 1. skip skip 标记通常用于忽略暂时无法执行,或不需要执行的用例。 pytest 在执行用例时,如果…...
![](https://www.ngui.cc/images/no-images.jpg)
linux指令整合(centos系统持续更新中。。。)
1、查询java进程 ps -ef|grep java 2、查询端口占用 lsof -i:端口号 3、 启动java程序 java -jar jar包路径 后台启动 nohup java -jar jar包路径 -Xms512m -Xmx512m > 日志路径 2>&1 & 4、查看服务器资源占用 top 5、关闭进程 kill -9 进程号...
![](https://img-blog.csdnimg.cn/direct/16a6340c84f645efb5b91a7447ebd66a.png)
个人开发实现AI套壳网站快速搭建(Vue+elementUI+SpringBoot)
目录 一、效果展示 二、项目概述 三、手把手快速搭建实现本项目 3.1 前端实现 3.2 后端方向 五、后续开发计划 一、效果展示 默认展示 一般对话展示: 代码对话展示: 二、项目概述 本项目是一个基于Web的智能对话服务平台,通过后端与第…...
![](https://img-blog.csdnimg.cn/direct/7f877b18ec2f42479f81b2914a658720.png)
Cesium与Three相机同步(3)
Cesium与Three融合的案例demo <!DOCTYPE html> <html lang"en" class"dark"><head><meta charset"UTF-8"><link rel"icon" href"/favicon.ico"><meta name"viewport" content&q…...
![](https://www.ngui.cc/images/no-images.jpg)
PMP考试报名项目经历怎么填写?指引请收好
PMP,这一全球公认的项目管理金牌认证,不仅是对项目管理能力的认可,更是职业生涯中的一大助力。然而,在报名PMP时,很多小伙伴都面临一个共同的难题:如何书写项目经验?今天,就让我们一…...
![](https://www.ngui.cc/images/no-images.jpg)
Git的基本使用方法
Git的基本使用方法 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨Git的基本使用方法,Git作为目前最流行的版本控制系统之一&…...
![](https://www.ngui.cc/images/no-images.jpg)
深入剖析 @Autowired 和 @Resource 在 Spring 中的区别
在 Spring 框架中,Autowired 和 Resource 是两个常用的注解,用于实现依赖注入。尽管它们都能达到将依赖对象注入到目标 bean 的目的,但在细节上存在一些显著的差异。本文将深入探讨这两个注解的区别,并结合 Spring 源码进行分析&a…...
![](https://img-blog.csdnimg.cn/img_convert/af778a773c356602e7b9b6081ef46e27.png)
Golang-slice理解
slice golang-slice语雀笔记整理 slicego为何设计slice?引用传递实现扩容机制 go为何设计slice? 切片对标其他语言的动态数组,底层通过数组实现,可以说是对数组的抽象,底层的内存是连续分配的所以效率高,可…...
![](https://img-blog.csdnimg.cn/direct/eec8d53bf1e34b599df7a69e1db053a1.png)
【Linux系统】文件描述符fd
1.回顾一下文件 我们之前对文件的理解是在语言层上,而语言层去理解文件是不可能的!!! 下面是一份c语言文件操作代码!!! #include<stdio.h> int main() {FILE* fd fopen("lo…...
![](https://www.ngui.cc/images/no-images.jpg)
【嵌入式——FreeRTOS】启动任务调度器
【嵌入式——FreeRTOS】启动任务调度器 开启任务调度器vTaskStartScheduler()xPortStartScheduler()prvStartFirstTask()启动第一个任务 开启任务调度器 用于启动任务调度器,任务调度器启动后,FreeRTOS便会开始进行任务调度。 //启动任务,开…...
![](https://www.ngui.cc/images/no-images.jpg)
EFCore_客户端评估与服务端评估
定义 客户端评估: 先将表的所有数据读取至内存,再在内存中对数据进行筛选,数据的筛选工作在客户端服务端评估: 先将代码翻译为SQL语句,再执行SQL语句对数据进行筛选,数据的筛选工作在服务端(默认方式) 如何…...
![](https://img-blog.csdnimg.cn/direct/ad7bfe81622e45bfb1337095fdfe9140.png)
Java面试题--JVM大厂篇之深入了解G1 GC:高并发、响应时间敏感应用的最佳选择
引言: 在现代Java应用的性能优化中,垃圾回收器(GC)的选择至关重要。对于高并发、响应时间敏感的应用而言,G1 GC(Garbage-First Garbage Collector)无疑是一个强大的工具。本文将深入探讨G1 GC适…...
![](https://img-blog.csdnimg.cn/direct/931e3e36e13446008323a13d88b734fb.png)
SAP配置发布WebService接口并调用(超级详细)
文章目录 前言一、案例介绍/笔者需求二、WebService是什么? a.传输协议 b.数据协议 c.WSDL d.UDDI 三、WebService 和 WebApi 的区别以及优缺点 a.主要区别 b.优缺点 四、SAP如何发布一个webser…...
![](https://www.ngui.cc/images/no-images.jpg)
中英双语介绍美国首都:华盛顿哥伦比亚特区(Washington, D.C.)
中文版 华盛顿哥伦比亚特区(Washington, D.C.),简称华盛顿或D.C.,是美国的首都和联邦直辖区。以下是对华盛顿哥伦比亚特区各方面的详细介绍: 人口 截至2020年,美国人口普查数据显示,华盛顿哥…...
![](https://www.ngui.cc/images/no-images.jpg)
java:aocache的单实例缓存(一)
上一篇博客《java:aocache:基于aspectJ实现的方法缓存工具》介绍了aocache的基本使用, 介绍AoCacheable注解时说过,AoCacheable可以定义在构造方法上,定义在构造方法,该构建方法就成了单实例模式。 也就是说,只要构建…...
![](https://img-blog.csdnimg.cn/img_convert/71a47142d9142ee3d4d623b58a01ae1d.png)
pcap包常见拆分方法
文章目录 Wireshark 拆分流量包SplitCap使用简介魔数报错示例结果 在进行流量分析时,经常需要分析pcap流量包。但是体积过大的流量包不容易直接分析,经常需要按照一定的规则把它拆分成小的数据包。 这里统一选择cic数据集里的Thursday-WorkingHours.pcap…...
![](https://img-blog.csdnimg.cn/direct/c336abcff45c47cea0a488f3264fcffa.png)
C++中的类型转换操作符:static_cast reinterpret_cast const_cast dynamic_cast
目录 C语言中的类型转换 C中的类型转换 C中的类型转换操作符 static_cast reinterpret_cast const_cast volatile关键字 赋值兼容 dynamic_cast C语言中的类型转换 基本概念:赋值运算符左右两侧类型不同,或形参与实参类型不匹配…...
![](https://www.ngui.cc/images/no-images.jpg)
MySQL-SQL优化Explain命令以及参数详解
前言 在MySQL优化的众多手段中,EXPLAIN命令扮演着至关重要的角色。它是数据库管理员和开发者手中的利器,用于分析SQL查询的执行计划。通过执行EXPLAIN,MySQL会提供一份详细的查询执行计划报告,这份报告揭示了查询将如何执行&…...
![](https://img-blog.csdnimg.cn/direct/c7a3046e38764e97ae60cd0ea5a88b02.png)
别只会重启了!进来告诉你AP无法上线怎么办
号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 你们好,我的网工朋友。 作为网工,咱们都知道无线网络的重要性,尤其是对于企业网络来说,无线接入点…...
![](https://i-blog.csdnimg.cn/direct/4e730fe090c44976bf52e44180216b85.png)
数据恢复篇:如何在 Android 手机上恢复未保存/删除的 Word 文档
在 Android 手机上访问 Word 文档通常很简单,但是当这些重要文件被删除或未保存时会发生什么?这种情况虽然令人痛苦,但并非毫无希望。到 2024 年,有几种强大的方法来处理此类数据丢失。本指南重点介绍如何在Android手机上恢复已删…...
![](https://img-blog.csdnimg.cn/direct/b58cb062d762436d892213f055786d43.png)
Python | Leetcode Python题解之第208题实现Trie(前缀树)
题目: 题解: class Trie:def __init__(self):self.children [None] * 26self.isEnd Falsedef searchPrefix(self, prefix: str) -> "Trie":node selffor ch in prefix:ch ord(ch) - ord("a")if not node.children[ch]:retur…...
![](https://img-blog.csdnimg.cn/direct/4ed13ce8f5ab49a280f3262909268ef1.png)
Ethernet是以太网通讯
...
![](https://img-blog.csdnimg.cn/img_convert/6e558ab71ae9f466faeddd2e1d187ec3.png)
咖啡消费旺季到来 为何想转让的库迪联营商却越来越多
文 | 智能相对论 作者 | 霖霖 去年还在朝“三年万店”计划狂奔的库迪,今年已出现明显“失速”。 早在今年2月,库迪就官宣其门店数已超过7000家,如今4个多月过去,据极海品牌监测数据显示,截至6月27日,其总…...
![](https://img-blog.csdnimg.cn/75e85eac459d4ce4bc62303bf867abc5.jpg)
神经网络原理
神经网络原理是一种模拟人脑的机器学习技术,通过大量的神经元和层次化的连接进行信息处理和学习。 图1 神经元 神经网络由许多简单的计算单元或“神经元”组成,这些神经元通过连接传递信息。每个连接都有一个权重,用于调整传递的信号强度。这…...
![](https://img-blog.csdnimg.cn/direct/a94943da8d784fbfa7f55e2974626a09.jpeg)
安卓应用开发学习:获取经纬度及地理位置描述信息
前段时间,我在学习鸿蒙应用开发的过程中,在鸿蒙系统的手机上实现了获取经纬度及地理位置描述信息(鸿蒙应用开发学习:手机位置信息进阶,从经纬度数据获取地理位置描述信息)。反而学习时间更长的安卓应用开发…...
![](https://img-blog.csdnimg.cn/img_convert/3968fa658c19f4b35a92ef2d9d6d86db.png)
各类排序方法 手撕快排 回顾经典快排 优化版快排
快排的主要思想是分而治之 第一步,确定分界点,a 第二步,调整区间,利用分界点a,把小于分界点a的数放在左边,大于的放在右边,相等的放在哪都可以 第三步,递归处理左右两段 实现(暴…...
![](https://img-blog.csdnimg.cn/direct/0e3beda5d4514881ab3b9250da14f1c7.jpeg#pic_center)
独一无二的设计模式——单例模式(Java实现)
1. 引言 亲爱的读者们,欢迎来到我们的设计模式专题,今天的讲解的设计模式,还是单例模式哦!上次讲解的单例模式是基于Python实现(独一无二的设计模式——单例模式(python实现))的&am…...
![](https://www.ngui.cc/images/no-images.jpg)
使用MoA(Mixture of Agents)混合智能体技术,结合多个开源大语言模型如Llama3、phi-3和Mistral,实现一个强大的AI智能体
1.简介 论文简介: 论文提出了一种称为混合智能体(Mixture-of-Agents,MoA)的方法,利用多个大语言模型(LLM)的集体智慧来提高自然语言理解和生成任务的性能。 MoA采用了分层结构,每一层包含多个LLM智能体。每个智能体都将前一层所有智能体的输出作为辅助信息来生成自己的回答。通…...
![](https://www.ngui.cc/images/no-images.jpg)
前端面试题_Css
一、说一下Css的盒子模型? HTML中所有元素都可以看成是一个盒子 盒子的组成:content、padding、border、margin 盒子的类型: 标准盒模型:marginborderpaddingcontent -- box-sizing:content-box(默认&a…...
![](https://img-blog.csdnimg.cn/direct/0c17824a4f274ff59d0c16feb1991b8d.png)
AI在线免费视频工具3:声音生视频
1、声音生视频 Noisee:通过声音生成对应视频,可以增加prompt指定生成内容相关视频 https://noisee.ai/create...
![](https://www.ngui.cc/images/no-images.jpg)
final、const、readonly关键字在不同语言中代表着什么
一、Java 1.被final修饰的类不能被继承。 2.被final修饰的方法不能被重写。 被 final 修饰的类中所有的成员方法都会隐式的定义为 final 方法。 若父类中 final 方法的访问权限为 private ,则子类中不能直接继承该方法。此时可以在子类中定义相同方法名的函数&…...
![](https://img-blog.csdnimg.cn/direct/2b0aabb2ff1f4b0b8eb4133ae94484d0.png)
HarmonyOS ArkUi Tabs+TabContent+List实现tab吸顶功能
Demo效果 Entry Component struct StickyNestedScroll {State message: string Hello WorldState arr: number[] []scroller new Scroller()StyleslistCard() {.backgroundColor(Color.White).height(72).width("100%").borderRadius(12)}build() {Scroll(this.sc…...
![](https://img-blog.csdnimg.cn/img_convert/cdbb25770a3c65bbb3f87990fd626d09.png)
Hugging Face Accelerate 两个后端的故事:FSDP 与 DeepSpeed
社区中有两个流行的零冗余优化器 (Zero Redundancy Optimizer,ZeRO)算法实现,一个来自DeepSpeed,另一个来自PyTorch。Hugging FaceAccelerate对这两者都进行了集成并通过接口暴露出来,以供最终用户在训练/微调模型时自主选择其中之…...
![](https://www.ngui.cc/images/no-images.jpg)
TextField是用于在用户界面中输入文本的控件。它广泛应用于表单、搜索框、评论区等需要用户输入文字的场景
TextField是用于在用户界面中输入文本的控件。它广泛应用于表单、搜索框、评论区等需要用户输入文字的场景。以下是对TextField的详细解释,涵盖其各个方面的功能和属性。 基本属性 text 描述:TextField中当前显示的文本。用法:text: "示…...
![](https://img-blog.csdnimg.cn/direct/0c53ade432ae4bbb8a79ca6d0a0912a4.png)
MYSQL 四、mysql进阶 5(InnoDB数据存储结构)
一、数据库的存储结构:页 索引结构给我们提供了高效的索引方式,不过索引信息以及数据记录都是保存在文件上的,确切说时存储在页结构中,另一方面,索引是在存储引擎中实现的,Mysql服务器上的存储引擎负责对表…...
![](https://img-blog.csdnimg.cn/direct/02c652d3cd06460f8a6cf23e476ed41b.png)
Spring企业开发核心框架-下
五、Spring AOP面向切面编程 1、场景设定和问题复现 ①准备AOP项目 项目名:Spring-aop-annotation ②声明接口 /*** - * / 运算的标准接口!*/ public interface Calculator { int add(int i, int j); int sub(int i, int j); int mul(int i, in…...
![](https://img-blog.csdnimg.cn/d486325a90b2427f9142118dff0213b0.png)
X射线底片焊缝缺陷检测
实现四种焊缝缺陷的检测和分割处理。...
![](https://img-blog.csdnimg.cn/direct/be89a01f0d7e4e7b99aee8512f538965.png)
poi-tl 生成 word 文件(插入文字、图片、表格、图表)
文章说明 本篇文章主要通过代码案例的方式,展示 poi-tl 生成 docx 文件的一些常用操作,主要涵盖以下内容 : 插入文本字符(含样式、超链接)插入图片插入表格引入标签(通过可选文字的方式,这种方…...
![](https://www.ngui.cc/images/no-images.jpg)
解析Kotlin中的Nothing【笔记摘要】
1.Nothing的本质 Nothing 的源码很简单: public class Nothing private constructor()可以看到它是个class,但它的构造函数是 private 的,这就导致我们没法创建它的实例,并且在源码里 Kotlin 也没有帮我们创建它的实例。 基于这…...
![](https://img-blog.csdnimg.cn/direct/0cb896c6e047484f989076cef596fea9.png)
c++习题06-ljc的储蓄计划
目录 一,问题 二,思路 1,思路1 2,思路2 三,代码 1,思路1代码 2,思路2代码 四,用例输入输出 一,问题 二,思路 1,思路1 定义变量&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
C++ //练习 14.27 为你的StrBlobPtr类添加递增和递减运算符。
C Primer(第5版) 练习 14.27 练习 14.27 为你的StrBlobPtr类添加递增和递减运算符。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 class StrBlobPtr{public:StrBlobPtr(): curr(0) {}StrBlobPtr(StrB…...
![](https://img-blog.csdnimg.cn/direct/d117c6663b094336ac573b2bbdaebd3b.png#pic_center)
WPF自定义控件,实现含有箭头的文本或内容控件
文章目录 背景效果预览方案设计分析基本布局添加控件自定义属性添加属性值监听获取点数据 全部代码HorizontalLineContent.xamlHorizontalLineContent.xaml.csDirectionAlignment.csContentDirectionAlignment.cs 使用方法 背景 因为项目开发需要,要在WPF上绘制TCP…...
![](https://img-blog.csdnimg.cn/direct/4459e235d9254bf6bcd4978013268866.png#pic_center)
【JavaEE精炼宝库】多线程进阶(2)synchronized原理、JUC类——深度理解多线程编程
一、synchronized 原理 1.1 基本特点: 结合上面的锁策略,我们就可以总结出,synchronized 具有以下特性(只考虑 JDK 1.8): 开始时是乐观锁,如果锁冲突频繁,就转换为悲观锁。 开始是轻量级锁实现ÿ…...
![](https://www.ngui.cc/images/no-images.jpg)
十分火爆!储蓄式国债今日开售!
今年以来,国债深受投资者欢迎,无论是储蓄国债还是超长期特别国债的销售频频上演“日光”“秒空”的场景。今日,2024年第三期和第四期储蓄国债在银行渠道正式开售。券商中国记者今日一早获悉,国债在手机银行渠道的销售十分火爆。记者注意到,工商银行手机APP显示,2024年第三…...
![](https://img-blog.csdnimg.cn/direct/831c93e23df14cb7a64408f00820dc3e.png#pic_center)
深入分析 Android Activity (三)
文章目录 深入分析 Android Activity (三)1. Activity 的配置变化处理1.1 处理配置变化 2. Activity 的存储和恢复状态2.1 保存状态2.2 恢复状态 3. Activity 与 Fragment 的通信3.1 通过接口进行通信3.2 通过 ViewModel 进行通信 4. Activity 的窗口管理和视图层次结构4.1 Dec…...
![](https://img-blog.csdnimg.cn/img_convert/e1111714c35cce26c6b5e7e9363f5b8e.png)
qq音乐sign逆向
qq音乐sign参数逆向 1.概览 参数sign长度40 多次调试发现,前缀zzb不变 2.打日志 跟站发现是vpm,在apply调用打上日志断点: 连蒙带猜知道,最终字符串四部分构成,zzb 24DC2798 HI0TvE4tOMqzN4w88oZCjQ EE0A88FE 1.把…...
![](https://img-blog.csdnimg.cn/img_convert/b8d24f6ea7bcfa1c98466c96e31530c0.jpeg)
新零售收银解决方案:传统门店超市的数字化-亿发
在数字化浪潮的推动下,零售行业正经历着前所未有的变革。阿里巴巴提出的“新零售”概念,不仅仅是一个商业口号,它代表了一种全新的商业模式和运营理念。随着时代的进步和消费需求的不断升级,新零售的兴起已成为行业发展的必然趋势…...
![](https://img-blog.csdnimg.cn/direct/c3cee9cebc734914a3e77eada0888c7e.png)
Unity3D输入事件
文章目录 前言一、全局事件二、射线三、点选3D模型四、点击地面控制人物移动总结 前言 Unity输入事件分为两类,全局触发和监听式触发。全局触发通常是运行在update在每帧进行检测,而监听式触发是被动的输入事件。 一、全局事件 在最新的unity中有新和旧…...
![](https://img-blog.csdnimg.cn/direct/2d7fc3da4517422387cd075daf9f9dfb.png)
Redis 主从搭建简单教程
安装单机 首先拿到安装包 wget https://download.redis.io/releases/redis-7.0.15.tar.gz然后进行解压 tar -zxvf redis-7.0.15.tar.gz 然后创建一个文件夹myredis将原始配置文件进行备份 mkdir /myrediscp redis.conf /myredis/redis7.conf 将配置文件复制进去 最后使用vim编…...