随笔分类 -  算法

排序
摘要:排序算法常用的有:1、插入排序(直接插入排序、折半插入排序、希尔排序);2、交换排序(起泡排序、快速排序);3、选择排序(直接选择排序、堆排序);4、归并排序;5、基数排序;排序方法的分类1.按是否涉及数据的内、外存交换分 在排序过程中,若整个文件都是放在内存中处理,排序时不涉及数据的内、外存交换,则称之为内部排序(简称内排序);反之,若排序过程中要进行数据的内、外存交换,则称之为外部排序。注意: ① 内排序适用于记录个数不很多的小文件 ② 外排序则适用于记录个数太多,不能一次将其全部记录放人内存的大文件。2.按策略划分内部排序方法 可以分为五类:插入排序、选择排序、交换排序、归并排序... 阅读全文

posted @ 2012-06-23 00:35 沙漠之泉 阅读(215) 评论(0) 推荐(0)

摘要:图(Graph)是一种较线性表和树更为复杂的数据结构。在线性表中,数据元素之间仅有线性关系,即每个数据元素只有一个直接前驱和一个直接后继;在树形结构中,数据元素之间有着明显的层次关系,虽然每一层上的数据元素可能和下一层中多个元素(孩子) 相关,但只能和上一层中一个元素(双亲)相关;而在图形结构中,结点之间的关系可以是任意的,任意两个数据元素之间都可能相关。有向图和无向图1.有向图 若图G中的每条边都是有方向的,则称G为有向图(Digraph)。(1)有向边的表示 在有向图中,一条有向边是由两个顶点组成的有序对,有序对通常用尖括号表示。有向边也称为弧(Arc),边的始点称为弧尾(Tail),.. 阅读全文

posted @ 2012-06-22 18:46 沙漠之泉 阅读(228) 评论(0) 推荐(0)

哈夫曼树及其应用
摘要:最优二叉树1.树的路径长度 树的路径长度是从树根到树中每一结点的路径长度之和。在结点数目相同的二叉树中,完全二叉树的路径长度最短。2.树的带权路径长度(Weighted Path Length of Tree,简记为WPL) 结点的权:在一些应用中,赋予树中结点的一个有某种意义的实数。 结点的带权路径长度:结点到树根之间的路径长度与该结点上权的乘积。 树的带权路径长度(Weighted Path Length of Tree):定义为树中所有叶结点的带权路径长度之和,通常记为: 其中: n表示叶子结点的数目 wi和li分别表示叶结点ki的权值和根到结点ki之间的路径长度。 树的带权路径... 阅读全文

posted @ 2012-06-18 23:46 沙漠之泉 阅读(595) 评论(0) 推荐(0)

二叉树(二)
摘要:线索二叉树1.定义 n个结点的二叉链表中含有n+1个空指针域。利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前趋和后继结点的指针(这种附加的指针称为"线索")。 这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。注意: 线索链表解决了二叉链表找左、右孩子困难的问题,出现了无法直接找到该结点在某种遍历序列中的前趋和后继结点的问题。2.线索链表的结点结构 线索链表中的结点结构为:其中: ltag和rtag是增加的两个标志域, 阅读全文

posted @ 2012-06-10 23:33 沙漠之泉 阅读(329) 评论(0) 推荐(0)

二叉树
摘要:许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树的定义1.二叉树的递归定义 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的、分别称作这个根的左子树和右子树的二叉树组成。2.二叉树的五种基本形态 二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。二叉树中,每个结点最多只能有两棵子树,并且有左右之分。 二叉树并非是树的特殊情形,它们是两种不同的数据结构。二叉树具有以下重要性质:二叉树具有以下重要性... 阅读全文

posted @ 2012-06-10 20:35 沙漠之泉 阅读(397) 评论(0) 推荐(0)

树(一)
摘要:简介树形结构是一类非常重要的非线性结构,它可以很好地描述客观世界中广泛存在的具有分支关系或层次特性的对象,因此在计算机领域里有着广泛应用,如操作系统中的文件管理、编译程序中的语法结构和数据库系统信息组织形式等。本章将详细讨论这种数据结构,特别是二叉树结构。1.树的相关术语1. 一个结点的子树的个数称为该结点的度。一棵树的度是指该树中结点的最大度数。2. 树中度为零的结点称为叶结点或终端结点。3. 树中度不为零的结点称为分枝结点或非终端结点。除根结点外的分枝结点统称为内部结点。例如在图1中,结点A,B和E的度分别为3,2,0。其中A为根结点,B为内部结点,E为叶结点,树的度为3。4. 结点的子树 阅读全文

posted @ 2012-06-07 00:02 沙漠之泉 阅读(282) 评论(0) 推荐(0)

广义表
摘要:广义表的定义广义表是线性表的推广。 广义表一般记作LS=(d0,d1,...dn-1)当广义表LS非空时,称第一个元素d0为表头(Head),称其余元素组成的表(d1,d2,...dn-1)是LS的表尾(Tail)。显然,广义表的定义是一个递归的定义,因为在描述广义表时又用到了广义表的概念。下面列举一些广义表的例子。 1) A=( ); A是一个空表,它的长度为0。 2) B=( e ); 广义表B只有一个单元e,B的长度为1。 3) C=( a,( b,c,d ) ); 广义表C的长度为2,两个元素分别为单元素a和子表( b,c,d )。 4) D=( A,B,C ); 广义表D的... 阅读全文

posted @ 2012-06-04 23:52 沙漠之泉 阅读(409) 评论(0) 推荐(0)

数组
摘要:数组的顺序存储结构由于数组一般不作插入或删除操作,也就是说,一旦建立了数组,则结构中的数据元素个数和元素之间的关系就不再发生变动。因此,采用顺序存储结构表示数组是自然的事了。一、一维数组顺序存储结构一维数组a[t]是由元素a[0],a[1],...,a[t-l]组成的有限序列,若数组的每个元素占s个存储单元,并且从地址a开始依次分配数组各元素,则分配情况为: 矩阵是科学与工程计算问题中常用的数学对象之一。二、二维数组顺序存储结构二维数组顺序存储有两种方式:一种是以行序为主序,另一种是以列序为主序。1.以行序为主序进行存储分配的方法首先存储行号为0的n个元素,对于这n个元素按列号从小到大依次存. 阅读全文

posted @ 2012-06-04 23:45 沙漠之泉 阅读(524) 评论(0) 推荐(0)

摘要:1.串定义:略,可以记作:s="a1a2...an"2.空串不含任何字符的串称为空串,它的长度n=0,记为s=“”。3.空白串含有一个或多个空格的串,称为空白串,它的长度是串中空格字符的个数,记为s= “?”。注意与空串的区别。4.子串、主串若一个串是另一个串中连续的一段,则这个串称为另一个串的子串,而另一个串相对于该串称为主串。例如,串s1=“abcdefg”,s2=“fabcdefghxyz”,则s1为s2的子串,s2相对于s1为主串。另外,空串是任意串的子串,任意串是自身的子串。通常称字符在序列中的序号为该字符在串中的位置,子串在主串的位置则以子串的第一个字符在主串中 阅读全文

posted @ 2012-06-04 22:03 沙漠之泉 阅读(291) 评论(0) 推荐(0)

栈和队列
摘要:简介堆栈和队列都属于线性结构,是两种在运算上受到某些限制的特殊线性表,他们比一般线性表更简单,被广泛应用于类型的程序设计中,可以用来存放许多中间信息,在系统软件设计以及递归问题处理方面都离不开堆栈和队列。栈栈的操作原则是:先进后出,后进先出二、栈的特点根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。也就是说,栈是一种后进先出(Last In First Out)的线性表,简称为LIFO表。三、栈的运算1.初始化栈:INISTACK(&S)将栈S置为一个空栈(不含任何元素)。2.进栈:PUSH(& 阅读全文

posted @ 2012-06-03 17:33 沙漠之泉 阅读(569) 评论(0) 推荐(0)

线性表
摘要:线性表的基本概念1.线性表的定义: 线性表(linear list)是具有相同类型的n(n>=0)个数据元素a0,a1,...an-1 组成的有限序列。其中n为线性表的长度,当n=0,时成为空线性表,n>0,成为非空表在数学上,表现为:数据之间具有线性关系,一对一,一对多等2. 线性表中的数据元素要求具有相同类型。3.特征: (1) 有且仅有一个开始节点a0,他没有直接前驱,只有一个直接后继 (2) 有且仅有一个终端节点an-1,它没有直接后继,只有一个直接前驱 (3) 其他节点都有一个直接前驱和直接后继 (4) 元素直接为一对一的线性关系4、线性表中数据元素的相对位置是确定的,. 阅读全文

posted @ 2012-06-03 12:47 沙漠之泉 阅读(334) 评论(0) 推荐(0)

用AS3实现插入排序算法
摘要:插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。算法描述一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:1.从第一个元素开始,该元素可以认为已经被排序2.取出下一个元素,在已经排序的元素序列中从后向前扫描3.如果该元素(已排序)大于新元素,将该元素移到下一位置4.重复步骤3,直到找 阅读全文

posted @ 2012-05-19 16:49 沙漠之泉 阅读(169) 评论(0) 推荐(0)

用AS3实现选择排序算法
摘要:选择排序的思想:选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾(目前已被排序的序列)。以此类推,直到所有元素均排序完毕。百科:选择排序 维基百科 1 package 2 { 3 /** 4 * 选择排序算法 5 * @author Ant 6 * 7 */ 8 public class SelectedArray 9 {10 private var... 阅读全文

posted @ 2012-05-19 16:21 沙漠之泉 阅读(267) 评论(0) 推荐(0)

简单的冒泡的排序算法(AS3)
摘要:1 package 2 { 3 /** 4 * 冒泡排序算法 5 * @author ANT 6 * 对一个数组进行有小到大的冒泡排序 7 */ 8 public class BubbleSort 9 {10 // public var arr:Array=[1,0,3,10,8,4];11 public var arr:Array;12 public function BubbleSort()13 {14 arr=new Array(... 阅读全文

posted @ 2012-05-17 23:19 沙漠之泉 阅读(356) 评论(0) 推荐(0)

常用的排序算法
摘要:排序算法在程序中会用到很多,这里介绍几种常见的排序方法以及比较冒泡排序:对一个队列里的数据,挨个进行轮询和交换,每次轮询出一个当前最大或者最小的值放在队尾,然后继续下次轮询,轮询长度-1,就跟冒泡一样,所以称为冒泡排序,运算时间复杂度N平方选择排序:对一个队列里的数据,选出当前最大或者最小的值,然后将他与队首的数据交换,然后从第二个开始,进行相同的操作,运算时间复杂度N平方,但由于他不像冒泡一样需要不停的交换位置,所以会比冒泡快一些插入排序:对一个队列里的数据,从第二个开始,与此位置之前的数据进行比较,形成局部有序的队列,循环此操作,直到队尾,运算时间复杂度依然为N平方,但他由于保证了局部的有 阅读全文

posted @ 2012-04-11 01:50 沙漠之泉 阅读(190) 评论(0) 推荐(0)

导航