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

下载本文档

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

文档简介

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) 冒泡排序方法是最简单的排序方法。 这种方法的基本思想是,最轻”的元素就浮到了最高位置;处理二遍之后, “次轻 ” 最轻”元素, 所 i-1列的 “气泡 ”,较

3、小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个 序列处理若干遍。 所谓一遍处理, 就是自底向上检查一遍这个序列, 元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即 们的位置。显然,处理一遍之后, 的元素就浮到了次高位置。在作第二遍处理时, 由于最高位置上的元素已是 以不必检查。一般地,第 i 遍处理时,不必检查第 i 高位置以上的元素,因为经过前面 遍的处理,它们已正确地排好序。冒泡排序是稳定的,算法时间复杂度是0(n人2)。2.2 选择排序( Selection Sort)选择排序的基本思想是对待排序的记录序列进行n-1遍的处理,第i遍处理是将Li.n中最小者与 Li 交换

4、位置。这样,经过 i 遍处理之后,前 i 个记录的位置已经是正确的了。选择排序是不稳定的,算法复杂度是0(n人2 )。2.3 插入排序 ( Insertion Sort)+h丟两共需要插入排序的基本思想是,经过i-1遍处理后丄1.i-1己排好序。第i遍处理仅将Li插入L1.i-1 的适当位置,使得 L1.i 又是排好序的序列。要达到这个目的,我们可以用顺序比较的方 法。首先比较Li和Li-1,如果Li- 1 < Li,贝U L1.i已排好序,第i遍处理就结束了;否 则交换Li与Li-1的位置,继续比较 Li-1和Li-2,直到找到某一个位置j(1 wj琲)i,使得 Lj w Lj+时为止

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

6、是对冒泡排序的一种本质改进。 它的基本思想是通过一趟扫描后, 使得排序序列的 长度能大幅度地减少。 在冒泡排序中, 一次扫描只能确保最大数值的数移到正确位置,而待排序序列的长度可能只减少 1。快速排序通过一趟扫描, 就能确保某个数 (以它为基准点吧) 的左边各数都比它小, 右边各数都比它大。 然后又用同样的方法处理它左右两边的数,直到O(nlog2n),最坏 0(n 人2)。基准点的左右只有一个元素为止。 快速排序是不稳定的,最理想情况算法时间复杂度2.7 希尔排序1个节点,并且对插入下一个 增量)的数,使得数移动时能跨过多 D.L.shell 于 1959年在以他名字命名的排 每组中记录 在

7、每组中再在直接插入排序算法中,每次插入一个数,使有序序列只增加 数没有提供任何帮助。如果比较相隔较远距离(称为 个元素, 则进行一次比较就可能消除多个元素交换。 序算法中实现了这一思想。 算法先将要排序的一组数按某个增量 d 分成若干组,排序完成。的下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量对它进行, 进行排序。当增量减到 1时,整个要排序的数被分成一组, 希尔排序是不稳定的,其时间复杂度为0(n人2)。表一 各种排序比较算法: 是解题方案的准确而完整的描述。 通俗地说, 不等于程序,也不等于计算方法,程序的编制不可能优于算法的设计。确定性,(1) 有多义性;算法就是计算机解

8、题的过程。 算法算法中每一步骤都必须有明确定义,不允许有模棱两可的解释,不允许有穷性, 可行性, 拥有足够的情报。算法效率的度量 算法时间复杂度: 算次数。算法空间复杂度:1.2 数据结构的基本概念4)算法必须能在有限的时间内做完,即能在执行有限个步骤后终止;算法原则上能够精确地执行;算法复杂度:算法时间复杂度和算法空间复杂度。指执行算法所需要的计算工作量。 即算法执行过程中所需要的基本运指执行这个算法所需要的内存空间。排序类别时间复杂度空间复杂度稳定1插入排序0(n2)1V2希尔排序0(n2)1X3冒泡排序0(n2)1V4选择排序0(n2)1X5快速排序0(Nlogn)0(logn)X6堆排

9、序0(Nlogn)1X7归并排序0(Nlogn)0(n)V算法数据结构:指相互有关联的数据元素的集合。 数据结构研究的三个方面:1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;(3)对各种数据结构进行的运算。线性结构的条件,(一个非空数据结构):(1)有且只有一个根结点;(2)每一个结点最多有一个前件,也最多有一个后件。非线性结构:不满足线性结构条件的数据结构。1.3线性表及其顺序存储结构线性表的顺序存储结构具有以下两个基本特点:(1)线性表中所有元素所占的存储空间是连续的;(2)线性表中各数据元素在存储

10、空间中是按逻辑顺序依次存放的。 顺序表的运算:查找、插入、删除。1.4线性链表数据结构中的每一个结点对应于一个存储单元,这种存储单元称为存储结点, 简称结点。结点由两部分组成:(1)用于存储数据元素值,称为数据域;(2)用于存放指针,称为指针域,用于指向前一个或后一个结点。在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。链式存储方式即可用于表示线性结构,也可用于表示非线性结构。 线性链表的基本运算:查找、插入、删除。1.5栈和队列人拱 退桃IHlOfiT%411幻楞虑 holWTT*j! *

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

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

13、点的子结点。没有后件的结点称为叶子结点。 在树结构中,一个结点所拥有的后件的个数称为该结点的度。来源:考试大所有结点中最大的度称为树的度。树的最大层次称为树的深度。RKDn0TA回0F2、二叉树及其基本性质即为二叉树满足下列两个特点的树,(1)非空二叉树只有一个根结点;且分别称为该结点的左子树与右子树。(2)每一个结点最多有两棵子树,二叉树基本性质: 性质1在二叉树的第k层上,最多有肝(心)个结点。性质2深度为m的二叉树最多有个2"-'个结点。性质3在任意一棵二叉树中,度数为 0的结点(即叶子结点)总比度为 2的结点多一个。性质4具有n个结点的二叉树,其深度至少为,其中表示取

14、檢泸的整数部分3、满二叉树与完全二叉树满二叉树:除最后一层外,每一层上的所有结点都有两个子结点。完全二叉树:除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。历右子树,最后访问根结点, 子树,最后访问根结点。并且,在遍历左、右子树时,En *:I5A二叉树的遍历是指不重复地访问二叉树中的所有结点。二叉树的遍历可以分为以下三种:(1)前序遍历(DLR:若二叉树为空,则结束返回。否则:首先访问根结点,然后遍 历左子树,最后遍历右子树;并且,在遍历左右子树时,仍然先访问根结点,然后遍历左子 树,最后遍历右子树。(2)中序遍历(LDR:若二叉树为空,则结束返回。否则:首先遍历左子树,然后访 问根结点,最后遍历右子树;并且,在遍历左、右子树时,仍然先遍历左子树,然后访问根 结点,最后遍历右子树。(3)后序遍历(LRD:若二叉树为空,则结束返回。否则:首先遍历左子树,然后遍 仍然先遍历左子树,然后遍历右该二叉树前序遍历为:该二叉树中序遍历为:该二叉树后序遍历为:1.7查找技术查找:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素。 查找结果:(查找成功:找到;查找不成功:没找到。)平均查找长度:查找过程中关键字和给定值比较的平均次数。查找

温馨提示

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

评论

0/150

提交评论