好的算法可能在数据规模不大的时候并无优势,但当我们处理大数据问题的时候,优势就极为明显了。
二分查找
二分查找有个前提条件是数组已经排序了,可以是数值排序,也可以是字母排序或其他的排序,但一定不能是杂乱无章的。二分查找相比较顺序查找而言,数据量越大,优势越明显,二分查找的时间复杂度是O(logN),底数是2,但对于算法复杂度而言,无论底数是多少,其复杂度都是O(logN)。那顺序查找的平均查找长度ASL是多少呢,假设每个元素出现的概率相等,那就是(1/n) * n*(1+n)/2 = (1+n)/2
如下图所示:
二分查找和顺序查找网易公开课视频
二叉树
树
利用递归定义树
子树不相交才是树,N个结点的树包含N-1条边
节点的度,注意和图的入度和出度的区别
树的层次是深度
儿子兄弟节点表示法,使用了二叉树链表
二叉树
度为2的树,称为二叉树。
二叉树和一般度为2的树的区别:有左右之分
二叉树每一层最多有
2
i
−
1
{2}^{i-1}
2i−1个节点,根节点是第一层,所以是
2
0
=
1
{2}^{0} = 1
20=1个。
完美二叉树和完全二叉树
注意完全二叉树只是要求序号和完美二叉树保持一致,下图中的完美二叉树隐去了右边一些树枝。
所以完美二叉树一定是完全二叉树,但反之不一定成立。
上图中完美二叉树的完整图
二叉树的存储
采用数组的形式:完全二叉树是最适合的方式。有两个规律:
- i节点对应的父节点是i/2向下去整;父节点的左子节点是 i ∗ 2 i*2 i∗2,右子节点是 2 ∗ i + 1 2*i +1 2∗i+1
- 如果不是完全二叉树,可以对缺失的点置为空来表示,但这样的带来的空间消耗就很大了。