![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法分析
silentsharer
Less is More
展开
-
动态规划之0-1背包问题
问题描述 0−1背包问题是应用动态规划设计求解的典型例题 已知n种物品和一个可容纳c重量的背包,物品i的重量为w[i],产生的效益为p[i]。在装包时物品i可以装入,也可以不装,但不可拆开装。 问如何装包,所得装包总效益最大。算法分析 最优子结构特性 0−1背包的最优解具有最优子结构特性。 与一般背包问题不同,0−1背包问题要求 即物品i不能折开,或者整体装入,或者不装。当约定每件物品原创 2016-04-25 14:35:23 · 954 阅读 · 0 评论 -
搜索算法(Search)
1. 概述: 搜索算法是利用计算机的性能优势来有目的的枚举一个问题解空间的部分或所有的可能情况,从而求出问题的解的一种方法。在问题求解过程中,人们所面临的大多数现实问题往往没有确定性的算法,需要通过搜索算法来解决。 搜索问题一般只需要考虑两个基本问题: 1、使用合适的状态空间来表示问题。 2、测试该状态空间中目标状态是否会出现一个问题的基本信息由4部分组成 1、初始状态集合—–>定义了问题原创 2016-06-03 21:53:10 · 2878 阅读 · 0 评论 -
回溯法
回溯概述 与穷举的“笨拙”搜索相比,回溯法则是一种“聪明”的求解效益更高的搜索法。下面介绍回溯设计及其应用,体会回溯法相对于穷举的特点与优势。回溯概念 有许多问题,当需要找出它的解集或者要求回答什么解是满足某些约束条件的最佳解时,往往使用回溯法。 回溯法是一种试探求解的方法:通过对问题的归纳分析,找出求解问题的一个线索,沿着这一线索往前试探,若试探成功,即得到解;若试探失败,就逐步往回退,换原创 2016-04-22 13:24:25 · 4821 阅读 · 0 评论 -
递归之汉诺塔(Hanoi)
问题描述 汉诺塔(Hanoi),又称河内塔问题,是印度的一个古老传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去。庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。 后来,这个传说就演变为汉诺塔游戏: (1)有三根桩子A、B、C原创 2016-04-22 12:49:27 · 938 阅读 · 0 评论 -
递归
递归概述 递归是算法设计中的一种基本而重要的算法。递归方法即通过函数或过程调用自身将问题转化为本质相同但规模较小的子问题,是分治策略的具体体现。 递归方法具有易于描述、证明简单等优点,在动态规划、贪心算法、回溯法等诸多算法中都有着极为广泛的应用,是许多复杂算法的基础。递归概念 一个函数在它的函数体内调用它自身称为递归(recursion)调用。是一个过程或函数在其定义或说明中直接或间接调用自原创 2016-04-22 11:57:39 · 3225 阅读 · 0 评论 -
排列组合(两种方法)
排列组合是组合数学的基础,从n个不同元素中任取m个,约定1<m≤n,按任意一种次序排成一列,称为排列,其排列种数记为(Arrange)A(n,m)。从n个不同元素中任取m个(约定1<m<n)成一组,称为一个组合,其组合种数记为C(n,m)。计算A(n,m)与C(n,m)只要简单进行乘运算即可,要具体展现出排列的每一列与组合的每一组,决非轻而易举。 注意: 1、 排列A有序 A(n,m) =原创 2016-05-15 20:31:29 · 1443 阅读 · 0 评论 -
动态规划之n个元素出栈顺序种数
问题描述 n个元素依次进栈,共有多少种出栈顺序?算法分析 1个元素进栈,有1种出栈顺序;2个元素进栈,有2种出栈顺序;3个元素进栈,有5种出栈顺序 我们把n个元素的出栈个数的记为f(n), 那么对于1,2,3, 我们很容易得出: f(1) = 1 //即 1 f(2) =原创 2016-04-19 17:25:24 · 3569 阅读 · 1 评论 -
动态规划之最长公共子序列(LCS)
问题描述 一个给定序列的子序列是在该序列中删去若干个元素后所得到的序列。用数学语言表述, 给定序列 ,另一序列 ,X的子序列是指存在一个严格递增 下标序列 使得对于所有j=1,2,…,k有 。例如,序列 是序列 的一个子序列,或按紧凑格式书写,序列“bdca”是“abcdcba”的一个子序列。 若序列Z是序列X的子序列,又是序列Y的子序列,则称Z是序列X与Y的公共子序列。例如,序列“bcb原创 2016-04-18 17:01:04 · 464 阅读 · 0 评论 -
动态规划
动态规划概述 动态规划是运筹学的一个分支,是求解决策过程最优化的数学方法。20世纪50年代美国数学家贝尔曼(Rechard Bellman)等人在研究多阶段决策过程的优化问题时,提出了著名的最优性原理,把多阶段决策过程转化为一系列单阶段问题逐个求解,创立了解决多阶段过程优化问题的新方法——动态规划。 动态规划问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广泛的应用。例如最短路线、原创 2016-04-18 14:58:14 · 675 阅读 · 0 评论 -
递推之猴子爬山
问题描述 一个顽猴在一座有30级台阶的小山上爬山跳跃,猴子上山一步可跳1级,或跳3级,试求上山的30级台阶有多少种不同的爬法。算法分析 这一问题实际上是一个整数有序可重复拆分问题,试应用数组递推求解。 设爬k级台阶的不同爬法为f(k)种,首先探求f(k)的递推关系。 上山最后一步到达第30级台阶,完成上山,共有f(30)种不同的爬法; 要爬30级,那么第一次可以爬几级呢?要么第一次爬了1原创 2016-04-17 18:33:16 · 5009 阅读 · 0 评论 -
递推之折叠方阵问题
问题描述 定义n阶间断折叠方阵是把从起始数1开始的n2个整数折叠为n行n列的n阶方阵:起始数1置于方阵的左上角,然后从起始数开始递增,每一层从第1行开始,先竖向下再折转向右,层层折叠地排列为间断折叠方阵。 n阶回转折叠方阵是把起始数1置于方阵的左上角,然后从起始数开始递增,偶数层从第1行开始,先竖向下再折转向右;奇数层从第1列开始,先横向右再竖向上,呈首尾连接,层层折叠地排列为回转折叠方阵。原创 2016-04-17 18:30:36 · 3158 阅读 · 0 评论 -
递推之杨辉三角
问题描述 杨辉三角,历史悠久,是我国古代数学家杨辉揭示二项展开式各项系数的数字三角形。 我国北宋数学家贾宪约1050年首先使用“贾宪三角”进行高次开方运算,南宋数学家杨辉在《详解九章算法》记载并保存了“贾宪三角”,故称杨辉三角。元朝数学家朱世杰在《四元玉鉴》扩充了“贾宪三角”成“古法七乘方图”。在欧洲直到1623年以后,法国数学家帕斯卡才发现了“帕斯卡三角”。 杨辉三角构建规律主要包括横行各原创 2016-04-17 17:52:40 · 4332 阅读 · 0 评论 -
递推之摆动数列
问题描述 已知递推数列:a(1)=1,a(2i)=a(i)+1,a(2i+1)=a(i)+a(i+1),(i为正整数),试求该数列的第n项与前n项中哪些项最大?最大值为多少?。算法分析 该数列分项序号为奇或偶两种情况作不同递推,所得数列呈大小有规律的摆动. 设置a数组,赋初值a(1)=1.根据递推式,在循环中分项序号i(2─n)为奇或偶作不同递推: mod(i,2)=0(即i为偶数),a原创 2016-04-16 12:47:07 · 3692 阅读 · 0 评论 -
递推
递推概述递推的概念 递推是一种应用非常广泛的常用算法之一,与递归有着密切的联系。 在纷繁变幻的世界,所有事物都随时间的流逝发生着微妙的变化。许多现象的变化是有规律可循的,这种规律往往呈现出前因后果的关系。某种现象的变化结果与紧靠它前面变化的一个或一些结果紧密关联。递推的思想正体现了这一变化规律。递推算法 所谓递推,是在命题归纳时,可以由n−k,…,n−1的情形推得n的情形。 递推关系是一原创 2016-04-16 12:44:54 · 880 阅读 · 0 评论 -
穷举法之韩信点兵
问题描述 在中国数学史上,广泛流传着一个“韩信点兵”的故事。韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为汉朝建立了卓绝的功劳。据说韩信的数学水平也非常高超,他在点兵的时候,为了知道有多少个兵,同时又能保住军事机密,便让士兵排队报数: 按从1至5报数,记下最末一个士兵报的数为1; 再按从1至6报数,记下最末一个士兵报的数为5; 再按1至7报数,记下最末一个报的数为4; 最后按1至11原创 2016-04-15 20:27:32 · 4645 阅读 · 0 评论 -
穷举法之完美综合式
问题描述 数字1,2,…,9这9个数字填入以下含加减乘除与乘方的综合运算式中的9个□中,使得该式成立 □^□+□□÷□□-□□×□=0 要求数字1,2,…,9这9个数字在各式中都出现一次且只出现一次,且约定数字“1”不出现在乘、乘方的一位数中(即排除各式中的各个1位数为1这一平凡情形,前两个方框和最后一个不可以为1)。算法分析 (1)、可以使用最简单的枚举,设置9重循环,并且还要判断9个原创 2016-04-15 20:16:09 · 3281 阅读 · 0 评论 -
穷举法之水仙花数
问题描述 编一个程序找出所有的三位数到七位数中的阿姆斯特朗数。阿姆斯特朗数也叫水仙花数,它的定义如下:若一个n位自然数的各位数字的n次方之和等于它本身,则称这个自然数为阿姆斯特朗数。例如153(153=1*1*1+3*3*3+5*5*5)是一个三位数的阿姆斯特朗数,8208则是一个四位数的阿姆斯特朗数。算法分析 算法分析:由于阿姆斯特朗数是没有规律的,所以程序只能采用穷举法,一一验证范围内的数原创 2016-04-15 19:18:25 · 5021 阅读 · 0 评论 -
穷举法
穷举概述穷举的概念 穷举法又称列举法、枚举法,是蛮力策略的具体体现,是一种简单而直接地解决问题的方法。其基本思想是逐一列举问题所涉及的所有情形,并根据问题提出的条件检验哪些是问题的解,哪些应予排除。 通常程序设计入门都是从穷举设计开始的。今天,计算机的运算速度非常快,应用穷举设计程序可快捷地解决一般数量的许多实际应用问题。 穷举法的特点是算法设计比较简单,解的可能为有限种,一一列举问题所涉及原创 2016-04-15 18:53:57 · 18836 阅读 · 0 评论 -
DFS之拼接长棍
1. 题意概述 n根长度不同的小棍,拼成若干根长棍,要这么长棍的长度相等,并且小棍刚好都用完,问能拼成的长棍的最短长度是多少?#include <iostream>#include <algorithm>#include <cstring> using namespace std;const int maxn = 100;int arr[maxn]; bool used[maxn]; i原创 2016-06-03 22:11:40 · 804 阅读 · 0 评论