几种常见算法的介绍及复杂度分析_第1页
几种常见算法的介绍及复杂度分析_第2页
几种常见算法的介绍及复杂度分析_第3页
几种常见算法的介绍及复杂度分析_第4页
几种常见算法的介绍及复杂度分析_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、几种常见算法的介绍及复杂度分析1. 基本概念1.1 稳定排序 (stable sort)和非稳定排序 稳定排序是所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序, 。反 之,就是非稳定的排序。比如:一组数排序前是a1,a2,a3,a4,a5,其中 a2=a4,经过某种排序后为 a1,a2,a4,a3,a5,则我们说这种排序是稳定的,因为a2排序前在 a4的前面,排序后它还是在 a4的前面。假如变成 a1,a4,a2,a3,a5就不是稳定的了。1.2 内排序 ( internal sorting ) 和外排序 ( external sorting) 在排序过程中, 所有需要排序的

2、数都在内存, 并在内存中调整它们的存储顺序, 称为内排序; 在排序过程中, 只有部分数被调入内存, 并借助内存调整数在外存中的存放顺序排序方法称 为外排序。1.3 算法的时间复杂度和空间复杂度 所谓算法的时间复杂度,是指执行算法所需要的计算工作量。 一个算法的空间复杂度,一 般是指执行这个算法所需要的内存空间。2. 几种常见算法2.1 冒泡排序( Bubble Sort ) 冒泡排序方法是最简单的排序方法。 这种方法的基本思想是, 将待排序的元素看作是竖着排 列的 “气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个 “气泡 ” 序列处理若干遍。 所谓一遍处理, 就是自底向上

3、检查一遍这个序列, 并时刻注意两个相邻的 元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即 “轻”的元素在下面, 就交换它 们的位置。显然,处理一遍之后, “最轻 ”的元素就浮到了最高位置;处理二遍之后, “次轻 ” 的元素就浮到了次高位置。在作第二遍处理时, 由于最高位置上的元素已是 “最轻 ”元素, 所 以不必检查。一般地,第 i 遍处理时,不必检查第 i 高位置以上的元素,因为经过前面 i-1 遍的处理,它们已正确地排好序。冒泡排序是稳定的,算法时间复杂度是O(n 2) 。2.2 选择排序( Selection Sort ) 选择排序的基本思想是对待排序的记录序列进行n-1遍的处理

4、,第 i 遍处理是将 Li.n 中最小者与 Li 交换位置。这样,经过 i 遍处理之后,前 i 个记录的位置已经是正确的了。 选择排序是不稳定的,算法复杂度是O(n 2 ) 。2.3 插入排序 ( Insertion Sort ) 插入排序的基本思想是, 经过 i-1遍处理后 ,L1.i-1己排好序。第i遍处理仅将 Li插入 L1.i-1 的适当位置,使得 L1.i 又是排好序的序列。要达到这个目的,我们可以用顺序比较的方 法。首先比较 Li和 Li-1 ,如果 Li- 1 Li,则 L1.i已排好序,第 i遍处理就结束了;否 则交换 Li 与 Li-1 的位置,继续比较 Li-1 和 Li-

5、2 ,直到找到某一个位置 j(1 j -1)i,使得 Lj Lj+时1为止。图 1演示了对 4个元素进行插入排序的过程,共需要 (a),(b),(c)三次插入。 直接插入排序是稳定的,算法时间复杂度是 O(n 2) 。2.4 堆排序 堆排序是一种树形选择排序,在排序过程中,将An 看成是完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系来选择最小的元素。 堆排序是不稳定的,算法时间复杂度 O(nlog n) 。Al.m ,Am+1.h ,2.5 归并排序 设有两个有序(升序)序列存储在同一数组中相邻的位置上,不妨设为 将它们归并为一个有序数列,并存储在Al.h 。其时间

6、复杂度无论是在最好情况下还是在最坏情况下均是 O(nlog2n) 。2.6 快速排序 快速排序是对冒泡排序的一种本质改进。 它的基本思想是通过一趟扫描后, 使得排序序列的 长度能大幅度地减少。 在冒泡排序中, 一次扫描只能确保最大数值的数移到正确位置, 而待 排序序列的长度可能只减少 1。快速排序通过一趟扫描, 就能确保某个数 (以它为基准点吧) 的左边各数都比它小, 右边各数都比它大。 然后又用同样的方法处理它左右两边的数, 直到 基准点的左右只有一个元素为止。快速排序是不稳定的,最理想情况算法时间复杂度 O(nlog2n) ,最坏 O(n 2) 。2.7 希尔排序在直接插入排序算法中,每次

7、插入一个数,使有序序列只增加1个节点,并且对插入下一个数没有提供任何帮助。如果比较相隔较远距离(称为 增量)的数,使得数移动时能跨过多 个元素,则进行一次比较就可能消除多个元素交换。 D.L.shell 于 1959年在以他名字命名的 排序算法中实现了这一思想。 算法先将要排序的一组数按某个增量 d 分成若干组, 每组中记 录的下标相差 d. 对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组 中再进行排序。当增量减到 1时,整个要排序的数被分成一组,排序完成。 希尔排序是不稳定的,其时间复杂度为 O(n 2) 。表一 各种排序比较排序类别时间复杂度空间复杂度稳定1插入排序O(n

8、2)12希尔排序O(n2)13冒泡排序O(n2)14选择排序O(n2)15快速排序O(Nlogn)O(logn)6堆排序O(Nlogn)17归并排序O(Nlogn)O(n)1.1 算法算法: 是解题方案的准确而完整的描述。 通俗地说,算法就是计算机解题的过程。 算法 不等于程序,也不等于计算方法,程序的编制不可能优于算法的设计。(1)确定性,算法中每一步骤都必须有明确定义,不允许有模棱两可的解释,不允许 有多义性;(2)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止;(3)可行性,算法原则上能够精确地执行;( 4)拥有足够的情报。 算法效率的度量算法复杂度:算法时间复杂度和算

9、法空间复杂度。 算法时间复杂度: 指执行算法所需要的计算工作量。 即算法执行过程中所需要的基本运 算次数。算法空间复杂度:指执行这个算法所需要的内存空间。1.2 数据结构的基本概念 数据结构:指相互有关联的数据元素的集合。数据结构研究的三个方面:(1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;(2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;(3)对各种数据结构进行的运算。线性结构的条件, (一个非空数据结构) :( 1)有且只有一个根结点; (2)每一个结点最多有一个前件,也最多有一个后件。 非线性结构:不满足线性结构条件的数据结构。1.3 线性表

10、及其顺序存储结构 线性表的顺序存储结构具有以下两个基本特点: (1)线性表中所有元素所占的存储空间是连续的; (2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。 顺序表的运算:查找、插入、删除。1.4 线性链表数据结构中的每一个结点对应于一个存储单元, 这种存储单元称为存储结点, 简称结点。 结点由两部分组成:( 1) 用于存储数据元素值,称为数据域;( 2) 用于存放指针,称为指针域,用于指向前一个或后一个结点。在链式存储结构中, 存储数据结构的存储空间可以不连续, 各数据结点的存储顺序与数 据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。链式存储方式即

11、可用于表示线性结构,也可用于表示非线性结构。 线性链表的基本运算:查找、插入、删除。1.5 栈和队列栈:限定在一端进行插入与删除的线性表。其允许插入与删除的一端称为栈顶,用指针 top 表示栈顶位置。 不允许插入与删除的另一端称为栈底,用指针 bottom 表示栈底。 栈按照“先进后出”( FILO)或“后进先出”( LIFO)组织数据,栈具有记忆作用。 栈的存储方式有顺序存储和链式存储。栈的基本运算:( 1) 入栈运算,在栈顶位置插入元素;( 2) 退栈运算,删除元素(取出栈顶元素并赋给一个指定的变量);( 3) 读栈顶元素,将栈顶元素赋给一个指定的变量,此时指针无变化。 队列:指允许在一端

12、(队尾)进入插入,而在另一端(队头)进行删除的线性表。用 rear 指针指向队尾,用 front 指针指向队头元素的前一个位置。 队列是“先进先出”( FIFO)或“后进后出”( LILO)的线性表。 队列运算:( 1) 入队运算:从队尾插入一个元素 ;( 2) 退队运算:从队头删除一个元素 ; 计算循环队列的元素个数:“尾指针减头指针”,若为负数,再加其容量即可。即:当 尾指针 - 头指针 0 时,尾指针 -头指针当 尾指针 - 头指针 0 时,尾指针 -头指针 +容量 计算栈的个数: 栈底 栈顶 +11.6 树与二叉树 1、树的基本概念 树是一种简单的非线性结构,其所有元素之间具有明显的层

13、次特性。 在树结构中,每一个结点只有一个前件,称为父结点。 没有前件的结点只有一个,称为树的根结点,简称树的根。 每一个结点可以有多个后件,称为该结点的子结点。没有后件的结点称为叶子结点。 在树结构中,一个结点所拥有的后件的个数称为该结点的度。 来源:考试大 所有结点中最大的度称为树的度。树的最大层次称为树的深度。2、二叉树及其基本性质 满足下列两个特点的树,即为二叉树 ( 1) 非空二叉树只有一个根结点; ( 2) 每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。二叉树基本性质:性质1 在二叉树的第 k 层上,最多有 个结点。性质 2 深度为 m的二叉树最多有个个结点。性质 3

14、在任意一棵二叉树中,度数为 0的结点(即叶子结点)总比度为 2的结点多一个。性质 4 具有 n 个结点的二叉树,其深度至少为 ,其中 表示取的整数部分3、满二叉树与完全二叉树 满二叉树:除最后一层外,每一层上的所有结点都有两个子结点。 完全二叉树: 除最后一层外, 每一层上的结点数均达到最大值; 在最后一层上只缺少右边的若干结点。二叉树的遍历是指不重复地访问二叉树中的所有结点。二叉树的遍历可以分为以下三种:( 1)前序遍历( DLR):若二叉树为空,则结束返回。否则:首先访问根结点,然后遍 历左子树,最后遍历右子树;并且,在遍历左右子树时,仍然先访问根结点,然后遍历左子 树,最后遍历右子树。(

15、 2)中序遍历( LDR):若二叉树为空,则结束返回。否则:首先遍历左子树,然后访 问根结点,最后遍历右子树;并且,在遍历左、右子树时,仍然先遍历左子树,然后访问根 结点,最后遍历右子树。( 3)后序遍历( LRD):若二叉树为空,则结束返回。否则:首先遍历左子树,然后遍 历右子树,最后访问根结点,并且,在遍历左、右子树时,仍然先遍历左子树,然后遍历右 子树,最后访问根结点。该二叉树前序遍历为: F C A D B E G H P 该二叉树中序遍历为: A C B D F E H G P 该二叉树后序遍历为: A B D C H P G E F1.7 查找技术 查找:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素。 查找结果:(查找成功:找到;查找不成功:没找到。 ) 平均查找长度:查找过程中关键字和给定值比较的平均

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论