算法复习

这篇博客详细介绍了各种算法,包括衡量算法效率的时间复杂度和空间复杂度,以及汉诺塔和斐波那契数问题。接着,讨论了蛮力法中的排序算法和字符串匹配,接着讲解了减治法在插入排序和拓扑排序中的应用。还涵盖了分治法,如大整数乘法和矩阵乘法。此外,提到了动态规划,如0-1背包问题和Floyd算法。最后,强调了贪心算法和动态规划的区别及最优子结构的重要性。
摘要由CSDN通过智能技术生成

第1-2章:

衡量算法:时间复杂度和空间复杂度

时间复杂度:重复基本操作的运行的次数

空间复杂度:一次基本操作需要执行的步骤次数

增长次数:log2n < n < n*log2n < n^2 < n^3 < 2^n < n!

最优情况:算法运行最快的时候。

最差情况:算法运行时间最长的时候。

平均效率:在典型或随机的情况下,算法会是什么情况。(顺序查找平均效率:(p*(n+1)/2) +n*(1-p) )

preview

渐进符号的含义

O(读作“O”) 算法最坏情况的度量

Ω (读作“omega”) 算法最好情况下的度量

Θ (读作“theta”) 算法效率的区间,不是最好也不是最坏

汉诺塔问题

在A中有n个盘子,把n个盘子移动到C中:

  1. 把 n-1 个盘子移动到B中,再把第 n 个移动到C中;
  2. 把 n-2 个盘子移动到A中,再把第 n-1 个移动到C中;
  3. 类推;

斐波那契数问题

设f(1) = 1,f(2) = 1;

则 f(n) = f(n-1) + f(n-2);

第3章 蛮力法

选择排序

算法思想:选择排序,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。

冒泡排序

依次相邻两个比较,直到有序。

字符串匹配问题

给定一个n个字符组成的串(文本),一个m个字符的串(模式),从文本中寻找匹配模式的子串。

蛮力字符串匹配: 将模式对准文本的前m个字符,然后从左到右匹配每一对相应的字符,直到m对字符全部匹配,则成功匹配;如果遇到一对不匹配的字符,然后模式右移一位,然后从模式的第一个字符开始,继续匹配。

百钱买百鸡

百钱百鸡问题。中国古代数学家张丘建在他的《算经》中提出了著名的“百钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?

算法2如下:

main(   )
{  
	int x,y,z;
	for(x=1;x<=20;x=x+1)
		for(y=1;y<=33;y=y+1)
		{ 
			z=100-x-y;
			if(z mod 3==0 and 5*x+3*y+z/3==100) 
			{
				print(the cock number is",x)
				print(the hen number is", y);
				print(the chick number is "z);
			}
		}
}

算法分析:以上算法只需要枚举尝试2033=660次。实现时约束条件又限定Z能被3整除时,才会判断“5x+3*y+z/3=100”。这样省去了z不整除3时的算术计算和条件判断,进一步提高了算法的效率。

DFS和BFS

DFS: 二叉树的前中后序遍历

class Solution {
   
    public int maxDepth(TreeNode root) {
   
        if(root == null) return 0;
        return Math.max(maxDepth(root
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值