算法的定义从广泛上来说,可以说是完成一件事情的方法或步骤。
在计算机的角度说,算法是一组有限的指令集组成的过程。 -- 有限的。
算法有五个特性: 确定性,可行性,有穷性,and 输入,输出!
必须指出的是,算法可以改变我们程序的运行时间,好的算法可以节省我们很多时间,使我们的程序运行起来更行云流水,得心应手。
但是算法不是影响我们程序运行效果的唯一因为,受其他因为影响,比如机器质量,语言,编译程序,程序员的水平,and so on。
我们可以从时间复杂性和空间复杂性来评估(estimate)算法的性能,同时我们也应该看到算法的正确性,健壮性,易读性也是其性能的体现。
一般来说我们,我们估计时间采用的是近似估计,如O(n),欧米伽n,等等等等。
我们可以可以通过计算出一个基本运算(又称为元运算)的次数,来计算出时间的数学表达式,并且可以通过取极限来算出时间阶数,即O(n)等。
如log(n2)/n(当n趋于无穷的时候)=0 所以log(n2)=O(n); 如果是无穷则相反,如果得出一个常数,那么具有同样的级别。
链表---链表由有限的节点序列组成。有表头,有前后继关系。
支持操作:插入,删除。 (比数组节省时间,省却数据搬动数据的时间)。
扩展:在链表上加一些限制即可演化成堆栈和队列。
堆栈:一种只允许在称为栈顶的一端进行插入和删除运算的链表,也可用数组实现。
支持操作:将元素压入堆栈和从堆栈中弹出元素。
POP(S),将返回并弹出栈顶元素(永久移除)。
树:一棵树就是不包含回路的连通无向图。
关键特性:假设T是一棵有n个顶点的树,那么
a) T中任意两点有唯一的路径
b)T恰好有n-1条边
c)在T中假如一条边将产生一个回路
根树:有根的树,至少一个顶点。不能为空树。
二叉树:有根,可能有左右子树。
满二叉树:内部节点(除叶子之外的节点称为内部节点)都有左右两个孩子。
完全二叉树:满二叉树并且叶子拥有相同的深度。
二叉搜索树:v左边的子树内容比v小,右边比v大,一个集合对应的二叉搜索树不是惟一的。
数学关系:
1.第j层最多有2j个结点。
2.任何有n个顶点的二叉树高度至少是log(n)取下限,最多是n-1。
3.完全二叉树或几乎完全二叉树高度为log(n)取下限。
4.完全二叉树中,叶子树等于内部节点+1