算法笔记2_绪论

绪论

算法理论的两大论题:

  1. 算法设计—对于一个问题如何设计一个有效的算法
  2. 算法分析—如何评价或判断一个算法的优劣

问题的求解过程:
分析问题→设计算法→编写程序→整理结果

算法(Algorithm):对特定问题求解步骤的一种描述,是指令的有限序列。

算法的五大特性:
⑴ 输入:一个算法有零个或多个输入。
⑵ 输出:一个算法有一个或多个输出。
⑶ 有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
⑷ 确定性:算法中的每一条指令必须有确切的含义,对于相同的输入只能得到相同的输出。
⑸ 可行性:算法描述的操作可以通过已经实现的基本操作执行有限次来实现。

算法的描述方法
⑴ 自然语言
⑵ 流程图
⑶ 程序设计语言
⑷ 伪代码——算法语言

慕课:排序算法的效率:

以元素比较作基本运算
在这里插入图片描述

货郎问题

问题:有n个城市,已知任两个城市之间的距
离。求一条每个城市恰好经过1次的回路,使得总长度最小。

  • 输入:
    有穷个城市的集合 C = { c1, c2, …, cn},距离 d(ci,cj) = d(cj,ci)∈Z+,1<=i < j <=n

  • 解:
    1, 2 …, n 的排列 k1, k2, …, kn使得:
    在这里插入图片描述

  • 现状:至今没找到有效的算法

0-1背包问题

问题:有n个件物品要装入背包,第i 件物品的重量 wi, 价值vi,i=1,2,…,n. 背包最多允许装入的重量为B, 问如何选择装入背包的物品,使得总价值达到最大?

  • 实例:n=4,B=6,物品的重量和价值如下:
    在这里插入图片描述
  • 问题的解:0-1向量 <x1, x2, …, xn>
    xi=1 <=> 物品 i 装入背包
    在这里插入图片描述

双机调度

问题:有n项任务, 任务 i 的加工时间为 ti , ti∈Z+, i=1,2,…,n。用两台相同的机器加工,从0时刻开始计时,完成时间是后停止加工机器的停机时间。问如何把这些任务分配到两台机器上,使得完成时间达到最小?

  • 实例:
    任务集 S ={1,2,3,4,5,6}
    t1=3,t2=10,t3=6,t4=2,t5=1,t6=7
    解:
    机器1的任务:1, 2, 4
    机器2的任务:3, 5, 6
    完成时间 : max{ 3+10+2, 6+1+7 }=15
  • 解: 0-1向量 <x1, x2, …, xn>, xi=1表示任务i分配到第一台机器,i =1,2,…,n。
    不妨设机器1的加工时间<=机器2的加工时间,令T=t1+t2+…+tn,D=⌊T/2⌋ ,机器1的加工时间不超过D,且达到最大。

NP-hard问题

•这样的问题有数千个,大量存在于各个应用领域。
•至今没找到有效算法:现有的算法的运行时间是输入规模的指数或更高阶函数。
•至今没有人能够证明对于这类问题不存在多项式时间的算法。
•从是否存在多项式时间算法的角度看,这些问题彼此是等价的。这些问题的难度处于可有效计算的边界。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值