问题讲述 2 style="font-family: 宋体;">解决方案 2.1 style="font-family: 宋体;">贪心法   文:陈玉容 1 问题讲述 何为Prim算法? 这里引用网友博客中同段介绍(PS:个人感觉网友的当即篇博客对于Prim算法讲解的慌明白,本文与之相区别之地方在于具体落实代码的不比,该网友..." />

新普金娱乐网址


数学怎么离开简书半年,今天还要选择重返?

数学有关算法复杂度

从未有过理解就不曾真爱—咨询手记

  • 十一月 18, 2018
  • 数学
  • 没有评论

目录

1 style=”font-family: 宋体;”>问题讲述

2 style=”font-family: 宋体;”>解决方案

2.1 style=”font-family: 宋体;”>贪心法

图片 1

 


文:陈玉容

1 问题讲述

何为Prim算法?

这里引用网友博客中同段介绍(PS:个人感觉网友的当即篇博客对于Prim算法讲解的慌明白,本文与之相区别之地方在于具体落实代码的不比,该网友是以C++实现,而本文是使Java实现。其他理论教学可以参考该网友的博客哦,具体链接看文末参考资料)

 

普里姆算法(Prim算法),图论中之均等种算法,可在加权连通图里寻最小生成树。意即由此算法搜索到的边子集所组成的树中,不但包括了并通图里的具有终端(英语:Vertex
(graph theory)),且该抱有边的权值之同也为极小。该算法为1930年由于捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现;并于1957年由美国计算机科学家罗伯特·普里姆(英语:Robert C. Prim)独立意识;1959年,艾兹格·迪科斯彻还发现了该算法。因此,在少数场合,普里姆算法又受称呼DJP算法、亚尔尼克算法或普里姆-亚尔尼克算法。

 

规律简单介绍:

1).输入:一个加权连通图,其中顶点集合为V,边集合为E;

2).初始化:Vnew = {x},其中x为集合V中的任一节点(起始点),Enew = {},为空;

3).重复下列操作,直到Vnew = V:

a.在集合E中精选权值最小之边<u, v>,其中u为集合Vnew面临之要素,而v不在Vnew汇当中,并且v∈V(假定存在发生多长满足前述标准就所有同样权值的度,则只是自由选择中某);

b.以v加入集合Vnew受,将<u, v>边在集合Enew中;

4).输出:使用集合Vnew和Enew来讲述所取得的极度小生成树。

 

今天下午,应朋友邀约,到其的工作室做个案。

2 解决方案

证实得案主同意,我将此案写成文字,人名做了处理。

2.1 贪心法

正文具体编码使用数据参考自《算法设计及分析基础》第三版,下面是其实际图示:

 图片 2

图片 3

图片 4

具体代码如下:

package com.liuzhen.chapter8;

import java.util.ArrayList;

public class Prim {
    /*
     * 参数G:给定的图,其顶点分别为0~G.length-1,相应权值为具体元素的值
     * 函数功能:返回构造生成的最小生成树,以二维数组形式表示,其中元素为0表示最小生成树的边
     */
    public void getMinTree(int[][] G) {
        int[][] result = G;
        int[] vertix = new int[G.length];   //记录顶点是否被访问,如果已被访问,则置相应顶点的元素值为-2
        for(int i = 0;i < G.length;i++)
            vertix[i] = i;
        ArrayList<Integer> listV = new ArrayList<Integer>(); //保存已经遍历过的顶点
        listV.add(0);      //初始随意选择一个顶点作为起始点,此处选择顶点0
        vertix[0] = -2;    //表示顶点0被访问
        while(listV.size() < G.length) {  //当已被遍历的顶点数等于给定顶点数时,退出循环
            int minDistance = Integer.MAX_VALUE;    //用于寻找最小权值,初始化为int最大值,相当于无穷大的意思
            int minV = -1;   //用于存放未被遍历的顶点中与已被遍历顶点有最小权值的顶点
            int minI = -1;   //用于存放已被遍历的顶点与未被遍历顶点有最小权值的顶点  ;即G[minI][minV]在剩余的权值中最小
            for(int i = 0;i < listV.size();i++) {   //i 表示已被访问的顶点
                int v1 = listV.get(i);
                for(int j = 0;j < G.length;j++) {
                    if(vertix[j] != -2) {    //满足此条件的表示,顶点j未被访问
                        if(G[v1][j] != -1 && G[v1][j] < minDistance) {//G[v1][j]值为-1表示v1和j是非相邻顶点
                            minDistance = G[v1][j];
                            minV = j;
                            minI = v1;
                        }
                    }
                }
            }
            vertix[minV] = -2;
            listV.add(minV);
            result[minI][minV] = 0;
            result[minV][minI] = 0;
        }
        System.out.println("使用Prim算法,对于给定图中的顶点访问顺序为:");
        System.out.println(listV);
        System.out.println("使用Prim算法,构造的最小生成树的二维数组表示如下(PS:元素为0表示树的边):");
        for(int i = 0;i < result.length;i++) {
            for(int j = 0;j < result[0].length;j++)
                System.out.print(result[i][j]+"\t");
            System.out.println();
        }
    }

    public static void main(String[] args) {
        Prim test = new Prim();
        int[][] G = {{-1,3,-1,-1,6,5},
                {3,-1,1,-1,-1,4},
                {-1,1,-1,6,-1,4},
                {-1,-1,6,-1,8,5},
                {6,-1,-1,8,-1,2},
                {5,4,4,5,2,-1}};
        test.getMinTree(G);
    }
} 

运转结果:

使用Prim算法,对于给定图中的顶点访问顺序为:
[0, 1, 2, 5, 4, 3]
使用Prim算法,构造的最小生成树的二维数组表示如下(PS:元素为0表示树的边):
-1    0    -1    -1    6    5    
0    -1    0    -1    -1    0    
-1    0    -1    6    -1    4    
-1    -1    6    -1    8    0    
6    -1    -1    8    -1    0    
5    0    4    0    0    -1    

 

 

 

参考资料:

   1.《算法设计以及析基础》第3版本
 Anany Levitin 著 潘彦 译

   2.顶小生成树-Prim算法和Kruskal算法

三十大抵春之半边天小兰,面目和善,带在一个六七夏的幼女,这虽是案主。

“小婷,来,把您手里的测评表给陈老师。”

自身连过来一拘禁,是自我测评表,每节课集中注意力就于“勾”,作业认真就就由点儿独“勾”。我同一看,上周的课堂表现,每节课都起一个逗,晚上底家中作业大多数是个别独引起。

“小婷,作业两个引是满分呢?”

小婷点点头,靠在本人右边手边,我伸出右手揽住其底肩,说:“数学语文都满分为?”小婷点点头。

“好高!妈妈表扬你了吧?”

小婷摇摇头,走至妈妈身边。

“不是吧,这么深的学业妈咪都没表扬呢?”我朝妈咪看过去,见她撇撇嘴,似乎有言想说,还是有接触困难地忍住了。

“陈老师,我们进来谈吧。”妈咪交代小婷自己以客厅玩耍,就于咨询室走进来。

本身倒了区区步,回头看小婷在白板前,我蹲下来对她说:“小婷,我跟妈妈进大屋子聊天,为了不被打扰,我们见面关门,你于这边打,好为?”小婷点点头。

“如果您想搜寻我们,就过去鸣好吗?我们直接当。可以呢?”

小婷点点头。

“这孩子不错呀!”

“不是的,她上个星期周一周二没转母校,周三到周五天天吵闹,被老师骂,罚站,还于校长单独带去办公教育。那些评论都是它们要好搞出来的。”

“为什么?”

妈妈的泪奔涌而下,我被其递给纸巾,安静地看在它,让它尽情流泪,哭泣。

当小兰断断续续之描述着,我看看了小婷的成长的路,深深地亮与怜惜小婷。

一样年份半左右,因为患病,小婷先后开了有限糟糕开胸手术,从此,家里的六个大人,无条件地宠爱她爱她迁就她,全部双亲围在其改。表面上小婷得到多善,什么事还毫不做,要啥来什么。

上幼儿园,孩子本不爱去,三年幼儿园,小婷是于哭来中度过的,好当幼儿园的导师及姨妈还分外宠爱她百般迁就她。

本年小婷上小学同年级,还是一如既往哭来。小学的教职工而没有耐心哄她,而是教育批评,于是小婷很腻学校……直到那天她听写作弊,老师更是严峻地批评惩罚小婷,还呈现家长,家长为同师资站同一阵线,把听写偷看上升至了品质不好长大还得矣底德性评判,甚至没收了小婷代表荣誉之红领巾!于是,小婷还为非甘于回母校,即使吃压回去,就还是哭闹,要么发呆,课为不放。

……

好之小婷,没有丁能够来看其内在的恐怖,无助,恐惧,孤独,失落,担忧……她因此它的艺术在发表,在反抗,在谋。可惜先生不知晓,校长不明,同学不理,连最知心的妈咪也不理解她,只会以及老师并批评教育她,讲同样很套一很套的万分道理。

当时不是雪上加霜吗?

本身指点迷津妈妈透过小婷的行事,去押孩子的内在,看孩子当发挥什么,在惦记啊,在如啊,引导妈妈失领悟女儿。

当妈妈终于掌握女儿的心尖之后,又同样次于哽咽大哭,那汹涌而生之泪,是惋惜女儿的眼泪,也是忏悔的泪水……

妈妈生爱在女儿,可是表达出来的倒是是“如果你不乖,你不好,妈妈便非容易您!”而且成功的给闺女接这或多或少。

假若真爱在,其次就是是安发挥好,以及容易与限度的把!

妈妈与我述说小婷每一样不成的面貌,这实则就算是一个安全感严重不足,无法正常分离的稍女孩的“表达”方式,我耐心地引导妈妈怎么是地指向幼女“示爱”。

叩问了,妈妈笑了,虽然眼里还有泪花,这个泪却是拉动在要之泪。她严谨地把握我之手!

外边寒风冷雨,我之方寸却暖暖的!

【后记】

当了二十多年教职工,我刻骨铭心地察看,每一个问题孩子的偷,大多是父母亲因此错误的计发挥“爱”的收获。明白就一点,当自己的学童调皮捣蛋,逆反违纪,我尚未火,而是满满的怜惜!因为掌握,所以慈悲!

打小到异常,我们学了广大作业,当我们改为父母,却尚无丁让我们哪知道孩子,如何当一个好老人。加上好多总人口外于起一个不被疗愈的孩童,于是,令人痛的伤害就如此有了。

足见成长多么重要!

其一个案,我首先做一个非常好之倾听者,让妈妈讲述小婷的成长更,让妈妈尽情哭泣,宣泄内在的负面情绪。

下是于妈妈讲述她与小婷的彼此被,我很快发现问题典型:妈妈不知情孩子!看不到孩子的内在。我为此了雕像被妈妈知道女儿。这是最最重大之。懂有经常比爱又着重。

当带妈妈和子女互相时,怎么为孩子心理营养,如何做才是“无条件接受”,我拿体验式带进入,让妈妈当体会中领悟怎么说,怎么开,才是确实的容易。

提问被自我注意提升妈妈的自家价值,让其懂得问题本身不是问题,如何看待问题才是题材。

问问过程被,我早就几乎涂鸦鼻子发酸,我好懂其实是小婷内在的委屈,勾起了自好内在隐秘的委屈,这是自自己要成长之课业。这或者就算是咨询者自助助人吧!

不论是防护365日又挑战营第15天

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图