Prim算法解析及Java代码实现(附图)

C/C++中的Prim算法代码实现 在网上找到很多Prim算法的相关博客,虽然很正确,但是感觉看不懂,代码也不能完成自己需要去做的作业。之前跟着一篇博客打过一次代码,但是我看不懂了(所以痛定思痛,以后一定写注释@_@),而且测试我之后写的代码,出现了内存错误。没办法。这里记下我写代码的过程。 找不到博客之后,决定自己想办法,把老师的ppt看了很多遍,但是ppt上的伪代码含糊不清,有用的只有Prim的手动计算过程(这个百度上搜的到,很容易看懂,但是换成程序对于我这种不听课的人就麻烦了)。因为伪代码对自己写程序有帮助,所以我决定先弄伪代码(伪. 阅读详情

Prim算法

普里姆(Prim)算法,是用来求加权连通图的最小生成树的算法。

基本思想 :

        对于图G而言,V是所有顶点的集合;现在,设置两个新的集合U和T,其中U用于存放G的最小生成树中的顶点,T存放G的最小生成树中的边。 从所有uЄU,vЄ(V-U) (V-U表示出去U的所有顶点)的边中选取权值最小的边(u, v),将顶点v加入集合U中,将边(u, v)加入集合T中,如此不断重复,直到U=V为止,最小生成树构造完毕,这时集合T中包含了最小生成树中的所有边。

伪代码:

图解:

以上图G4为例,来对普里姆进行演示(从第一个顶点A开始通过普里姆算法生成最小生成树)。

初始状态:V是所有顶点的集合,即V={A,B,C,D,E,F,G};U和T都是空! 
第1步:将顶点A加入到U中。 
此时,U={A}。 
第2步:将顶点B加入到U中。 
上一步操作之后,U={A}, V-U={B,C,D,E,F,G};因此,边(A,B)的权值最小。将顶点B添加到U中;此时,U={A,B}。 
第3步:将顶点F加入到U中。 
上一步操作之后,U={A,B}, V-U={C,D,E,F,G};因此,边(B,F)的权值最小。将顶点F添加到U中;此时,U={A,B,F}。 
第4步:将顶点E加入到U中。 
上一步操作之后,U={A,B,F}, V-U={C,D,E,G};因此,边(F,E)的权值最小。将顶点E添加到U中;此时,U={A,B,F,E}。 
第5步:将顶点D加入到U中。 
上一步操作之后,U={A,B,F,E}, V-U={C,D,G};因此,边(E,D)的权值最小。将顶点D添加到U中;此时,U={A,B,F,E,D}。 
第6步:将顶点C加入到U中。 
上一步操作之后,U={A,B,F,E,D}, V-U={C,G};因此,边(D,C)的权值最小。将顶点C添加到U中;此时,U={A,B,F,E,D,C}。 
第7步:将顶点G加入到U中。 
上一步操作之后,U={A,B,F,E,D,C}, V-U={G};因此,边(F,G)的权值最小。将顶点G添加到U中;此时,U=V。

此时,最小生成树构造完成!它包括的顶点依次是:A B F E D C G。

 


public class Prim {
	/** 邻接矩阵, 为二维数组 */
    int[][] matrix;
    /** 设置最大权重范围, 表示正无穷 */
    int MAX_WEIGHT = Integer.MAX_VALUE;
    /** 顶点个数 */
    int size;
 
    /**
     * 普里姆算法:先初始化拿到第一个顶点相关联的权值元素放到数组中-> 找到其中权值最小的顶点下标-》再根据该下标,将该下标顶点相关联的权值加入到数组中-》循环遍历处理
     */
    public void prim() {
        /** 存放当前到全部顶点最小权值的数组,如果已经遍历过的顶点权值为0,无法到达的为正无穷 */
        int[] tempWeight = new int[size];   
        int minWeight;   /** 当前到下一个最小权值顶点的最小权值 */
        int minId;       /** 当前到下一个最小权值的顶点 */
        int sum = 0;     /** 权值总和 */
        
        //初始化"顶点的权值数组", 第一个顶点时, 到其他顶点的权值即为邻接矩阵的第一行
        for (int i = 0; i < size; i++) {
        	//将与v0顶点有边的权值存入数组
            tempWeight[i] = matrix[0][i];
        }
 
        System.out.println("从顶点v0开始查找");
        //最外层循环开始
        for (int i = 1; i < size; i++) {
            //每次循环找出当前到下一个最小权值的顶点极其最小权值 
            minWeight = MAX_WEIGHT;
            minId = 0;
            
            for (int j = 1; j < size; j++) {
                //如果权值不为0 且权值小于 minWeight
                if (tempWeight[j] > 0 && tempWeight[j] < minWeight) {
                	//让当前权值为最小值
                    minWeight = tempWeight[j];
                    //将当前最小值的下标存入minId 
                    minId = j;
                }
            }
            
            //找到目标顶点minId,他的权值为minWeight。
            System.out.println("找到顶点:v" + minId + " 权值为:" + minWeight);
            sum += minWeight;   //加上对应边的权重,更新sum值
            
            
            /**
             * 算法核心所在:将目标顶点到各个顶点的权值与当前tempWeight数组中的权值做比较,
             *             如果前者比后者到某个顶点的权值更小,
             *             将前者到这个顶点的权值更新入后者。
             */
            
            //将"第minId个顶点的权值"标记为0,意味着这顶点已经排序过了(或者说已经加入了最小树结果中)
            tempWeight[minId] = 0;
            for (int j = 1; j < size; j++) {
            	//若下标为minId 的顶点各边权值 小于 此前这些顶点未被加入生成树权值
                if (tempWeight[j] != 0 && matrix[minId][j] < tempWeight[j]) {
                	//将较小权值存入tempWeight
                    tempWeight[j] = matrix[minId][j];
                }
            }
        }
        //最外层循环结束
        
        System.out.println("最小权值总和为:" + sum);
    }
 
    private void createGraph(int index) {  //index表示顶点个数
        size = index;
        matrix = new int[index][index];    //邻接矩阵是一个长宽相等的正方形矩阵
        //邻接矩阵中每一行的数组, 按照原图以此填充
        int[] v0 = { 0, 10, MAX_WEIGHT, MAX_WEIGHT, MAX_WEIGHT, 11, MAX_WEIGHT, MAX_WEIGHT, MAX_WEIGHT };
        int[] v1 = { 10, 0, 18, MAX_WEIGHT, MAX_WEIGHT, MAX_WEIGHT, 16, MAX_WEIGHT, 12 };
        int[] v2 = { MAX_WEIGHT, 18, 0, 22, MAX_WEIGHT, MAX_WEIGHT, MAX_WEIGHT, MAX_WEIGHT, 8 };
        int[] v3 = { MAX_WEIGHT, MAX_WEIGHT, 22, 0, 20, MAX_WEIGHT, MAX_WEIGHT, 16, 21 };
        int[] v4 = { MAX_WEIGHT, MAX_WEIGHT, MAX_WEIGHT, 20, 0, 26, MAX_WEIGHT, 7, MAX_WEIGHT };
        int[] v5 = { 11, MAX_WEIGHT, MAX_WEIGHT, MAX_WEIGHT, 26, 0, 17, MAX_WEIGHT, MAX_WEIGHT };
        int[] v6 = { MAX_WEIGHT, 16, MAX_WEIGHT, 24, MAX_WEIGHT, 17, 0, 19, MAX_WEIGHT };
        int[] v7 = { MAX_WEIGHT, MAX_WEIGHT, MAX_WEIGHT, 16, 7, MAX_WEIGHT, 19, 0, MAX_WEIGHT };
        int[] v8 = { MAX_WEIGHT, 12, 8, 21, MAX_WEIGHT, MAX_WEIGHT, MAX_WEIGHT, MAX_WEIGHT, 0 };
        matrix[0] = v0;
        matrix[1] = v1;
        matrix[2] = v2;
        matrix[3] = v3;
        matrix[4] = v4;
        matrix[5] = v5;
        matrix[6] = v6;
        matrix[7] = v7;
        matrix[8] = v8;
    }
 
    public static void main(String[] args) {
        Prim graph = new Prim();
        graph.createGraph(9);
        graph.prim();
    }
 
}

结果:

代码中所用的图示:

最小生成树:99

数据结构——Prim算法 C++实现(含实例代码以及详细注解以及测试数据) 本文章适用于以下人群: 已经初步理解了Prim相关概念和思路,但是缺少相关代码和使用的实例,以及不清楚代码的相应内容的原理的作用的人 阅读详情

相关推荐

Prim算法的实现(Java)

Prim算法的目标是从给定的连接图中找到一棵包含所有顶点的最小生成树。Prim算法的基本思想是从一个起始顶点开始,逐步选择连接到当前树中的顶点中权重最小的边,直到所有顶点都被包含在生成树中为止。Prim算法的基本思想是从一个起始顶点开始,逐步选择连接到当前树中的顶点中权重最小的边,直到所有顶点都被包含在生成树中为止。接下来,我们在剩余的顶点中选择键值最小的顶点,并将其加入最小生成树中。然后,我们更新其它顶点的键值和父节点。接下来,我们在剩余的顶点中选择键值最小的顶点,并将其加入最小生成树中。

DevNinja的博客 478

《啊哈,算法》-20-算法-最小生成树实现Prim算法-C语言实现-情景化案例学习算法和数据结构

《啊哈,算法》-20-算法-最小生成树实现Prim算法-C语言实现-情景化案例学习算法和数据结构

weixin_45594172的博客 514

《数据结构》知识点汇总+算法代码总结【全】

写在前面:本文写于吴签时期,在家备考时刷完数据结构王道书之后想着把书中重点梳理汇总一下。本文内容包括但不局限于王道数据结构每章的知识点及其课后习题所涵盖的知识点。本人曾在大三期间打过一些程序设计类比赛,所以本文所涉及到的代码不一定局限于王道书,但思想都一样。 期末复习和备考408均可使用第一章:绪论(不在考研大纲但很重要)第二章:线性表第三章:栈和队列第四章:串第五章:树与二叉树第六章:图第七章:查找 第一章:绪论(不在考研大纲但很重要) 数据结构三要素:逻辑结构、存储结构、数据的运算;其中逻辑结构包括线

qq_44622401的博客 17万+

Prim算法实现

前言 Prim算法在求最小生成树上的一个典型算法 声明:因个人能力有限,本文仅是个人的学习记录笔记,有错误之处还望指出 实现思想 设置两个集合,U集合(在生成树中的结点),V-U集合(不在生成树中的图节点) 选择一个结点作为生成树的结点,并放入U集合 找到与根节点相连权值最小且不在U集合中结点,并加入到U中 重复操作n-1次 代码实现 #include <stdio.h> //最大顶点数 #define MAX 100 //代表无穷大 #define M 32767 /*=.

而塞过的学习之旅 382

全球半导体设备氧化钇熔射服务行业规模预测:预计未来六年CAGR为7.8%

本文将对“半导体设备氧化钇熔射服务”行业进行深度分析,探讨市场趋势的演变、核心竞争者的战略布局、供应链结构的内外特点、研发创新的最新进展、法规政策环境的适应性调整以及投资机会与风险评估。这一稳健的增长趋势表明半导体设备氧化钇熔射服务在电子行业中的重要性逐渐增强。由于全球对于高效、高精度和可靠的电子解决方案的需求增加,对能够提供这些功能的半导体设备氧化钇熔射服务的需求日益增长。由于半导体设备氧化钇熔射服务主要为就地服务型,其“配送”主要依赖于专业团队和技术设备的及时调配,强调服务的时效性和高质量。

CC1239777的博客 570

手把手教你为RV1126开发板点亮3寸MIPI屏(ST7701S驱动,含设备树配置避坑点)

本文详细介绍了RV1126开发板适配3寸MIPI屏幕(ST7701S驱动)的全流程,涵盖硬件设计、信号完整性保障、屏幕时序参数计算及设备树配置等关键步骤。特别针对MIPI差分信号布线、电压匹配和设备树配置中的常见问题提供了实用解决方案,帮助开发者高效完成屏幕适配工作。

weixin_42524703的博客 334

最小生成树-Prim算法案例及代码实现(C语言)

#include<stdio.h> #include<stdlib.h> #include<math.h> int main(){ int n=5; int map[5][5]={ 0,17,2,9,pow(2,31)-1, 17,0,pow(2,31)-1,5,20, 2,pow(2,31)-1,0,13,12, 9,5,13,0,8, pow(2,31)-1,20,12,8,0 }; int known[n];...

zhan_qian的博客 1688

手把手教你用Cesium和RayMarching实现逼真体积云(附完整Shader代码)

本文详细介绍了如何利用Cesium和RayMarching技术实现逼真的体积云效果,包括环境准备、核心逻辑、云层建模和光照增强等关键步骤,并提供了完整的Shader代码。通过噪声函数选型、动态风场模拟和多重散射近似等技术,开发者可以在数字地球可视化项目中创建沉浸式天气效果,显著提升场景的真实感。

weixin_29230649的博客 415

Prim算法的JAVA实现

1.算法思想 设有向图G的顶点集合为V={1,2,...,n},初始选择一个顶点加入 “已选集合”S中,选择连接S与V-S集合的最短边e=(i,j),其中i∈S,j∈V-S,将e加入树T中,j加入S,一直执行上述操作直到S=V为止。 2.JAVA代码 static int MAX = Integer.MAX_VALUE; static void prim(int[][]

澈彻策的博客 961

大模型训练(1):流水线并行

Gpipe的方法是,在训练时计算和运用的是micro-batch里的均值和方差,但同时持续追踪全部mini-batch的移动平均和方差,以便在测试阶段进行使用。流水线并行的核心思想是:在模型并行的基础上,进一步引入数据并行的办法,即把原先的数据再划分成若干个更小的batch,分批送入GPU进行训练,算一部分就让下一个GPU动起来。从实验结果可知,在关掉NVlinks的情况下,Gpipe一样也能实现随着GPU数量的增加,训练速度也增加的效果。前文说过,随着模型的增加,每块GPU中存储的中间结果也会越大。

呆呆象呆呆的博客 1970

ASPICE(Automotive SPICE)流程落地,研发管理工具自研,如何从量化数据体现研发效率提升的

摘要: ASPICE流程显著提升研发效率,主要体现在质量、成本和时间三个维度。关键量化指标包括:缺陷率降低30%-60%,维护工作量减少28%,研发周期缩短10%-20%,需求变更率降低58%,代码评审效率提升300%。初期开发成本虽增加9%,但长期回报率高。核心方法包括缺陷预防前移、需求精准管理和流程标准化与自动化。建立量化度量体系需覆盖缺陷密度、需求稳定性、进度偏差等指标,并依托工具链支持数据收集。实施ASPICE是短期投入换取长期质量提升和成本优化的高效投资。

汽车软件开发 183

prim算法(C++实现)

template bool Prim(EdgeNode t[]) { //如果不连通则返回false //如果连通,则在t[0->n-2]中返回最小生成树 int n = Vertices(); bool *selected = new bool [n+1]; VertexNode1 *VN1 = ne

托雷斯基的专栏 1202

ARFoundation系列讲解-教程目录

一、教程目录 ARFoundation快速入门-01简介 ARFoundation快速入门-02环境搭建 ARFoundation快速入门-03环境配置之iOS ARFoundation快速入门-04环境配置之Android ARFoundation快速入门-05ARKit设备支持列表 ARFoundation快速入门-06ARCore设备支持列表 ARFoundation快速入门-07检查设备支持 ARFoundation快速入门-08平面检..........

a451319296的博客 3万+

C语言经典算法之普里姆(prim)算法

在C语言中实现普利姆(Prim)算法通常涉及数据结构的选择(如邻接矩阵或邻接表)、优先队列来存储待处理边以及变量来追踪已加入最小生成树的顶点。

weixin_56154577的博客 4577

MATLAB 控制 E4438C 信号源的研究

通过 MATLAB,我们可以实现对 E4438C 的远程控制,从而实现更高的自动化和可编程性。总结起来,通过使用 MATLAB 和 Instrument Control Toolbox,我们可以轻松地控制 E4438C 信号源并生成各种类型的信号。需要注意的是,以上代码仅为示例,实际应用中可能需要根据具体情况进行更详细的配置和错误处理。此外,MATLAB 还提供了一系列函数和命令,可用于控制 E4438C 信号源的其他功能,如频率调谐、功率设置、调制设置等。您可以根据自己的需求进行相应的配置和控制。

RswtPerl的博客 1013

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Prim(普利姆)算法c语言实现

关于最小生成树的算法,那么肯定要提到大名鼎鼎的prim和kruskal算法, 这两种算法思想大同小异。对于算法的学习,我的经验是搞懂思想,分 模块去记忆,而不是去背代码,虽然短时间内,背代码确实可以较快的出程序,但是当算法非常多时,很容易混乱。 废话不多说,先说思想。 ##Prim算法:( 三步走) ...

一只懒猫的博客 4939

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Prim算法简易教程(~简单易懂,附最详细注释代码)

详细介绍了Prim算法,图文并茂,循序渐进

pursuit的博客 42万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C语言实现Prim算法

C语言实现Prim算法 一些心得放在代码的注释中,建议结合具体的图进行学习。 Prim算法过程描述: 在图中挑选任一顶点v0准备扩展; 每次扩展一个从未扩展的顶点,要求所连的边必须是已扩展的点连向所有未扩展的点中,边的权值最小的一条。 重复步骤2,直至图中所有的顶点都被扩展过。 #include<iostream> #define INT_MAX 100 using std::cout; using std::cerr; using std::endl; const i

江城暮色 1614

prim算法

prim算法 prim算法(普利姆算法):对图G(V,E)设置集合S,存放已访问的顶点,然后每次从集合V-S中选择与集合S的最短距离最小的一个顶点(记为u),访问并加入集合S。之后,令顶点u为中介点,优化所有从u能到达的顶点v与集合S之间的最短距离。执行n次(n为顶点个数),直到集合S已包含所有顶点。 算法实例演示 首先让我们来看一个example。如下图所示,图a是一个连通图(右图是图a对应的邻接矩阵,假设图中的边的权值大于0),我们现在基于该图来演示Prim算法的过程。 我们选择一个起点,然后在与起

qq_36314864的博客 3万+

普利姆算法(Java)

1)普利姆(Prim)算法求最小生成树,也就是在包含n个顶点的连通图中,找出只有(n - 1 )条边包含所有n个顶点的连通子图,也就是所谓的极小连通子图2)普利姆算法如下①设G = (V,E) 是连通图,T = (U,D) 是最小生成树, V、U是顶点集合,E,D是边的集合②若从顶点u开始构成最小生成树,则从集合V中取出顶点u放入集合U中,标记顶点v 的visited[u] = 1。

weixin_48544279的博客 1133

Prim算法C语言实现(图解)

Prim算法: 图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之和亦为最小。 Prim算法的描述: 已知带权连通图G(V,E),求其最小生成树T(Vnew,Enew),步 骤如下: 1.初始从G中任选一顶点v0,Vnew={v0},Enew={}; 2.从V-Vnew中选取一顶点v,使得v到树T的距离最小,将v加入Vnew中,对应的边加入Enew中 3.重复步骤2,直到Vnew=V; 例 求下图的最小生成树 将顶点D

m0_45688966的博客 1923

prim算法的实现

1->2 的距离为 100,小于 dist[2],dist[2] 更新为 100,pre[2] 更新为1。遍历所有与 i 相连但没有加入到连通部分的点 j,如果 j 距离连通部分的距离大于 i j 之间的距离,即 dist[j] > w[i][j](w[i][j] 为 i j 节点之间的距离),则更新 dist[j] 为 w[i][j]。选dist[4],更新dist[3],dist[5],pre[3],pre[5]。

m0_63185171的博客 830

实现prim算法

如下找出该图的最小生成树 prim算法是求解该类问题的一种经典算法 Prim算法的基本思路:将图中的所有的顶点分为两类:树顶点(已经被选入生成树的顶点)和非树顶点(还未被选入生成树的顶点)。首先选择任意一个顶点加入生成树,接下来要找出一条边添加到生成树, 这需要枚举每一个树顶点到每一个非树顶点所有的边,然后找到最短边加入到生成树。依次,重复操作n-1次,直到将所有顶点都加入生成树中。 ...

weixin_30344795的博客 179

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

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

ml29895063的博客 4067

Prim算法&最小生成树&Java超详解

Prim算法计算最小生成树,它的每一步都会为一颗生长树添加一条边。一开始这棵树只有一个顶点,然后我们会向它逐步添加边,每次总是将下一条连接树中的顶点与不在树中的顶点且权重最小的边加入到树中。

一条漂流鱼 1919
上一篇: Kruskal算法解析及Java代码实现(附图)
下一篇: 利用 Python3 实现图像灰度变换及数组操作
SpringRolls
博客等级 码龄9年 73粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值