痛定思痛,开启算法之路(十一)

第三章 算法分析

第三章虽然没有第二章那么抽象,可是理解起来也没有那么容易,同样需要后续好好整理深化!

这里写图片描述
这里写图片描述
3.4 求和
这里写图片描述
这里写图片描述
第二种解法其实是一种应用的比较多的,即直观又便于操作:增加或减少项数然后做差,或者是乘除较小系数做差,同样都是消去大部分共同项或者转化出自身形式的倍数;再看实例:
这里写图片描述

3.5 递推关系
递推从前往后一步一步获得最终结果,对于计算机来说可以循环往复不及其烦,而如何以更简单、直接的方式来获得解递推关系式的通解呢:

3.5.1 巧妙的猜测
当并不是试图得到精确解的求解一大类递推关系时,比如应用此法寻求算法的上界时其能应用的更好:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

3.5.2 分治关系
分治法,将一个问题分割成几个子问题,其中对每个子问题也将被递归求解,最后再组合子问题的解得到原始问题的解;
假设分为a个子问题,每个子问题的规模为原始问题的1/b,且设最后用于组合问题的算法运行时间为cn^k;则
这里写图片描述
这里写图片描述

3.5.3 涉及全部历史的递推关系
其为依赖于先前所有函数值的函数:
这里写图片描述
这里写图片描述
注意递归开始范围以及所给递推式所含有的参数;
再看一个更加复杂的此类函数:
这里写图片描述
这里写图片描述
这里写图片描述

3.6 一些有用的证明论据

这里写图片描述
这里写图片描述

第四章 数据结构简介

    元素、数组、记录、链表、树(两种表示方法:1)用指针表示:普通树表示、左子右兄弟表示;
    2)数组表示:若节点v放于A[i],则其左子放于A[2i],右子放于A[2i+1]);

4.3.2 堆:这里介绍的是大根堆(即所有父节点关键字大于子节点),其基本操作算法原理接触较多且比较简单不再赘述,伪代码如下(删除、插入):
这里写图片描述
这里写图片描述

4.3.3 二叉搜索树

这里写图片描述
对于二叉树的基本操作都很熟悉且比较简单再次就不在详细论述,仅附带基本伪代码如下(搜索、插入、删除):
这里写图片描述
这里写图片描述
对于树的删除算法稍微复杂一些,当树非空且根不为所找x时,对于分支节点分3种情况:只有右子树、只有左子树、左右子树均有(对于前两种情况也相对简单:直接用其孩子节点代替其本身节点位置即可;对于左右都有子节点的节点:需要遍历其相应左右子树,找到与其节点关键字大小最相近的节点x(即其前驱),然后用此节点替换即可,如下图删除节点B,找到其前驱为x,令B与X交互,并使此时B的父节点右指针指向空即相当于删除节点B)
这里写图片描述
这里写图片描述

4.3.4 AVL树

    平衡树同样作为一种二叉搜索树,其每一个节点的左右子树高度之差最多为1,对于每次树的操作(插入、删除)之后都需要对数重新进行平衡旋转操作,
对于其具体操作稍有些复杂但还是比较容易理解,且在数据结构中有详细讲解,再次不再赘述;

这里写图片描述

4.4 散列

    散列作为一种常见的数据存储结构,是算法中非常有用的一种数据结构,主要用于插入和搜索,其部分变形也可用于删除;
    其处理方法和思想非常简单直观,而散列过程中冲突是不可避免的,对于不同的散列方法其处理方法也是多种多样的,同样再数据结构当中也有详尽的介绍;

这里写图片描述
这里写图片描述
解决冲突(分离链接法(链地址法)、线性探测法、双重散列法)
这里写图片描述

猜你喜欢

转载自blog.csdn.net/enjoy_endless/article/details/79199369
今日推荐