java
简 。单
慢慢理解世界,慢慢更新自己
展开
-
单源最短路径
Dijkstra 给定带权有向图G=(V,E),其中每一条边的权都是非负实数。另外,还给定V中的一个顶点,称为源。现在要计算从源到其他各个顶点的最短路长度。这里的路长度是指路上各边权之和。 Dijkstra算法可以描述如下: 其中,输入带权有向图G=(V,E),V={1,2,..<n}。顶点v是源。a一个二维数组,a[i][j]表示边(i,j)的权。当(i,j)不属于E时,a[i][j]是一个大数,dist[i]表示当前源到顶点i的最短特殊路径长度。程序代码import jav原创 2020-12-25 10:08:37 · 246 阅读 · 0 评论 -
哈夫曼编码
哈夫曼编码程序代码import java.util.Scanner;import java.util.LinkedList;import java.util.Collections;public class Huffman { /** * 存放节点的容器 */ private static LinkedList<HuffmanNode> huffmanList = new LinkedList<>(); pub原创 2020-12-24 20:42:22 · 349 阅读 · 1 评论 -
最优装载问题
贪心算法——最优装载问题描述有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。该问题可形式化描述为其中,Xi=0表示不装入集装箱i,xi=0表示装入集装箱i.程序代码public class BestLoading { public float loading(float c,float[] w,int[] x){ int n=w.length; Element[] d=new Eleme原创 2020-12-24 18:20:23 · 424 阅读 · 1 评论 -
贪心算法——背包问题
贪心算法——背包问题程序代码//背包问题(贪心算法)public class GreedyPackage { private int MAX_WEIGHT = 150; private int[] weights = new int[]{35,30,60,50,40,10,25}; private int[] values = new int[]{10,40,30,50,35,40,30}; private void packageGreedy(int cap原创 2020-12-24 18:04:46 · 505 阅读 · 1 评论 -
最优二叉查找树
最优二叉搜索树首先了解什么是二叉查找树:给定n个互异的关键字组成的序列s=<k1,k2,…,kn>,且关键字有序(k1<k2<…<kn),我们想从这些关键字中构造一棵二叉查找树。对每个关键字ki,一次搜索搜索到的概率为pi。可能有一些搜索的值不在K内,因此还有n+1个“虚拟键”d0,d1,…,dn,他们代表不在K内的值。具体:d0代表所有小于k1的值,dn代表所有大于kn的值。而对于i = 1,2,…,n-1,虚拟键di代表所有位于ki和ki+1之间的值。对于每个虚拟键,一原创 2020-12-24 15:20:02 · 3639 阅读 · 0 评论 -
动态规划——电路布线
动态规划——电路布线问题描述在一块电路板的上、下两端分别有 n 个接线柱。根据电路设计,要求用导线 (i,π(i)) 将上端接线柱 i 与下端接线柱 π(i) 相连。如下图所示,其中,π(i),1≤i≤n, 是{1,2,…,n}的一个排列。导线 (I,π(i)) 称为该电路板上的第 i 条连线。对于任何 1≤i≤j≤n, 第i条连线和第j条连线相交的充要条件是 π(i)>π(j).在制作电路板时,要求将这n条线分布到若干个绝缘层上,在同一层上的连线不能相交。电路布线问题要确定将哪些连线安排在第原创 2020-12-22 15:18:08 · 1393 阅读 · 2 评论 -
分治法——快速排序
分治法——快速排序步骤:例子程序代码package ch01;public class qSort { public static void quickSort(int[] arr,int low,int high){ int i,j,temp,t; if(low>high){ return; } i=low; j=high; //temp就是基准位原创 2020-12-21 16:11:26 · 87 阅读 · 0 评论 -
分治法——归并排序
分治法——合并排序归并排序归并排序 (merge sort) 是一类与插入排序、交换排序、选择排序不同的另一种排序方法。归并的含义是将两个或两个以上的有序表合并成一个新的有序表。归并排序有多路归并排序、两路归并排序 , 可用于内排序,也可以用于外排序。这里仅对内排序的两路归并方法进行讨论。思路①把 n 个记录看成 n 个长度为1的有序子表;②进行两两归并使记录关键字有序,得到 n/2 个长度为 2 的有序子表;③重复第②步直到所有记录归并成一个长度为 n 的有序表为止。【例】 有一组关键字 {原创 2020-12-21 13:19:16 · 159 阅读 · 0 评论 -
递归——hanoi
标题递归——hanoi问题描述三根柱子A、B、C,开始时A柱上有n个盘子,盘子大小不等,大的在下、小的在上(下图所示)。有一老和尚想把这n个盘子从A柱移到C柱上,但每次只允许移动一个盘子,且在移动过程序中每根柱子上都始终保持大盘在下、小盘在上。在移动过程中可以借助B柱规则规则(1):每次只能移动一个圆盘规则(2):任何时刻都不允许将较大的圆盘压在较小圆盘的圆盘之上。规则(3):在满足移动规则(1)和规则(2)的前提下,可将圆盘移至a,b,c中任意塔上。问题分析利用递归技术来解决这一问题。当n原创 2020-12-21 11:15:30 · 135 阅读 · 1 评论 -
动态规划之矩阵连乘
动态规划之矩阵连乘一、实验目的1.了解动态规划思想;2.掌握动态规划算法步骤;3.学会使用动态规划算法实现矩阵连乘;二、实验内容问题描述分析过程:程序代码原创 2020-12-20 21:40:31 · 224 阅读 · 2 评论 -
递归——正整数划分问题
递归——整数划分问题问题描述将正整数n表示成一系列正整数之和,n=n1+n2+…nk;其中n1>=n2>=…nk。正整数n的这种表示方式称为正整数n的划分。正整数n嗯等不同划分个数成为正整数n的划分数,记作为p(n);例如:正整数6有如下11种不同的划分,所以p(6) = 116;5+1;4+2,4+1+1;3+3;3+2+1;3+1+1+1;2+2+2;2+2+1+1;2+1+1+1+1;1+1+1+1+1+1;在正整数n的所有不同的划分中,将最大加数n1不大于m划分个数原创 2020-12-20 21:37:24 · 649 阅读 · 0 评论 -
动态规划——最大连续子序列和
动态规划——最大子序和1.问题描述给定一个整数数组nums,找到一个具有最大连续子数组(子数组最少包含一个元素),返回其最大和。示例输入:[-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组[4,-1,2,1]的和最大为62.要求(1)写出问题分析的过程(2)写出程序代码(3)贴出程序结果实验过程(1)分析过程利用动态规划来解决,即可以通过一次遍历完成对最大子序列以及相应位置坐标的求解。步骤一:令状态dp[i]表示A[i]作为连续序列的最大和(这里所说A[i]必原创 2020-12-19 18:30:02 · 512 阅读 · 1 评论 -
蓝桥杯《39级阶梯》
蓝桥杯《39级阶梯》小明刚刚看完电影《第9级台阶》,离开电影院的时候,他数了数礼堂的前的台阶数,恰好是39级!站在台阶前,太突然又想到一个问题:如果我每一只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呐?(1)问题分析显然是一个递归问题。走了n=39级,并且走了偶数步,这时方法种数num++;或者走了40,这时不变化。函数fun()可以计算在上面的条件n级有多少种走法,则若走了1阶台阶,剩余的走法有fun(n-1)原创 2020-12-19 14:32:16 · 385 阅读 · 2 评论 -
动态规划——最大公共子序列
动态规划——最大公共子序列动态规划,即为自顶向下分析,自底向上设计,此题按照如下设计方式:(设序列分别为X={x1,x2,…,xm },Y={y1,y2,…,yn})① 当Xm = Yn时,找出Xm-1和Yn-1的最长公共子序列,再加上Xm(即Yn)② 当Xm ≠ Yn时,找出Xm-1和Yn的一个最长公共子序列,以及找出Xm和Yn-1的一个最长公共子序列,这两个公共子序列中较长者即为X和Y的最长公共子序列我们可以用c[i][j]来记录Xi和Yj的最长公共子序列的长度,注意边界条件。动态转移方程如原创 2020-12-19 13:57:18 · 634 阅读 · 1 评论 -
factorial fibonacci 二分查找
分治法之递归与二分查找一、实验目的1.了解分治法的思想;2.掌握递归思想与程序编写3.熟练使用二分查找实现代码编写。二、实验内容1.n!的递算法编写package ch01;import java.util.Scanner;public class factorial { public static int factorial(int n) { if(n==0) return 1; else return n*factorial(n-1); } public stat原创 2020-12-15 15:21:55 · 120 阅读 · 0 评论 -
回溯法——8皇后问题
回溯法——8皇后问题一、实验内容1.问题描述要求用回溯法求解8 —— 皇后问题,是放置在8*8棋盘上的8个皇后彼此不收攻击,即:任何两个皇后都不在同一行、同一列和同一斜线上。请输出8皇后问题所有可行解。2、要求(1)写出问题分析过程(2)写出程序代码(3)写出程序运行结果二、程序代码package huisu;public class Queen { /* * 一共有多少个皇后(此时设置为8皇后在8*8棋盘,可以修改此值为N皇后 */ int max= 8; st原创 2020-12-09 21:13:45 · 453 阅读 · 0 评论 -
贪心算法——最小生成树 Prim算法 Java
import java.util.Scanner; public class prim1 { public static void main(String[] args) { int [][] s=new int[100][100]; int i,j; int counter=2,startmin=1000; for( i=0;i<100;i++) { for( j=0;j<100;j++) { if(i==j) { s[i].原创 2020-11-25 21:38:20 · 1453 阅读 · 0 评论 -
给定有序表A[1:n] 修改合并排序算法,求出该有序表的逆序对数
给定有序表A[1:n] 修改合并排序算法,求出该有序表的逆序对数有关逆序对数的概念:定义:对于一个给定的数列,如果有i<j,且Ai>Aj,则称(i,j)为一逆序对.要解决的问题是,给出一个数列,求出这个数列包含多少个逆序对。例如,数组(3,1,4,5,2)的“逆序对”有<3,1>,《3,2》,<4,2><5,2>,共4个。开始分析算法:首先给定了这是一个有序表,所谓有序表,是指这样的线性表,其中所有元素以递增或递减方式有序排列。所以我们不用再进行原创 2020-11-25 21:30:07 · 987 阅读 · 0 评论