学习 严蔚敏讲数据结构笔记15

数据结构:最小生成树--Prim算法 最小生成树 给定一无向带权图,顶点数是n,要使图连通只需n-1条边,若这n-1条边的权值和最小,则称有这n个顶点和n-1条边构成了图的最小生成树(minimum-cost spanning tree)。 Prim算法 Prim算法是解决最小生成树的常用算法。它采取贪心策略,从指定的顶点开始寻找最小权值的邻接点。图G=<V,E>,初始时S={V0},把与V0相邻接,且边的权值最小的顶点加入到S。不断地把S中的顶点与V-S中顶点的最小权值边加入,直到所有顶点都已加入到S中。 阅读详情

广度优先搜索遍历图

从图中的某个顶点V0出发,并在访问此顶点之后依次访问V0的所有未被访问的邻接点,之后按这些顶点被访问的先后次序依次访问它们的邻接点,直至图中所有和V0有路径相通的顶点都被访问到。若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作为起始点,重复上述过程,直至图中所有顶点都被访问到为止。

26_002

void BFSTraverse(Graph G, Status(*  Visit)(int v))

{

         for(v  = 0; v < G.vexnum; ++ v)

         {

                   visited[v]  = FALSE;

         }

         InitQueue(Q);  //置空的辅助队列Q

         for(v  = 0; v < G.vexnum; ++ v)

         {

                   if(!  visited[v])

                   {

                            //v尚未访问

                            EnQueue(Q,  v); //v入队列

                            visited[u]  = TRUE;

                            Visti(u);  //访问u

                            while(!  QueueEmpty(Q))

                            {

                                     DeQueue(Q,  u); //对头元素的出队并置u

                                     //访问u

                                     for(w  = FirstAdjVex(G, u); w != 0; w = NextAdjVex(G, u, w))

                                     {

                                               if(!  visited[w])

                                               {

                                                        EnQueue(Q,  w);

                                                        visited[w]  = TRUE;

                                                        Visit(w);

                                               }

                                               //u的尚未访问的邻接顶点w入队列Q

                                     }

                            };

                   }

         }

}//BFSTraverse

 

遍历的简单应用

1.      求一条从顶点i到顶点s的简单路径

27_001

void DFSearch(int v, int s, char *PATH)

{

         //从第v个顶点出发递归地深度优先遍历图G

         //求得一条从v到s的简单路径,并记录在PATH中

         visited[v]  = TRUE; //访问第v个顶点

         Append(PATH,  getVertex(v));

         for(w  = FirstAdjVex(v); w != 0 && !found; w = NextAdjVex(v))

         {

                   if(w  = s)

                   {

                            found  = TRUE;

                            Append(PATH,  W);

                   }

                   else

                   {

                            if(!  visited[w])

                            {

                                               DFSearch(w,  LP);

                            }

                   }

                   if(!  found)

                   {

                            Delete(PATH);

                   }

         }

}

2.      求两个顶点之间的一条路径长度最短的路径

基于广度优先搜索遍历,并修改链队列的结点结构及其入队列和出队列的算法。

1)  将链队列的结点改为“双链”结点,即结点中包含next和priou两个指针;

2)  修改入队列的操作,插入新的的队尾结点时,令其priou域的指针指向刚刚出队列的结点,即当前的对头指针所指结点;

3)  修改出队列的操作,出队列时,仅移动对头指针,而不将对头结点从链表中删除。

27_003

typedef DuLinkList QueuePtr;

void InitQueue(LinkQueue &Q)

{

         Q.front  = Q.rear = (QueuePtr) malloc (sizeof(QNode));

         Q.front->next  = Q.rear->next = NULL;

}

 

void EnQueue(LinkQueue &Q, QelemType  e)

{

         p  = (QueuePtr) malloc(sizeof(QNode));

         p->data  = e;

         p->next  = NULL;

         p->priou  = Q.front;

         Q.rear->next  = p;

         Q.rear  = p;

}

 

void DeQueue(LinkQueue &Q, QelemType  &e)

{

         Q.front  = Q.front->next;

         e  = Q.front->data;

}

 

7.4 最小生成树

问题:假设要在n个城市之间建立通讯网络,则连同n个城市只需要修n-1条线路,如何在最节省经费的前提下建立这个通讯网?

该问题等价于:构造网的一棵最小生成树,即:在e条带权的边中选取n-1条(不构成回路),使“权值之和“为最小。

算法一:(普里姆算法)

可取图中任意一个顶点v作为生成树的根,之后若要网生成树上添加顶点w,则在顶点v和顶点w之间必定存在一条边,并且该边的权值在所有连同顶点v和w之间的边中取最小值。

一般情况下,假设n个顶点分成两个集合:U(包含已落在生成树上的结点)和V-U(尚未落在生成树上的顶点),则在所有连通U中顶点和V-U中顶点的边中选取权值最小的边。

记录从顶点集U到V-U的代价最小的边的辅助数组:

27_004

struct

{

         VertexType  adjvex;

         VRTyped  lowcost;

}closedge[MAX_VERTEX_NUM];

k = LocateVex(G, u);

for(j = 0; j < G.vexnum; ++ j)

{

         //辅助数组初始化

         if(j  != k)

         {

                   closedge[j]  = (u, G.arcs[k][j].adj);

         }

         closeedge[k].lowcoset  = 0; //初始,U-(u)

         for(j  = 0; i < G.vexnum; ++ i)

         {

                   //在其余顶点中选择

                   k  = minimum(closedge); //求出T的一个小节点(k)

                   printf(colsedge[k].adjvex,  G.vexs[k]);

                   closedge[k].lowcost  = 0; //第k顶点并入U集

                   for(j  = 0; j < G.vexnum; ++ j)

                   {

                            if(G.arcs[k][j].adj  < closedge[j].lowcost)

                            {

                                     closedge[j]  = (G.vexs[k], G.arcs[k][j].adj);

                            }

                   }

         }

}

算法二:(克鲁斯卡尔算法)

为使生成树上边的权值之和最小,显然,其中每一台边的权值应该尽可能地小。克鲁斯卡尔算法的做法吉局势:先构造一个只含有n个顶点的子图SG,然后从权值最小的边喀什,若它的添加不使SG中产生回路,则在SG上加上这条边,如此重复,直至加上n-1条边为止。

算法:

构造非连通图ST=(V,{});k=i=0; while(k<n-1){++I; 从边集E中选取第i条权值最小的边(u,v);若(u,v)加入ST后不会使ST中产生回路,则输出边(u,v);且k++;}

由于普里姆算法的时间复杂度为O(n2),则适用于稠密图;而克鲁斯卡尔算法则需对e条边按权值进行排序,其时间复杂度为O(eloge),则适用域稀疏图。

 

7.5重(双)连通图和关节点

问题:若从一个连通图中删去任何一个顶点及其相关联的边,它仍为一个连通图的话,则该连通图被称为重(双)连通图。

若连通图中的某个顶点和其相关联的边被删去之后,该连通图被分割成两个或两个以上的连同分量,则称此顶点为关节点。

没有关节点的连通图为双连通图。

 

关节点的特征:

假设从某个顶点V0出发对连通图进行深度优先搜索遍历,则可得到一棵深度优先生成树,树上包含图的所有顶点。

若生成树的根结点,有两个或两个以上的分支,则此顶点(生成树的根)必为关节点;

对生成树上的任意一个“顶点”,若其某棵子树的跟或子树中的其它“顶点”没有和其祖先相通的回边,则该“顶点”必为关节点。

1)      设V0为深度优先遍历的出发点

28_001

p = G.vertices[0].firstarc;

v = p->adjvex;

DFSArticul(G, v); //从第v顶点出发深度优先搜素

if(count < G.vexnum)

{

         //生成树的根至少有两棵子树

         printf(0,  G.vertices[0].data);//根是关节点

}

2)      对生成树上的顶点定义一个函数

29_002

low(v)=Min{visited[v], low[w], visted[k]}

对顶点v,若(在生成树上)存在一个子树根w,且low[w]>=visited[v]则顶点v为关节点。

对深度优先遍历算法作如下修改:

1.      visited[v]的值改为遍历过程中顶点的访问次序count值

2.      遍历过程中求得low[v]=Min{visited[v],low[w],visited[k]}

3.      从子树遍历返回时,判别low[w]>=visited[v]?

29_003

min = visited[v0] = ++count; //设定low[v0]的初始值count计顶点访问次序

for(p = G.vertices[v0].firstarc; p;  p=p->nextarc)

{

         w  = p->adjvex; //w为v0的邻接顶点

         if(visited[w]  == 0)

         {

                   //w未曾访问

                   DFSArticul(G,  w); //返回前求得low[w]

                   if(low[w]  < min)

                   {

                            min  = low[w];

                            if(low[w]  >= visited[v0])

                            {

                                     printf(v0,  G.vertices[v0].data); //输出关节点

                            }

                   }

         }

         else

         {

                   //w是回边上的顶点

                   if(visited[w]  < min)

                   {

                            min  = visited[w];

                   }

         }

         low[v0]  = min;

}

CodeX+Ollama+Coze组合实战:从本地模型到多智能体协作 大模型应用正从单点问答走向系统化协作,多智能体(Multi-Agent)成为企业落地的关键方向。理解其核心,在于掌握模型部署、工具调用与流程编排的基本原理:Ollama在本地提供私有化推理服务,CodeX将大模型能力注入终端编码场景,Coze则以可视化工作流串联多个智能化节点。三者组合覆盖了从数据安全、研发效能到业务自动化的典型需求。通过环境搭建、配置要点和正反博弈裁判等实战示例,展示了如何将“本地推理+终端Agent+云端编排”这一模式落地。无论是探索多智能体应用,还是构建企业级智能体平台,这套方案都提供 阅读详情

相关推荐

收藏 《数据结构(C语言版)视频全集》—清华大学严蔚敏主讲

eMule资源 下面是用户共享的文件列表,安装eMule后,您可以点击这些文件名进行下载 数据结构(清华严蔚敏)_数据结构01.asf 详情 55.4MB 数据结构(清华严

Mobidogs Blog 1万+

7.2 图-遍历及简单应用

图-遍历及最小生成树1 图的遍历1.1 深度优先搜索(Depth First Search)1.2 广度优先搜索(Breadth First Search)2 最小生成树 1 图的遍历 从图中某个顶点出发游历图,访遍图中其余顶点,并且使图中的每个顶点仅被访问一次的过程。 1.1 深度优先搜索(Depth First Search) 深度优先搜索(Depth First Search)遍历类似于树的先根遍历,是树的先根遍历的推广。 从图中某个顶点 V0V_{0}V0​ 出发,访问此顶点,然后依次从 V0V_

michael_linux的博客,一个小小小学生。滴水穿石,步步为营,只为那刹那芳华。 2418

严蔚敏数据结构C语言版教材精讲考研真题串讲视频

本课程是严蔚敏《数据结构》(C语言版)网授精讲班,为了帮助参加研究生招生考试指定考研参考书目为严蔚敏《数据结构》(C语言版)的考生复习专业课,我们根据教材和名校考研真题的命题规律精心讲解教材章节内容。

ldingxxw的博客 769

最小生成树(Prim算法)代码实现

最小生成树(Prim算法)代码实现

ml29895063的博客 4066

数据结构题集(严蔚敏版)题目——第二章 线性表

数据结构题集(严蔚敏版)题目——第二章 线性表题目选作。

CocoaChen 2716

数据结构c语言版严蔚敏第二版课后答案

数据结构c语言版第二版课后答案严蔚敏 1.自学编程,难免思路阻塞,收集更新了严蔚敏,吴伟民版《数据结构-C语言版》各章节的课本源码和配套习题集答案解析,目的是为了整理数据结构中的知识点,并与网友交流意见,集思广益,共同进步。这里是所有的源码和课后习题实现目录: 这些源码和答案还有 数据结构 严蔚敏(c语言)第二版PDF书籍 下载地址在文章最下方: 02.本源码与解析涵盖了《数据结构》课本和习题集...

bookanddream的博客 1万+

求一条从顶点i到顶点s的简单路径_最短路径问题:Dijkstra算法

定义所谓最短路径问题是指:如果从图中某一顶点(源点)到达另一顶点(终点)的路径可能不止一条,如何找到一条路径使得沿此路径上各边的权值总和(称为路径长度)达到最小。下面我们介绍两种比较常用的求最短路径算法:Dijkstra(迪杰斯特拉)算法他的算法思想是按路径长度递增的次序一步一步并入来求取,是贪心算法的一个应用,用来解决单源点到其余顶点的最短路径问题。算法思想首先,我们引入一个辅助向量D,它的每个...

weixin_39719165的博客 733

树和二叉树-第6章-《数据结构题集》习题解析-严蔚敏吴伟民版

习题集解析部分 第6章 树和二叉树 ——《数据结构题集》-严蔚敏.吴伟民版        源码使用说明  链接☛☛☛ 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接☛☛☛ 《数据结构》课本源码合辑        习题集全解析  链接☛☛☛ 《数据结构题集》习题解析合辑         相关测试数据下载  链接☛ 数据包  ...

weixin_33859844的博客 1万+

2021-10-16【严蔚敏数据结构代码实现合集】【c语言学习必备】

线性表 2021-9-14【数据结构/严蔚敏】【顺序表】【代码实现算法2.1-2.7】 2021-9-18【数据结构/严蔚敏】【单链表】【代码实现算法2.8-2.12】 2021-9-18【数据结构/严蔚敏】【静态链表】【代码实现算法2.13-2.17】 2021-9-19【数据结构/严蔚敏】【双向链表】【代码实现算法2.18-2.19】 2021-9-19【数据结构/严蔚敏】【带头结点的线性表】【代码实现算法2.20-2.21】 2021-9-19【数据结构/严蔚敏】【一元多项式的表示及相加、相减、相乘

eternity_memory的博客 1万+

数据结构一小时复习(严蔚敏版)

基础基础! 一、绪论 1。数据结构是计算机程序设计的重要理论技术基础。为了编写一个好的程序,九须分析待处理的对象的特性以及各处理对象之间存在的关系。2。计算机解决具体问题的步骤:从具体问题抽象数学模型,设计一个解模型的算法,编程,测试,调整达标。3。数据结构是介于数学,计算机硬件,计算机软件三者之间的一门核心课程。4。数据是对客观事物的符号表示,所有能输入到计算机中并被告计算机程序处理的符号总称。

lryl1218的专栏 2274

智能电网中的智能调度与优化算法研究

本文研究智能电网中的智能调度与优化算法,旨在提高电网运行的效率与可靠性,减少能源浪费和设备故障的风险。在智能电网日益复杂化的背景下,传统的调度方法已难以满足高效、稳定的运行要求,因此亟需借助先进的优化算法对电网进行智能调度。本文第一深入分析智能电网调度中的关键问题与挑战,探讨优化算法在智能电网中的应用现状,并分析常见的优化算法,如遗传算法、粒子群算法和模拟退火算法。随后,本文构建智能电网的调度优化数学模型,并对电网负荷、发电模型及约束条件进行详细建模。在算法部分,本文提出改进的粒子群算法和遗传算法,并结合M

weixin_44553616的博客 1889

c语言数据结构,清华大学严蔚敏老师讲的数据结构

 刚开始学程序设计的时候就是看的严蔚敏老师的教程,虽然老了点,不过内容是真的不错. 计算机视频教程系列—数据结构教程—清华严蔚敏主讲.01    计算机视频教程系列—数据结构教程—清华严蔚敏主讲.02    计算机视频教程系列—数据结构教程—清华严蔚敏主讲.03    计算机视频教程系列—数

bluesft的专栏 1321

CocosCreator3.8实战指南:动态字体与位图字体性能优化技巧

本文深入解析CocosCreator3.8中系统字体、动态字体(TTF)与位图字体(FNT)的核心差异与性能表现。针对动态字体运行时解析开销大、内存占用高的痛点,提供了字体子集化、共享资源等优化技巧;同时详细介绍了位图字体制作流程及其在渲染速度、内存可控性上的绝对优势,并给出跨平台场景下的字体选型与优化策略,帮助开发者有效提升游戏性能。

weixin_29006701的博客 563

【计算机】数据结构-严蔚敏/清华大学(完)

【计算机】数据结构-严蔚敏/清华大学(完) 来源链接:点击查看bilibili【计算机】数据结构-严蔚敏/清华大学(完) 已整理完成 数据结构(清华严巍敏)01 数据结构(清华严巍敏)02 数据结构(清华严巍敏)03 数据结构(清华严巍敏)04 数据结构(清华严巍敏)05 数据结构(清华严巍敏)06 数据结构(清华严巍敏)07 数据结构(清华严巍敏)08 数据结构(清华严巍敏)09 数据结构(清华严巍敏)10 数据结构(清华严巍敏)11 数据结构(清华严巍敏)12 数据结构(清华严巍敏)13 数据结构(清华

weixin_47312141的博客 1万+

基于AMD AU15P FPGA的SLVS-EC桥PCIe设计方案分享

各位FPGAer周末愉快,今天熊猫君分享一个基于AMD AU15P FPGA的SLVS-EC桥PCIe设计方案。

haoxingheng的专栏 1445

【OpenCV】第二十三章: 图像特征检测之SURF、FAST、BRIEF、OBR算法

4、由于在检测特征点时是需要对图像中所有的像素点进行检测,然而图像中的绝大多数点都不是特征点,如果对每个像素点都进行上述的检测过程,那显然是种浪费,所以FAST采用一种进行非特征点判别的方法:首先对候选点的周围90度的点(1,9,5,13)四个点进行测试,而且是先测试1和9,如果它们两个符合阈值要求再测试5和13。继SIFT和SURF后,大家在特征点检测的速度上又进行了很多的改进尝试,但速度的提升效果都不是非常明显,直到FAST算法诞生,特征点检测的速度才有了一个质的飞跃。无法计算描述符的特征点将被删除。

因为热爱所以坚持 2158

数据结构视频教程 清华大学严蔚敏主讲 全48讲完整版asf格式

迅雷下载:  数据结构(清华严蔚敏)01.rar 迅雷下载:  数据结构(清华严蔚敏)02.rar 迅雷下载:  数据结构(清华严蔚敏)03.rar 迅雷下载:  数据结构(清华严蔚敏)04.rar 迅雷下载:  数据结构(清华严蔚敏)05.rar //(*本文出处:南山古桃(nsgtao)的百度空间:http://hi.baidu.com/nsgtao/ *) 迅雷下载:  数据结构

奋斗之路 6973

170、电机控制中的温升测试

本文以一次IGBT炸管事故为切入点,深入剖析电机控制中温升测试的实质:不仅是温度测量,更是对铜损、铁损、散热效率等热管理问题的系统验证。作者强调测试前热电偶布置、环境记录、预运行的重要性,提出实时监控电流谐波、绕组电阻、散热梯度等关键参数,并通过损耗分离与冷却系统实测,揭示真实热源。结合温升曲线异常分析与经验建议,强调留余量、仿真结合实测、关注瞬态工况等实践要点,警示温升测试是保障可靠性与安全性的核心环节。

2401_88858637的博客 47

2021-10-15【数据结构/严蔚敏】【二叉树基本实现】

#include <bits/stdc++.h> using namespace std; #define TElemType char #define Status int //------------二叉树的二叉链表存储表示------------- typedef struct BiTNode { TElemType data; struct BiTNode *lchild, *rchild; //左右孩子指针 } BiTNode, *BiTree; //--------

eternity_memory的博客 2562

【第1章>第9节】基于FPGA的图像开运算处理算法的Verilog实现

本文介绍了基于FPGA的开运算图像处理实现方法。主要内容包括:1)输入图像二值化处理,通过阈值将灰度图像转换为二值图像;2)数据缓存与窗口提取,使用寄存器数组缓存5行图像数据并构建5×5处理窗口;3)腐蚀运算逻辑,判断窗口内是否全为白色像素;4)膨胀运算逻辑,检测窗口内是否存在白色像素。最后给出了Verilog实现方案,通过级联腐蚀和膨胀模块完成开运算处理。该方法可用于FPGA图像处理算法开发。

MATLAB,verilog,python,opencv,tensorflow,caffe,C,C++ 313

AutosarMCAL开发——基于EB MCU驱动

本文为博主个人学习总结记录,如有不正,欢迎指正。

qq_45583706的博客 920

《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明

转载自:https://www.cnblogs.com/kangjianwei101/p/5221816.html 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑 链接☛☛☛《数据结构》课本源码合辑 习题集全解析 链接☛☛☛《数据结构题集》习题解析合辑 ★教材及习题源码下载★ 链接☛☛☛ 严蔚敏《...

IceSea7 4023

COMSOL有限元仿真深度指南:为结构件添加预应变

一、什么是预应力和预应变? 我们知道,结构力学问题中,结构件在外载荷作用下产生变形响应以吸收外载荷做功带来的能量;而在结构内部,整体的受力和变形则是通过固体微元的应力与应变传递的。 对于线弹性材料来说,应力与应变的关系可以线性表达,也即 σ=Dεσ = Dεσ=Dε ;在该式中,无论固体微元的应变程度多大,弹性矩阵DDD都是一个不变的常值。而对于超弹性材料来说,应力与应变的关系则需要通过应变能密度函数WWW来表征(详细参加博客《COMSOL有限元仿真深度指南:超弹性模型有限元分析入门》)。 从上面我们也不难

忘了面孔的Batou 7170

《数据结构》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明

先附上文档归类目录: 课本源码合辑链接☛☛☛《数据结构》课本源码合辑 习题集全解析链接☛☛☛《数据结构习题集》答案解析合辑 习题完整源码链接☛☛☛习题完整源码合辑 教材所有源代码链接☛☛☛《数据结构》-严蔚敏,吴伟民-源码(GitHub仓库) 欢迎Star项目,如有疑问,请在Issues反馈。 博主有话说:(已迁移到博客园...

StrayedKing-245176013 4万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 学习 严蔚敏讲数据结构笔记14
下一篇: 学习 严蔚敏讲数据结构笔记16
dblion
博客等级 码龄16年 23粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值