【无标题】

动态规划

动态规划算法的实质是分治思想和解决冗杂,将待求解问题分解为更小的、相同的子问题,然后对问题进行求解,最终产生一个整体最优解。

  • 0-1背包问题

    目标函数: Max(Sum(xi*vi)),i=0...n,xi=0或1
    约束条件: Sum(xi*wi)<=W xi=0或1
    递归方程: 
    		c[0][j] = c[i][0] = 0
    					c[i-1][j]	j<wi
    		c[i][j] = {
    					Max(c[i-1][j],c[i-1][j-wi]+vi)	j>=wi
    时间复杂度: O(n*W)
    空间复杂度: O(n*W)
    
  • 斐波那契数列

  • 矩阵连乘问题 时:O(n) 空:O(n^2)

    定义一个二维数组m存储最少乘法次数,二维数组s存储最优决策并分别初始化为0;
    按照区间长度(即j-i)升序的原则,依次采用下式计算所有的m[i][j]和s[i][j]:
    m[i][j]=min{m[i][k]+m[k+1][j]+P[i-1]P[k]P[j]},i<=k<j   
    而s[i][j]设置为达到最小值的k值;根据从s[1][n]开始,从s的值依次构造最优解
    
  • 游艇出租站

    算法策略: 动态规划
    思想:动态规划算法的实质是分治思想和解决冗杂,将待求解问题分解为更小的、相同的子问题,然后对问题进行求解,最终产生一个整体最优解。
    数据结构: 二维数组dp[][]和r[][]
    算法步骤:
    void rent(){
            for(int d=3;d<=n;d++){//区间长度d
              for(int i=1;i<=n-d+1;i++){//状态起点i,终点j
                int j=i+d-1;
                for(int k=i+1;k<j;k++){//枚举决策点k 
                    if(dp[i][j]>dp[i][k]+dp[k][j])
                        dp[i][j]=dp[i][k]+dp[k][j];
                }
        	  }
    	  }
    }
    时间复杂度为O(n^3)
    空间复杂度平均为O(logn),最坏为O(n)
    

贪心法

贪心法是指在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,通过若干次的贪心选择而得出最优解或较优解的一种方法

  • 部分背包问题(阿里巴巴藏宝库)

    存储数据结构: 一维数组m 一维数组v
    贪心策略: 性价比(价值除以重量)最高的金币优先装入
    算法步骤: 把这n堆金币按照性价比排序,然后遍历,如果背包中剩余可以拿的重量>=这堆金币重量,就全拿,否则装满为止。
    
  • 加油站加油

    输入: 加满油可行驶的公里数
    输出: 加油站加油的次数
    数据结构: 数组
    算法设计策略: 贪心法--选择距自己最远的且能到达的加油站
    自然语言:到站后的剩余油量能到下一站,不加油;到站后的剩余油量到不了下一站,若加了油后到得了,则加油,若加了油后还是到不了,则退出
    

分治算法

把一个复杂的大问题分成多个规模较小的相同子问题,子问题相互独立,递归求解各子问题,直到最后各子问题可以简单地直接求解为止,然后归并各子问题的解得原问题的解

  • 快速排序

    最坏的情况下,基准元素选取均为极端值,而每找一个基准元素,都需要O(子序列长度)的时间,故最坏
      Tn = O(1),n=1   
    {
      T(n-1)+ O(n),n>1 
    Tn=O(n^2)
    同理最好情况为中值
      Tn = O(1),n=1
    {
      2T(n/2)+O(n),n>1 
     Tn=O(nlogn)
    平均情况为  Tn=O(nlogn)
    对于空间复杂度,与其递归深度相关,最好情况是中值
    此时S(n)=O(logn),最坏为极值,此时S(n)=O(n),均值为O(logn)
    
  • 二分查找

    自然语言描述:在一串有序排列好的数据中取出中间值x[mid]与待查找值z进行比较,如果z小于中间值,则在0~x[mid]中再取中间值进行比较,如果小于中间值,则在x[mid]和最大值中再取中间值进行比较。重复该过程直至完成查找。
    时间复杂度: O(logn)
    空间复杂度: 最好为O(1),最差为O(logn)
    

回溯法

回溯法从初始状态触发,在隐式图中以深度优先的方式搜索问题的解,当发现不满足求解条件时,就回溯,并尝试其他路径

  • n皇后问题

    时间复杂度:O(n^2)
    空间复杂度:O(n!)
    算法改进:利用约束条件和限界条件判断是否为可行解,从而避免了无效搜索,使时间复杂度变为O(n!)
    
  • 地图着色问题

    由于需要每点的每个邻接进行判断,以及给没上色的点上色,所以:
    时间复杂度: O(n)
    空间复杂度: O(n)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值