算法分析与设计_BUAA_2020
VanHa0101
这个作者很懒,什么都没留下…
展开
-
最长公共子序列
最长公共子序列1、问题定义2、确定递归方程用C[i][j]C[i][j]C[i][j]表示x[1...i]x[1...i]x[1...i] 和 y[1...j]y[1...j]y[1...j]最长公共子序列的长度初始化:C[0][1...m]=0C[0][1...m] = 0C[0][1...m]=0 // x字符串长度为0的时候,与y[1…m]的公共子序列的长度为0C[1...n][0]=0C[1...n][0] = 0C[1...n][0]=0 // y字符串长度为0的时候,与x原创 2020-10-29 15:57:34 · 223 阅读 · 0 评论 -
钢条切割问题,DP经典问题
算法导论原创 2020-10-22 23:28:06 · 275 阅读 · 2 评论 -
最大连续子数组,动态规划经典问题
动态规划(Dynamic Programming)其中的 Programming指的是一种表格法。相较于分治,动态规划主要应用于子问题重叠的情况。重点是找出最优子结构最大连续子数组问题:一、 问题描述二、 几种解决方法:1 暴力枚举:最简单也是最耗时的做法就是对其进行枚举,为了找全所有的连续子数组,我们看看至少需要几层循环:对一个连续的子数组A[l..r]A[l..r]A[l..r], rrr表示子数组右边的坐标,lll表示左边的int smax = -inf; for(int r原创 2020-10-20 20:43:54 · 817 阅读 · 2 评论 -
快速排序
快速排序基本思想:简介:1、数组划分核心思想:选取固定位置的主元x(如尾元素)维护两个部分的右端下标i,j比较A[j] 和 x的大小if: A[j] <= x : swap(A[i+1], A[j]), i,j都向后移动if: A[j] > x : j 向后移动注:A[i+1] 是大数区最左边的一个数。实现方法选取固定位置主元????(如尾元素)维护两个部分的右端点变量????,????考察数组元素???? ???? ,只和主元比较若???? ????原创 2020-10-03 22:17:37 · 289 阅读 · 0 评论 -
归并排序
归并排序是"分治思想"的典型例子,分治思想分为三个步骤:分解、解决子问题、合并。伪代码c语言实现:#include<iostream>using namespace std;int a[100]={0,1,2,3,4,5,6,7,8,9};void Merge(int l, int mid, int r){ int t[100]; for(int i = l; i <= r; i++) { t[i] = a[i]; } int i = l, j原创 2020-10-03 19:53:09 · 77 阅读 · 0 评论