算法
Mr.Ma.01
Java后端开发工程师
展开
-
回溯法
回溯法搜索法穷举搜索深度优先搜索宽度优先搜索回溯法算法框架算法思想回溯法解题步骤递归回溯通用伪代码迭代回溯通用伪代码子集树递归式回溯伪代码排列树递归式回溯伪代码搜索法有目的地枚举一个问题的部分或所有可能的情况,从而找到解决问题的一种方法确定解空间,有效地搜索这个确定的解空间,从中找出问题的真正解穷举搜索针对问题的可能解是有限种的情况,逐一检查所有可能的情况,从中找到问题真正的解问题规模...原创 2019-12-27 17:08:39 · 265 阅读 · 0 评论 -
单源最短路径(贪心)
问题描述给定带权有向图 G=(V,E),其中每条边的权是非负实数。另外,还给定V中的一个顶点,称为源。现在计算从源到所有其他各顶点的最短长度。这里的长度指路上各边权之和。算法设计给定带权有向图 G=(V,E),其中每条边的权是非负实数。另外,还给定V中的一个顶点,称为源。现在计算从源到所有其他各顶点的最短长度。这里的长度指路上各边权之和。数据结构选择带权邻接矩阵a记录结点之间的权值, ...原创 2019-12-04 09:58:56 · 1206 阅读 · 0 评论 -
0-1背包问题(动态规划)
问题描述n个物品和1个背包。对物品i,其价值为vi,重量为 wi,其价值为vi,背包容量为W。如何选取物品装入背包,使背包中所装入的物品的总价值最大?数据结构的选择数组w[n]来存放n个物品的重量;数组v[n]来存放n个 物品的价值;背包重量为W,数组m[n+1][W+1]存放每次迭代执行结果;数组x[n]用来存放所装入背包的物品状态算法实现与测试代码实现package b...原创 2019-11-25 17:51:56 · 247 阅读 · 0 评论 -
循环赛日程表(分治)
问题描述设有 n = 2的k次方 个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表:(1)每个选手必须与其他n-1个选手各自赛一次。(2)每个选手一天只能赛一次。(3)循环赛一共进行n-1天。算法设计按分治策略,我们可以将所有的选手分为两半,n个选手的比赛日程表可以通过n/2个选手设计的比赛日程表来决定。递归地用这种一分为二的策略对选手进行分割,直到只剩下两个选手时,比...原创 2019-11-17 20:16:25 · 792 阅读 · 0 评论 -
最优装载(贪心)
一、问题描述有一批集装箱要装上一艘载重量为C的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下,尽可能多的集装箱装上轮船。二、解题思路及所选算法策略的可行性分析最优装载问题可用贪心算法求解。因为不限体积,尽可能多的装载。所以采用重量最轻者先装的贪心选择策略,可产生最优解。三、结果四、代码实现package cn;import java.util.Sc...原创 2019-11-14 19:16:15 · 509 阅读 · 1 评论 -
最接近点对问题(分治)
最接近点对问题问题描述解题思路及所选算法策略的可行性分析伪代码描述及复杂度分析时间复杂度:部分代码问题描述给定平面上n个点,找出其中的一对点,它们之间的距离最小。解题思路及所选算法策略的可行性分析先选定一个点,再与其他n-1个点求出距离。找出最小的两点。这样效率太低需要O(n2)计算时间。计算时间下界为(nlogn),可以采用分治法解决此问题。将n个点分成两个n/2个点的集合,再递归求最接...原创 2019-11-01 16:52:50 · 2760 阅读 · 0 评论 -
算法定义
算法定义:是解决问题的方法或过程。满足的性质:(1)输入:有零个或多个外部量作为算法的输入。(2)输出:算法产生至少一个量作为输出。(3)确定性:组成算法的每条指令是清晰的,无歧义的。(4)有限性:算法中每条指令的执行次数有限,执行每条指令时间也有限。注:程序是算法用某种程序设计语言的具体实现。(操作系统是一个在无限循环中执行的程序,因而其不是一个算法)算法复杂性分析有时间复杂...原创 2019-09-28 09:37:27 · 415 阅读 · 0 评论 -
递归
定义:直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数成为递归函数。阶乘函数n! = 1 n=0;n! = n(n-1)! n>0实现:package algorithm;public class Test { public static void main(String[] args) { // TODO Auto-generate...原创 2019-09-28 11:40:00 · 143 阅读 · 0 评论 -
分治算法
分治策略分治法的基本思想算法设计模式运用分治策略的典型例子二分搜索技术循环赛日程表分治法的基本思想定义:将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归地解这些子问题,然后将各个子问题的解合并得到原问题的解。算法设计模式DIVIDE-AND-CONQUER(P){ if(|P| <= n0) //问题规模足够小,n0为规模阈值 then ...原创 2019-10-10 20:19:27 · 152 阅读 · 0 评论