算法设计与分析
个人学习算法总结
Dainelcw
一名喜爱学习,不断求取进步的青春少年。希望通过学习,充实自己,提升自己。
展开
-
动态规划——最佳加法表达式
问题描述有一个由1…9组成的数字串,如果将m个加号插入到这个数字串中,在各种可能形成的表达式中,值最小的那个表达式的值是多少?解题思路假定数字串长度是n,添完加号后,表达式的最后一个加号添在第i个数字后面,那么整个表达式的最小值,就等于在前i个数字中插入m-1个加号所能形成的最小值,加上第i+1到第n个数字所组成的数的值(i从1开始算)设V(m,n)表示在n个数字中插入m个加号所能形...原创 2020-04-20 10:08:45 · 557 阅读 · 0 评论 -
动态规划——最长公共子序列
问题描述给出两个字符串,求出这样的一个最长的公共子序列的长度:子序列中的每一个字符都能在两个原串中找到,而且每个字符的先后顺序和原串中的先后顺序一致。Sample Inputabcfbc abfcabprogramming contestabcd mnpSample Output420问题分析输入两个串s1,2设MaxLen(i,j)表示:s1的左边i个字...原创 2020-04-15 14:48:44 · 462 阅读 · 0 评论 -
动态规划——数字三角形
问题描述73 88 1 02 7 4 44 5 2 6 5在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或右下走。只需要求出这个最大和即可,不必给出具体路径。三角形的行数大于1小于等于100,数字为0-99解题思路用二维数组存放数字三角形。D(r,j):第r行第j个数字(r,j从1开始算)MaxSum(r,...原创 2020-04-13 17:38:19 · 239 阅读 · 0 评论 -
分治——求最大子数组
问题描述给定一个数组array[],数组元素均为整数(有正有负),求取其中一部分字串,使其和最大,输出最大的和与该字串的在原数组的头尾位置。问题分析1、暴力求解:在数组长度为nnn的数组中两两组合共有Cn2C^2_nCn2种,因为Cn2=Ω(n2)C^2_n = \Omega(n^2)Cn2=Ω(n2),因此这种方法的时间复杂度为O(n2)\Omicron(n^2)O(n2).2...原创 2020-03-30 11:18:58 · 1153 阅读 · 0 评论 -
分治——求排列的逆序数
问题描述考虑1,2,…,n(n<=100000)的排列i1,i2,...,ini_1,i_2,...,i_ni1,i2,...,in,如果其中存在j,k,满足j<kj<kj<k且ij>iki_j>i_kij>ik,那么就称(ij,ik)(i_j,i_k)(ij,ik)是这个排列的一个逆序。一个排列含有的逆序的个数成为这个排列的逆序数。例...原创 2020-03-27 21:50:51 · 763 阅读 · 0 评论 -
分治——输出前m大的数
问题描述给定一个数组包含n个元素,统计前m大的数并且把这m个数从大到小输出。输入第一行包含一个整数n,表示数组的大小,n < 100000.第二行包含n个整数,表示数组的元素,整数之间以一个空格分开。每个整数的绝对值不超过1000000000.第三行包含一个整数m。m < n输出从大到小输出前m大的数,每个数一行。问题分析1、排序后再输出,复杂度O(...原创 2020-03-21 11:45:11 · 1083 阅读 · 0 评论 -
分治——归并排序、快速排序
分治的基本概念把一个任务,分成形式和原任务相同,但规模更小的部分任务(通常是两部分),分别完成,或只需要选一部分完成。然后再处理完成后的这一个或几个部分的结果,实现整个任务的完成。实例16枚硬币,有可能有一枚假币,假币比真币轻。有一架天平,用最少称量次数确定有没有假币,若有的话,假币是哪一枚。解决办法8—8——称,发现无假币,或假币所在的那8枚4—4——称2—2——称1—1—...原创 2020-03-18 17:05:57 · 307 阅读 · 0 评论 -
二分算法——寻找指定和的整数对
问题描述:输入n(n≤100,000)n(n \leq100,000 )n(n≤100,000)个整数,找出其中的两个数,它们之和等于整数m(假定肯定有解)。题中所有整数都能用int表示题目解析:解法1:用两重循环,枚举所有的取数方法,复杂度是O(n2)\Omicron (n^2)O(n2) 的。for(int i = 0;i < n-1; ++i) for(int j =...原创 2020-03-18 13:56:39 · 1438 阅读 · 0 评论 -
二分算法——二分法求方程的根
问题描述:求下面方程的一个根:f(x)=x3−5x2+10x−80=0f(x) = x^3-5x^2+10x-80 = 0f(x)=x3−5x2+10x−80=0,若求出的根是啊,则要求∣f(a)∣≤1/106|f(a)| \leq 1/10^6∣f(a)∣≤1/106问题解析:对f(x)f(x)f(x)求导,得f‘(x)=3x2−10x+10f^`(x) = 3x^2-10x+10...原创 2020-03-16 21:02:45 · 6036 阅读 · 0 评论 -
二分算法——二分查找
二分查找函数问题1:写一个函数BinarySearch,在包含size个元素的、从小到大排序的int数组a里查找元素p,如果找到,则返回元素下标,如果找不到,则返回-1。要求复杂度O(log(n))C语言示例#include<stdio.h>int BinarySearch(int a[], int size, int p){ int L = 0;//查找区...原创 2020-03-16 20:37:28 · 332 阅读 · 0 评论 -
程序或算法的时间复杂度
算法的评价标准一个程序或算法的时间效率,也称“时间复杂度”,有时简称“复杂度”复杂度常用大的字母O\OmicronO和小写字母n表示,比如O(n)\Omicron(n)O(n),n表示问题的规模时间复杂度是用算法运行过程中,某种时间固定的操作需要被执行的次数和n的关系来度量的。在无序数列中查找某个数,复杂度是O(n)\Omicron(n)O(n).计算复杂度的时候,只统计执行次数最多的(...原创 2020-03-16 19:14:52 · 993 阅读 · 0 评论 -
递归形式的问题——算24
问题描述算24给出4个小于10个正整数,你可以使用加减乘除4中运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24.这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。比如,对于5, 5, 5, 1,我们直达5 * ( 5 - 1 / 5 ) = 24,因此可以得到24.又比如,对...原创 2020-03-03 13:46:28 · 2366 阅读 · 0 评论 -
递归形式的问题——放苹果
问题描述例题:放苹果把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?5, 1, 1 和1, 5,1是同一种分法输入第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含两个整数M和N,以空格分开。1 <= M, N <= 10。输出对输入的每组数据M和N,用一行输出相应的K。样例输入...原创 2020-03-03 11:21:23 · 489 阅读 · 0 评论 -
递归形式的问题——爬楼梯
问题描述例题:爬楼梯树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级,也可以第一次走两级,第二次走一级,一共3种方法。输入输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 <= N <= 30 输出不同的走法数,每一行输出对应一行输出不同的走法数,...原创 2020-03-03 10:14:27 · 1533 阅读 · 0 评论 -
递归形式的问题——四则运算表达式求值
问题描述输入为四则运算表达式,仅由整数、+、-、*、/、(、)组成,没有空格,要求求其值。假设运算符结果都是整数。“/”结果也是整数。解题思想表达式是个递归的定义:输入:(2+3)*(5+7)+9/3输出:63C++代码示例:#include<iostream>#include<cstring>#include<cstdlib&...原创 2020-03-03 09:29:35 · 765 阅读 · 0 评论 -
递归形式的问题——逆波兰表达式
逆波兰表达式问题描述本题中“逆波兰表达式”的定义:1、一个数是一个逆波兰表达式,值为该数2、“运算符 逆波兰表达式 逆波兰表达式”是逆波兰表达式,值为两个逆波兰表达式的值运算的结果C语言代码示例:#include<stdio.h>#include<stdlib.h>double exp(){ //读入一个逆波兰表达式,并计算其值 char s...原创 2020-02-25 18:07:20 · 354 阅读 · 0 评论 -
递归形式的问题——N皇后问题
N皇后问题描述C语言代码示例:#include<stdio.h>#include<math.h>#include<stdlib.h>int N;int queenPos[100];//用来存放算好的皇后位置。最左上角是(0,0)void NQueen(int k)//在0~k-1行皇后已经摆好的情况下,摆第k行及其后的皇后{ in...原创 2020-02-25 17:52:56 · 297 阅读 · 0 评论 -
递归形式的问题——汉诺塔问题(Hanoi)
汉诺塔问题(Hanoi)![在这里插入图片描述](https://img-blog.csdnimg.cn/20200225172157992.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2Nzg1MDE5,size_16,c...原创 2020-02-25 17:34:51 · 425 阅读 · 0 评论