upstreamL

博客中的文章用于做笔记用,来源于网络,并非本人所写,如有侵权,请您联系我标明出处或删除,3Q~

导航

2017年3月5日 #

动态规划-最长连续子序列和与最大子矩阵

摘要: 问题:给一列数n个,求最大连续子序列和(即连续的子序列中和最大的序列)若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素 拓展:给一个n*n的矩阵,求其中和最大的子矩阵(即所有子矩阵中和最大的阵) 首先也是从最简单的着手,拿到问题,很容易想到的就是直接爆搜(求所有可能的子序列和并找出 阅读全文

posted @ 2017-03-05 20:03 upstreamL 阅读(663) 评论(0) 推荐(0) 编辑

【动态规划】最大子段和问题,最大子矩阵和问题,最大m子段和问题

摘要: 原文:http://blog.csdn.net/liufeng_king/article/details/8632430 1、最大子段和问题 问题定义:对于给定序列a1,a2,a3……an,寻找它的某个连续子段,使得其和最大。如( -2,11,-4,13,-5,-2 )最大子段是{ 11,-4,13 阅读全文

posted @ 2017-03-05 11:04 upstreamL 阅读(15852) 评论(5) 推荐(0) 编辑

常见的动态规划问题分析与求解

摘要: 动态规划(Dynamic Programming,简称DP),虽然抽象后进行求解的思路并不复杂,但具体的形式千差万别,找出问题的子结构以及通过子结构重新构造最优解的过程很难统一,并不像回溯法具有解决绝大多数问题的框架(全面解析回溯法:算法框架与问题求解)。为了解决动态规划问题,只能靠多练习、多思考了 阅读全文

posted @ 2017-03-05 11:01 upstreamL 阅读(3467) 评论(0) 推荐(0) 编辑

全面解析回溯法:算法框架与问题求解

摘要: 目录 什么是回溯法? 回溯法的通用框架 利用回溯法解决问题 问题1:求一个集合的所有子集 问题2:输出不重复数字的全排列 问题3:求解数独——剪枝的示范 问题4:给定字符串,生成其字母的全排列 问题5:求一个n元集合的k元子集 问题6:电话号码生成字符串 问题7:一摞烙饼的排序 问题8:8皇后问题 阅读全文

posted @ 2017-03-05 10:53 upstreamL 阅读(909) 评论(0) 推荐(0) 编辑

分支限界法----旅行售货员问题

摘要: 一、问题描述 某售货员要到若干城市去推销商品,已知各城市之间的路程(或旅费)。他要选定一条从驻地出发,经过每个城市一次,最后回到驻地的路线,使总的路程(或总旅费)最小。 如下图:1,2,3,4 四个城市及其路线费用图,任意两个城市之间不一定都有路可达。 二、问题理解 1.分支限界法利用的是广度优先搜 阅读全文

posted @ 2017-03-05 10:51 upstreamL 阅读(1420) 评论(0) 推荐(0) 编辑

动态规划和贪心算法的区别

摘要: 动态规划和贪心算法的区别动态规划和贪心算法都是一种递推算法 均有局部最优解来推导全局最优解 不同点: 贪心算法: 1.贪心算法中,作出的每步贪心决策都无法改变,因为贪心策略是由上一步的最优解推导下一步的最优解,而上一部之前的最优解则不作保留。 2.由(1)中的介绍,可以知道贪心法正确的条件是:每一步 阅读全文

posted @ 2017-03-05 10:50 upstreamL 阅读(555) 评论(0) 推荐(1) 编辑

理解动态规划算法与贪心算法区别----找钱问题

摘要: 一、说明 纠结了很久动态规划法与贪心算法的异同,光看理论文字的说明,没有能彻底搞清楚两者的区别究竟是什么。发现大家举得最多的一个 比较两者区别例子就是找钱问题。解决这个找钱问题,可以很大程度上帮助我们理解动态规划法语贪心算法的区别 二、问题 现只有面额为 11元、5元、1元的三种人民币。 给定一个 阅读全文

posted @ 2017-03-05 10:49 upstreamL 阅读(635) 评论(0) 推荐(0) 编辑

算法入门1:基本概念

摘要: 1. 算法是什么 算法:顾名思义,一种计算的方法,在程序设计上,就表现为一组指令序列。 为了使得算法有意义,还规定算法必须是有限的和确定的,也就是说算法的执行时间有限、执行的过程是确定的。 比如我们写了代码 [cpp] view plain copy int a = 10; //a,b为输入数据 i 阅读全文

posted @ 2017-03-05 10:48 upstreamL 阅读(363) 评论(0) 推荐(0) 编辑

算法入门8:随机算法

摘要: 之前将的算法都是确定的,即对于相同的输入总对应着相同的输出。但实际中也常常用到不确定的算法,比如随机数生成算法,算法的结果是不确定的,我们称这种算法为(随机)概率算法,分为如下四类: 数值概率算法 用于数值问题的求解,通常是近似解 蒙特卡洛算法Monte Carlo 能得到问题的一个解,但不一定是正 阅读全文

posted @ 2017-03-05 10:47 upstreamL 阅读(1341) 评论(0) 推荐(0) 编辑

算法入门5:贪心算法

摘要: 贪心算法中“贪心”二字形象的说明了该算法的基本思想:贪心(每一步选择都是眼下的局部最优选择)。 比如每次给你1张面额不定的纸币,共10次,你这么选?肯定是每次都要一张100元的。当你要拿第一张时,此时眼下最优的选择就是拿一张100的,不会管拿了之后会不会对后面的9张产生影响。这就是一种贪心,当然这种 阅读全文

posted @ 2017-03-05 10:46 upstreamL 阅读(228) 评论(0) 推荐(0) 编辑

算法入门7:分支限界法

摘要: 上一篇回溯法中已经提到过,回溯法的思想是深度优先搜索加剪枝,与之相对,分支限界法的思想是广度优先搜索加剪枝。 1. 分支限界法 – 广度优先搜素 1. 简单概述 分支限界法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用广度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或 阅读全文

posted @ 2017-03-05 10:46 upstreamL 阅读(608) 评论(0) 推荐(1) 编辑

算法入门4:动态规划

摘要: 分治算法将规模较大的问题划分成规模较小的子问题,通常,这些子问题是不重叠的。 这一篇要介绍的动态规划算法,也是基于问题划分,区别在于划分的子问题是有重叠的(黄色部分),这样在求解的过程中,对于重叠的部分只要求解一次,记录下结果(备忘录方法),其他子问题中直接使用即可,减少了重复计算,效率更高。 如下 阅读全文

posted @ 2017-03-05 10:43 upstreamL 阅读(336) 评论(0) 推荐(0) 编辑

算法入门3:分治算法(下)

摘要: 分治算法的设计模式 - 大化小,小化了 分治算法的主要步骤就是:分解,求解,合并。 [cpp] view plain copy Divide-and-Conquer(P) { //问题规模足够小,直接解决 if(P≤n0) return(ADHOC(P); //问题规模大,则分解为较小的子问题 P1 阅读全文

posted @ 2017-03-05 10:41 upstreamL 阅读(298) 评论(0) 推荐(0) 编辑

算法入门2:分治算法(上)

摘要: 上一篇中讲解了算法的基本概念,算法许许多多,按照算法基本思想,大致可分为如下几类:分治算法、贪心算法、动态规划、回溯法、分支限界、概率算法和随机算法等等。这一篇讲解分治算法。 分治算法 分治即分而治之。一个问题规模过大不容易直接解决,就可以划分成许多小问题,如果小问题不容易求解,那么可以再划分成规模 阅读全文

posted @ 2017-03-05 10:40 upstreamL 阅读(338) 评论(1) 推荐(0) 编辑

算法入门6:回溯法

摘要: 一. 回溯法 – 深度优先搜素 1. 简单概述 回溯法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。 基本思想类同于: 图的深度优先搜索 二叉树的后序遍历 【 分支限界法:广度优先搜索 思想类同于:图的广度优 阅读全文

posted @ 2017-03-05 10:37 upstreamL 阅读(445) 评论(0) 推荐(0) 编辑