数据结构--网课笔记(二)

数据结构--网课笔记(二)

绪论

迭代与递归

数组求和:迭代

减而治之:大问题划分为两个子问题——其一平凡,另一规模缩减。
数组求和:线性递归
算法执行时间为每个递归实例累计所需时间。

数组倒置
任给数组A[0, n),将其前后颠倒
void reverse(int* A, int lo, int hi)
递归版
if(lo < hi)
{
swap(A[lo], A[hi]);
reverse(A, lo + 1, hi - 1);
}

分而治之
求解大规模的问题,将其分为若干子问题,规模大体相当。

数组求和:二分递归
求解sum(A, lo, hi)需递归求解sum(A, lo, mi)和sum(A, mi + 1, hi)

Max2:迭代1
循环找出最大值,然后最大值左边和右边循环找出第二大的值。

Max2:迭代2

void max2(int A[], int lo, int hi, int &x1, int &x2)
{
	if(A[x1 = lo] < A[x2 = lo + 1])
		swap(x1, x2);
	for(int i = lo + 2; i < hi; i++)
		if(A[x2] < A[i])
			if(A[x1] < A[x2 = i])
				swap(x1, x2);
}

动态规划

通过递归找出了算法的本质,初步了解后再将其等效地转化为迭代的形式。
递归版fib()低效,原因在于有大量递归实例被重复调用。
解决方法A:记忆法。将已计算的结果制表备查,
解决方法B:动态规划。由自顶下下的递归,改为自底向上的迭代。

LCS:递归
序列A[0, n]和B[0, m]
0)若m = -1 或 n = -1,则取空序列("")
1)若A[n] = ‘X’ = B[m],则取作LCS(A[0, n), B[0, m)) + ‘X’
2)A[n]≠B[m],则在LCS(A[0, n), B[0, m])与LCS(A[0, n], B[0, m))中取更长者

LCS:迭代

递归:设计出可行且正确的解
动态规划:消除重复计算,提高效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值