随笔分类 - 算法与设计 / 数据结构与算法
摘要:编写实体类 public class Student { String name; // 姓名 String sex; // 性别 int sno; // 学号 int score; // 成绩 public String getName() { return name; } public void
阅读全文
摘要:编写实体类 public class Student { String name; // 姓名 String sex; // 性别 int sno; // 学号 int score; // 成绩 public String getName() { return name; } public void
阅读全文
摘要:使用链表模拟队列 案例1 // 创建节点类 public class Node { int n; Node next; } // 编写方法 public class Queue { Node head = new Node(); Node last = new Node(); private int
阅读全文
摘要:使用数组模拟队列 案例1 public class Queue { private int[] num= new int[5]; private int len=0; public int size(){ return this.len; } //添加 public int add(int n){
阅读全文
摘要:创建节点类 public class Node { int n; Node next; } 编写方法 public class MyLinkList { Node head = new Node(); private int len=0; // 获取长度 public int size(){ ret
阅读全文
摘要:编写方法 public class MyArrayList { private int[] n = new int[10]; //动态数组 private int size=0; // 长度 public int size(){ return this.size; } //添加一个元素 public
阅读全文
摘要:创建节点类 public class Node { int n; Node next; } 第1次推导 public class test { public static void main(String[] args) { // 新建节点 Node node1 = new Node(); node
阅读全文
摘要:创建节点类 public class Node { int n; Node next; } 第1次推导 public class test { public static void main(String[] args) { // 新建节点 Node node1 = new Node(); node
阅读全文
摘要:数组降序的情况下插入数据依然是降序 第1次推导 public class test { public static void main(String[] args) { int[] ints = {90, 80, 70}; int tmp = 85; // 与第1个数比较时 // [0][1][2]
阅读全文
摘要:第1次推导 public class test { public static void main(String[] args) { int[] ints = {2,5,3,1,8,9}; int tmp; // 存储临时变量 int j; // 开始比较第几位的数 // 第1次 // 2,5,3,
阅读全文
摘要:第1次推导 public class test { public static void main(String[] args) { int[] ints = {6, 5, 9, 5}; int tmp; if(ints[0]>ints[1]){ tmp = ints[0]; ints[0] = i
阅读全文
摘要:必须是1个有序的数组 第1次推导 public class test { public static void main(String[] args) { int[] ints = {1,2,3,5,7,9}; int a = 6; // 要查找的数 int i=0; //起始位置 int j=in
阅读全文
摘要:应用实例 马踏棋盘算法也被称为骑士周游问题 将马随机放在国际象棋的8×8棋盘Board[0~7][0~7]的某个方格中,马按走棋规则(马走日字)进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格 骑士周游问题的解决步骤和思路 1. 创建棋盘 chessBoard , 是一个二维数组 2. 将
阅读全文
摘要:简介 和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。 该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名 弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路径 迪杰斯特拉算法用于计算图中某一个
阅读全文
摘要:应用实例 有7个村庄(A, B, C, D, E, F, G) ,现在有六个邮差,从G点出发,需要分别把邮件分别送到 A, B, C , D, E, F 六个村庄 各个村庄的距离用边线表示(权) ,比如 A – B 距离 5公里 如何计算出G村庄到 其它各个村庄的最短距离? 如果从其它点出发到各个点
阅读全文
摘要:应用场景 某城市新增7个站点(A, B, C, D, E, F, G) ,现在需要修路把7个站点连通 各个站点的距离用边线表示(权) ,比如 A – B 距离 12公里 问:如何修路保证各个站点都能连通,并且总的修建公路总里程最短? 简介 克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生
阅读全文
摘要:应用场景 现有7个村庄(A, B, C, D, E, F, G) ,现在需要修路把7个村庄连通 各个村庄的距离用边线表示(权) ,比如 A – B 距离 5公里 如何修路保证各个村庄都能连通,并且总的修建公路总里程最短? 最小生成树 修路问题本质就是就是最小生成树问题, 先介绍一下最小生成树(Min
阅读全文
摘要:应用实例 假设存在如下表的需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号 思路分析 目前并没有算法可以快速计算得到准备的值, 使用贪婪算法,则可以得到非常接近的解,并且效率高。选择策略上,因为需要覆盖全部地区的最小集合: 遍历所有的广播电台, 找
阅读全文
摘要:应用实例 暴力匹配算法 代码实现 public class ViolenceMatch { public static void main(String[] args) { //测试暴力匹配算法 String str1 = "硅硅谷 尚硅谷你尚硅 尚硅谷你尚硅谷你尚硅你好"; String str2
阅读全文
摘要:应用实例 有一个背包,容量为4磅,现在将如下商品装入背包,要求装入的背包的总价值最大,并且重量不超出,且物品不能重复 # 当前为01背包 # 如果为完全背包则放入物品可重复 简介 思路分析 每次遍历到的第i个物品,根据w[i]和v[i]来确定是否需要将该物品放入背包中。 即对于给定的n个物品,设v[
阅读全文