算法
文章平均质量分 74
别再想更好的办法
能力有限,代码不精
展开
-
五大常用算法——动态规划算法详解及经典例题
一、基本概念 动态规划是运筹学中用于求解决策过程中的最优化数学方法。当然,我们在这里关注的是作为一种算法设计技术,作为一种使用多阶段决策过程最优的通用方法。 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。 假设问题是由交叠的子问题所构成,我们就能够用动态规划技术来解决...原创 2018-02-27 23:12:16 · 71462 阅读 · 12 评论 -
【暴力枚举】大集合了解一下?
一、纸牌三角形问题A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算)。要求每个边的和相等。 下图就是一种排法。 A 9 6 4 8 3 7 5 2这样的排法可能会有很多。如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢?public static void main(String[] args) { int...原创 2018-03-29 21:35:03 · 895 阅读 · 2 评论 -
SPFA 算法(Shortest Path Faster Algorithm)
一、算法背景求单源最短路的SPFA算法的全称是:Shortest Path Faster Algorithm。 SPFA算法是西南交通大学段凡丁于1994年发表的。有人称spfa算法是最短路的万能算法。二、适用范围: 给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。 我们约定有向加权图G不存在负权回路...原创 2018-03-12 21:36:03 · 1634 阅读 · 0 评论 -
五大常用算法——分支限界算法详解及经典例题
一、对比回溯法回溯法的求解目标是找出解空间中满足约束条件的所有解,想必之下,分支限界法的求解目标则是找出满足约束条件的一个解,或是满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。另外还有一个非常大的不同点就是,回溯法以深度优先的方式搜索解空间,而分支界限法则以广度优先的方式或以最小耗费优先的方式搜索解空间。二、分支限界法的搜索策略在当前节点(扩展节点)处,先生成其...原创 2018-03-13 19:32:55 · 20700 阅读 · 0 评论 -
五大常用算法——分治算法详解及经典例题
一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题所需的计算时间都与其规模有...原创 2018-03-12 16:36:15 · 34122 阅读 · 5 评论 -
五大常用算法——回溯算法详解及经典例题
回溯算法 1.回溯算法就是一种有组织的系统最优化搜索技术,可以看作蛮力法穷举搜索的改进。回溯法常常可以避免搜索所有可能的解,所以它适用于求解组织数量较大的问题。 2.首先我们先了解一下一个基本概念“解空间树”:问题的解空间一般使用解空间树的方式来组织,树的根节点位于第1层,表示搜索的初始状态,依次向下排列。 3.解空间树的动态搜索:在搜索至树中任一节点时,先判断该节点对应的部分是否是满足约束...原创 2018-03-11 20:28:12 · 48894 阅读 · 7 评论 -
【深度优先搜索算法】与【宽度优先搜索算法】
深度优先搜索算法 深度优先搜索算法(Depth-First-Search,简称DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都...原创 2018-03-11 15:18:23 · 5239 阅读 · 0 评论 -
剪枝算法 整理
顾名思义,穷竭搜索会把所有可能的解都检查一遍,当解空间非常大时,复杂度也会相应的变大。比如n个元素进行排列时状态数总共有n!个,复杂度也就成了o(n!)。这样的话,即使n=15计算也很难较早终止。深度优先搜索时,有时早已很明确的知道从当前状态无论如何转移都不会存在解。这种情况下,不再继续搜索而是直接跳过,这一方法叫做剪枝。一:剪枝策略的寻找的方法1)微观方法:从问题本身出发,发现剪枝条件。...原创 2018-03-11 14:58:29 · 8638 阅读 · 1 评论 -
五大常用算法——贪心算法详解及经典例子
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。基本思路:⒈ 建立数学模型来描述问题。⒉ 把求解的问题分成若干个子问题。⒊ 对每一子问题求解,得到子问题的局部最优解。⒋...原创 2018-02-08 15:07:22 · 154599 阅读 · 18 评论 -
常用数组排序方法(Java实现)
[java] view plain copy1、数组的冒泡排序 [java] view plain copypublic void bubbleSort(int a[]) { int n = a.length; for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - 1- ...原创 2018-02-05 16:29:35 · 278 阅读 · 0 评论 -
用动态规划解决背包问题
求解背包问题: 给定 n 个背包,其重量分别为 w1,w2,……,wn, 价值分别为 v1,v2,……,vn 要放入总承重为 totalWeight 的箱子中, 求可放入箱子的背包价值总和的最大值。 NOTE:使用动态规划法求解 背包问题 设 前 n 个背包,总承重为 j 的最优值为 v[n,j...原创 2018-02-28 00:01:55 · 822 阅读 · 0 评论 -
全排列算法
1.全排列的定义和公式:从n个数中选取m(m<=n)个数按照一定的顺序进行排成一个列,叫作从n个元素中取m个元素的一个排列。由排列的定义,显然不同的顺序是一个不同的排列。从n个元素中取m个元素的所有排列的个数,称为排列数。从n个元素取出n个元素的一个排列,称为一个全排列。全排列的排列数公式为n!,通过乘法原理可以得到。2.时间复杂度:n个数(字符、对象)的全排列一共有n!种,所以全排列算法至...原创 2018-03-21 20:02:53 · 8223 阅读 · 0 评论