算法设计与分析基础(一)
什么是算法?
算法是有限条操作指令的集合,这些指令确定了解决问题的方法和步骤,能够对符合一定规范的输入,在有限的时间内获得所要求的输出。
算法的特征
-
确定性
算法中的每一个步骤,必须有确定含义,无二义性的实现,算法所处理的输入值域必须仔细定义。
-
多样性
算法的描述形式有多种,可能存在解决同一个问题的多种解法。针对同一个问题的算法,可能基于完全不同的解题思路,而且解题速度会有显著不同。
-
有穷性
指令是有限的,每条指令的执行包含有限的工作量,算法的整个指令序列的执行会在有限时间内结束。
-
输入、输出
一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的
算法的表述方法
以计算两数的最大公约数为例子。
-
伪代码
算法: GCD (m, n) /* 使用欧几里得算法计算m,n的最大公约数*/ /* 输入: 两个正整数 m, n */ /* 输出: m, n的最大公约数 */ begin while n ≠ 0 do begin r := m mod n; m:= n; n:=r end; return n; end.
-
流程图
相关作业和答案
-
写出将十进制正整数转换为二进制整数的标准算法。
a.用文字描述
b.用伪代码实现
- 文字描述:
- 伪代码实现
/*将十进制整数n转换为二进制整数算法*/ //输入:一个正整数 //输出:正整数n的相应二进制数 Algorithm DectoBin(n) Begin i :=n; j :=0; while (i≠ 0) do i := i/2; //将除数赋值给i B[j]:=i%2; //将余数存到数组里 j :=j+1; //然后数组元素个数加一 end; while (j > 0) do j :=j-1; Print B[j]; end; end
-
证明下列关于n个顶点二叉树高度的不等式
不等式右边的证明:法一:
直接证明法
当二叉树的每层只有一个结点时,达到最大高度 n-1,所以二叉树高度为h ≤ n-1,得证。
法二:
归纳法
n = 1时,h = 0,满足h ≤ n-1;
假设n = k时,h ≤ k - 1,记为h(k) ≤ k-1;
对于n = k+1,若n = k的二叉树为满二叉树,则h(k+1) = h(k)+1(解释:满二叉树的层数等于前一层+1),所以h(k+1) ≤ k;(把h = k - 1代入,就可以得到)若n = k的二叉树不为满二叉树,则h(k+1) = h(k),h(k+1) ≤ k - 1< k,此时满足。
综上,h ≤ n-1,二叉树除叶子节点外其他所有节点只有一个孩子节点时,取等号。
不等式左边的证明:
法一:
法二:
注意: