算法设计与分析

期末一天一本换时间段方案
开始决定写一些比较理论的东西,现在觉得还是写一些比较实例化的东西比较好。

算法概述

算法与程序

算法是由若干条指令组成的有穷序列

性质

  • 输入:零个或多个 由外部提供的量作为输入
  • 输出:至少产生一个量作为输出
  • 确定性:指令清晰无歧义
  • 有限性:每条指令执行次数、时间有限
算法复杂性分析

算法所需要的计算机资源(处理器资源、存储器资源)

空间复杂性和时间复杂性

  • C:复杂性 C=F(N,I,A) 简化写法 C=F(N,I)
  • T:时间复杂性 T=F(N,I)(主要讨论目标)
  • S:空间复杂性 S=F(N,I)
  • N:问题规模
  • I : 输入
  • A:算法
时间复杂性的具体化
  • 令元计算:O1,O2,O3,…Ok
  • -执行时间分别为:t1,t2,t3,…tk
  • 假设给定一个算法A,执行Oi的次数为ei,那么,T(N,I)=

NP完全性理论

NP类问题:非确定性多项式问题

非确定性算法将问题的求解分为两个阶段:
  • 猜测

猜测阶段是非确定性的,给出问题的一个猜测

  • 验证

算法的验证阶段是确定性的,验证猜测阶段给出的解的正确性

给定一个算法A,A是解一个判定问题Q的非确定性算法, 如果A的验证阶段可以在多项式时间内完成,称A是一个多项式时间非确定性算法,称Q是非确定性多项式时间可解的。

P类问题:多项式问题

递归与分治策略

递归的概念

递归算法: 直接或间接调用自身的算法
递归函数: 用函数自身给出定义的函数

分治法的基本思想

将一个规模为n的问题分解为k个规模较小的子问题,这些问题互相独立且与原问题相同。递归解问题,然后将子问题合并得到解。

二分搜索技术

动态规划


0-1背包问题

贪心算法


散装背包问题

区别于0-1背包问题,这个是可以切开放的。假如说有5个物品

质量(kg)368121
价格632438
单位价格20.530.258

首先算一下单位价格,也就是相对来说放进去最值的,因为是可以拆开的,所以尽管挑单位价值最大的放,先放8的再放3的,再放2的,一直放到背包满为止。


删数问题

给定一个数,删除掉指定个数个数字之后组成新数,求解使得所得数最小的方案:

178435为例,删除四个数字,使得到的新数最小。这里用眼直接看都可以得出是13最小。

这里需要清楚,我们需要删除的数字并不一定是最大的,比如给定879,删除一个数字,删除最大的9得到87,并不如删除8得到的79小。这里需要拐一个弯,就是从高位往低位数,如果高位的数字比低位的大,就删掉高位的。为什么要这样呢?

还是拿178435,我们先删除掉一位,那么剩下的只有5位,如果我们删掉1,那么7将会变成最高位,这显然是不划算的。如果删掉7,那么8将会变成次高位,同一位置显然小一些更加好,所以我们删掉8。

当然你会发现,最佳结果是13,也就是7到最后还是会被删除掉。我们先删除8只是一个贪心的做法,并不影响最终的结果。如果我没记错,这应该叫做贪心选择性。每一次删除一个数字时候都选择最佳方案删应该就是最优化子结构


回溯法

分支限界法

随机化算法

线性规划与网络流

串与序列的算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值