![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法(java实现)
冬雪是你
正就读于成都大学计算机学院软件工程专业
展开
-
java实现迪杰斯特拉算法
应用背景战争时期,胜利乡有7个村庄(A,B,C,D,E,F,G),现在有六个邮差,从G点出发,需要分别把邮件分别送到A, B,C,D,E,F六个村庄各个村庄的距离用边线表示(权),比如A - B距离5公里问:如何计算出G村庄到其它各个村庄的最短距离?如果从其它点出发到各个点的最短距离又是多少?迪杰斯特拉算法介绍迪杰斯特拉(Djkstra)算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。迪杰斯特原创 2020-09-07 20:29:15 · 937 阅读 · 0 评论 -
java实现克鲁斯卡尔算法
应用背景某城市新增7个站点(A,B,C,D,E,F,G) ,现在需要修路把7个站点连通各个站点的距离用边线表示(权),比如A~B距离12公里问:如何修路保证各个站点都能连通,并且总的修建公路总里程最短?克鲁斯卡尔算法介绍克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。基本思想: 按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路具体做法: 首先构造一个只含n 个顶点的森林,然后依权值从小到大从连通网中选择边加入到森林中,并使森林中不产生回路,直至原创 2020-09-06 13:37:18 · 1208 阅读 · 2 评论 -
java实现普利姆算法
应用场景有胜利乡有7个村庄(A, B,C,D, E,F,G),现在需要修路把7个村庄连通各个村庄的距离用边线表示(权),比如A ~ B距离5公里问: 如何修路保证各个村庄都能连通,并且总的修建公路总里程最短?思路:将10条边,连接即可,但是总的里程数不是最小正确|的思路,就是尽可能的选择少的路线,并且每条路线最小,保证总里程数最少最小生成树修路问题本质就是就是最小生成树问题,先介绍一下最小生成树(Minimum Cost Spanning Tree),简称MST:给定一个带权的无向连原创 2020-09-05 22:53:31 · 252 阅读 · 0 评论 -
java实现贪心算法
算法应用背景假设存在如下表的需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号思路分析使用贪婪算法, 效率高:1、目前并没有算法可以快速计算得到准备的值, 使用贪婪算法,则可以得到非常接近的解,并且效率高。选择策略上,因为需要覆盖全部地区的最小集合2、遍历所有的广播电台,找到一个覆盖了最多未覆盖的地区的电台(此电台可能包含一些已覆盖的地区,但没有关系)3、将这个电台加入到一个集合中(比如ArrayList),想办法把该电台覆盖的地区,在下次比较原创 2020-09-05 18:21:31 · 792 阅读 · 1 评论 -
java实现堆排序
大顶堆的定义:所有父节点都大于它的左右子结点。。。。。。。。。。。下面图解堆排序。。。。。。。。。。。。。。有一个数组:{4,8,6,9,0,4,-1,15} 二叉树顺序表示为构建大顶堆的第一步使之最后一个非叶子结点的元素定义为大顶堆的堆顶(局部的大顶堆)第二步使之(次)最后一个非叶子结点(15)的元素定义为大顶堆的堆顶(局部的大顶堆)第三步使之(次次)最后一个非叶子结点(6)的元素定义为大顶堆的堆顶(局部的大顶堆)第四步使之(次次次)最后一个非叶子结点(15)的元素定义为大.原创 2020-05-15 16:46:08 · 121 阅读 · 0 评论 -
java实现线索化二叉树(前序线索、中序线索、后序线索)
线索化指的是:一般二叉树的叶子结点的左右子结点都指向空,但是线索化后,叶子结点的左子结点指向的是“前驱结点”,右子结点指向的是“后继结点”三种线索化,直接上图、不多说代码如下,后序线索遍历本人没有写出来1.结点class Node{ private int no; private String name; private Node left; private Node right; /** * leftType=0 表示left指向的是左子结原创 2020-05-15 11:45:59 · 1174 阅读 · 4 评论 -
java实现约瑟夫环
利用环形链表实现约瑟夫环,构造完约瑟夫环后,定义一个first指针指向头结点,helper指针指向最后一个结点,每移除一个Boy之前first和helper就向前移动startNum-1次,此时first就指向了起始Boy,然后first和helper再移动countNum-1次,此时first就指向了将要被移除的Boy(helper总是在first后面)假如环形队伍中有5个Boy第一次开...原创 2020-05-06 14:12:31 · 997 阅读 · 0 评论 -
java实现双向链表(含头结点)
定义结点class Node { public String num; public String data; public Node pre; public Node next; public Node(String num,String data){ this.num=num; this.data=data; ...原创 2020-05-05 22:53:21 · 428 阅读 · 0 评论 -
java实现稀疏数组(包括存入磁盘、从磁盘读取)
原二维数组稀疏数组package ShangGuiGu.sparseArray;import java.io.*;public class SparseArrayTest { /** * 将稀疏数组存盘 * @param sparseArray */ public static void saveToFile(int[][] spar...原创 2020-05-04 21:18:18 · 1279 阅读 · 0 评论 -
赫夫曼树原理以及java实现
赫夫曼树原理以及java实现##1.最优二叉树(赫夫曼树)###在学习赫夫曼树之前,我们了解一下路径与路径长度的概念###1.1:路径:从树的一个结点到另一个结点之间的分支构成这两个节点之间的路径###1.2:路径长度:路径上的分支数目称作路径长度###1.3:树的路径长度:是从树根到每一结点的路径长度之和###1.4:结点的权:赋予结点上的一个有意义的实数###1.5:结点的带权路...原创 2019-11-28 00:11:41 · 183 阅读 · 0 评论