
算法分析与设计
程勇uestc
电子科大
展开
-
最长上升子序列的两种方法
方法一:简单dp(O(n2)O(n^2)O(n2))f[i] 表示以a[i]结尾的子序列的最大长度f[i] = max(f[j] + 1), j < i && a[j] < a[i]#include <iostream>using namespace std;const int N = 1010;int a[N], f[N];int main(){ int n; cin >> n; for(int i = 1; i原创 2020-11-03 11:22:22 · 624 阅读 · 0 评论 -
算法分析与设计——近似算法
一、近似算法的概念1、为啥要研究近似算法?\quad目前大规模的NPC问题我们无法通过计算得到,因此我们需要通过损失一部分精度的做法来找到多项式的近似算法。2、近似算法精度的评价\quad用近似算法得到的解与原问题的最优解比值不超过ρρρ,则称该算法是ρ−近似算法ρ-近似算法ρ−近似算法。难点在于在不知道最优解的情况下证明近似解与最优解的近似程度。二、几个经典的近似问题1、负载均衡问题...原创 2019-10-31 10:28:06 · 10514 阅读 · 0 评论 -
算法分析与设计——规约和NPC问题
一、多项式规约1、概念及性质\quad多项式时间归约:如果问题X和问题Y满足以下两条性质,那么问题X可以在多项式时间归约到问题Y。问题X可以通过多项式时间的基本运算步骤转换为问题Y;问题X多项式次调用求解问题Y的算法记为X≤PYX\le_{P}YX≤PY。三点性质:若X≤PYX\le_{P}YX≤PY,YYY能在多项式时间内求解,则XXX也能在多项式时间内求解若X≤PYX\le...原创 2019-10-14 19:03:49 · 10358 阅读 · 7 评论 -
算法分析与设计(一)——时间复杂度
一、P,NP和NPC问题P:能在多项式时间复杂度内解决NP:能在多项式时间复杂度检查进行验证NPC:已经证明的,无法在多项式时间复杂度内解决启发式算法近似算法暴搜参数算法如何评价算法优劣?简洁易懂效率高(时间复杂度和空间复杂度)算法运行时间的估计T(n)=copC(n)T(n)=c_{op}C(n)T(n)=copC(n)copc_{op}cop为一个基本操作...原创 2019-09-05 21:34:35 · 2250 阅读 · 0 评论 -
算法分析与实践——贪心算法
\quad贪心算法就是在当前状态小选择最好的选择达到局部最优,这种局部最优可能回达到全局最优,也可能不能达到。问题一、找零钱问题\quad假设硬币有5种面值,{1,5,10,25,100}\{1,5,10,25,100\}{1,5,10,25,100},每种硬币无限个,如何用最少数量的硬币来凑出给定数值M。\quad在这种面值的硬币组合下,贪心算法可行。但硬币组合不是这样的话可能就不可行。...原创 2019-09-10 19:27:08 · 1662 阅读 · 0 评论 -
算法分析与设计——分治法
\quad所谓分治法,就是将一个问题分而治之。具体分为三个步骤将问题划分为若干个子问题递归求解每个子问题,注意写好递归边界将若干子问题的解合并成问题的解问题一、逆序对\quad给定一个序列,例如a[5]={5,4,8,10,2}a[5]=\{5,4,8,10,2\}a[5]={5,4,8,10,2},找出这样的数对,i<j,a[i]>a[j]i&l...原创 2019-09-14 13:26:11 · 2111 阅读 · 0 评论 -
算法分析与设计——动态规划
\quad动态规划是将一个问题分解为若干不重合子问题,通过求解每个子问题的解来得到问题的解。问题一、带权区间调度问题\quad给定n个区间,每个区间包含起始时间、结束时间和权重,目的是找出若干个不重合的区间,使得这些区间权重和最大。不带权重的区间调度问题我们可以用贪心算法求解,即将区间按照结束时间从小到大排序,按照这个顺序依次选择与当前区间集不冲突的区间,这样能得到最多的不冲突的区间数量。\...原创 2019-09-20 21:34:50 · 2535 阅读 · 3 评论