算法设计与分析——算法基础初步了解

本文深入探讨了算法的基本概念,包括其确定性、可行性和输入输出特性。以排序算法为例,介绍了归并排序的原理和伪代码,并讨论了动态规划、贪心策略在解决问题中的应用。此外,还强调了算法正确性分析中的循环不变性法。
摘要由CSDN通过智能技术生成

算法的概念

算法:一个有计算步骤构成的序列,可以将一组输入值转换成相应的输出值。或可以用例解决一个明确的问题。
问题:输入及相应输出的描述:

 算法的特点:确定性、可行性、输入和输出及有穷性。

正确的算法;停机并给出符合问题的定义的输出。

研究算法的基本意义

算法涉及到解决问题的:正确性、可行性以及效率。

以效率为例:对1M数据进行排序

 算法与其他技术的关系

硬件设计——布线算法

图形界面——图形生成、处理等

面向对象——编译器设计

局域网和广域网——冲突避免、路由、交换

算法无处不在。

算法设计方法简介

增量式

逐步求解的过程,如插入排序

思考题:

给定一个整数数组A,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

输入:[-2,1,-3,4,-1,2,1,-5,4]

输出:6
解释:连续子数组 | [4,-1,2,1] 的和最大,为6。

 分治策略:一归并排序为例

归并过程示意图:

 

 伪码:

1: n1←q − p + 1
2: n2←r − q
3: create arrays L[1 · · · n1 + 1] and R[1 · · · n2 + 1]
4: for i←1 to n1 do
5: L[i]←A[p + i − 1]
6: end for
7: for j←1 to n2 do
8: R[j]←A[q + j]
9: end for
10: L[n1 + 1]←∞
11: R[n2 + 1]←∞
12: i←1
13: j←1
14: for k←p to r do
15: if L[i] ≤ R[j] then
16: A[k]←L[i]
17: i←i + 1
18: else
19: A[k]←R[j]
20: j←j + 1
21: end if
22: end for
23: if p < r then
24: q←b p+r 2 c
25: MERGE-SORT(A, p, q)
26: MERGE-SORT(A, q + 1, r)
27: MERGE(A, p, q, r)
28: end if

动态规划:

一种强有力的技术;

从小的子问题的解逐步计算出大问题的解;

计算过程通过动态填表实现;

贪心策略:

最常用的启发策略;

但常常"贪心"不能保证得到好的结果

有些问题满足一些特定性质,可以保证"贪心"一定可以产生最好的结果。

搜索

几乎是通用的办法;

不过开销巨大

循环不变性法

算法正确性分析循环是关键、

以插入排序正确性分析:

L emma 1
在每次循环开始时(第j步) ,A[1,j- 1]是有序的。
Proof.
初始时: A[1,j- 1]中只有一个数,显然成立。
保持性:在循环迭代开始前成立,迭代中,while循环找到正确位
置插入A[j]。所以,这步迭代后命题仍成立。
终止时:将循环退出时的j值带人引理,得到插入排序的正确性。

分析算法,归纳出循环不变性(循环迭代过程,始终成立的命
题)。
 Initialization:在第一次循环开始前不变性是满足的。
 Maintenance:如果在某次迭代前不变性满足,在这次迭代后也
满足不变性。
 Termination:循环结束后,不变性可以提供程序正确性的有用信
息。
例2,归并过程的正确性
Lemma 2
在MERGE中,第14步循环每次开始时,有Ap, k―1]是有序的;

Alp, k一1]是最小的k 一 p个元素;

L[i]是L中待合并的元素中最小的;

R[j]是R中待合并的元素中最小的。

Initialization: k = p,i= 1,j = 1,显然成立。o Maintenance:若L[团]≤R[i],则

L[i]是所有剩下的元素中最小的;

而A[p….k-1]中的元素均大于等于L[i],因此。A[p…k]是所有元素中最小的k 一p+1个元素;

由于L中的数是排好序的,因此L[+1]将是L中剩下元素中最小的;

R[i]仍然是R中最小的。

若L[团]>R[i],可以进行类似讨论。

Termination:循环结束后,k=r+1,代入不变性1,得A[p…r]有序。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值