[大话数据结构]算法



算法相关:



算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或者多个操作。

我们不可能把所有的算法都实现,也更不可能用所有的输入逐一的验证算法,所以算法的正确性在大部分情况下都不能用程序来证明,而是用数学方法证明。

好的算法,应该具有正确性、可读性、健壮性、高效率和低存储量的特征,但是对于算法有意义的研究就是算法的效率性了。

算法效率的度量方法:

事后统计方法:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序进行运行时间的比较,从而确定算法的执行效率。但是这种方法的缺点很明显,主要是必须依照算法事先编好程序实现,时间的统计依赖计算机硬件和软件的环境,算法的测试数据设计困难。

事前分析估算方法:

这种方法把一个程序的运行时间,看做依赖于算法的好坏问题的输入规模这两个方面。那么问题来了,什么是问题的输入规模?输入规模又是怎么度量的?

首先指出一个显而易见的事实:几乎所有的算法,对于规模更大的输入都需要运行更长的时间。所以研究算法效率时,把算法效率T作为一个以算法输入规模n为参数的函数是非常合乎逻辑的。

其实,测定运行时间最可靠的方法就是计算对运行时间有消耗的基本操作的执行次数。把基本操作的数量与输入规模关联起来,也就是基本操作的数量必须表示成输入规模的函数。

表中算法的实际操作数量就是算法的基本操作的数量

算法的时间复杂度:

在进行算法分析时,语句(基本操作)总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。

常用的时间复杂度所消耗的时间从小到大依次是:

算法运行时间的最坏情况是运行时间的一种保证,那就是运行时间将不会再坏了。在应用中,这是一种最重要的需求,通常,除非特别指定,我们提到的运行时间都是最坏情况的运行时间。

平均运行时间是所有情况中最有意义的,因为它是期望的运行时间。


总结:



作为数据结构的笔记,对算法的讨论先说这些。下面马上进入数据结构的真正的学习。

时间: 2024-12-29 07:12:35

[大话数据结构]算法的相关文章

大话数据结构——算法

算法:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作. 为什么把数据结构和算法一起说? 想想罗密欧与朱丽叶,梁山伯和祝英台,少了一个你总会觉得奇怪吧. 算法的五个基本特性: 输入:有0个或多个输入: 输出:有1个或多个输出: 有穷性:步骤有限,不能无穷循环下去: 确定性:有确定的含义,不能出现二义性: 可行性:每一步都能通过有限次数完成. 算法设计的要求: 正确性:能正确反映问题,得到问题的正确答案: 可读性:便于阅读.理解和交流: 健壮性:即使

图的基础算法(大话数据结构笔记)

概述 线性表的每个元素有线性关系,每个数据元素只有一个直接前去和一个直接后继.树的数据元素之间有着明细那的层次关系,并且每层上的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关.这和一对父母可以有很多孩子,但每个孩子却只能有一对父母是一个道理.可现实中,人与人之间关系复杂,不是简单一对一,一对多的关系.这种复杂关系更适合用图来表示.在图结构中,节点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关.如下图所示:无向边:Edge (vi,vj)有向边:也叫弧,Arc. <v

KMP算法学习记录----《大话数据结构》部分匹配表学习部分

如需转载,请保留本文链接. 首先先将<大话数据结构>关于KMP算法的讲解部分贴上,本文不提供下载链接,也不会将电子书作为资料留百度云,需要电子书的各位,请自行寻找电子版. 关于上述的KMP算法种的next数组的推导部分,一直不是很明白,本贴是关于上述部分的学习推导记录. 以书中字符串为例: 1|2|3|4|5|6|7|8|9| a|b|a|b|a|a|a|b|a| 0|1|1|2|3|4|2|2|3| string T = "ababaaaba"; int i = 1;j

大话数据结构之一(绪论、算法)

数据结构绪论 数据结构是相互之间存在一种或多种特定关系的数据元素的集合 程序设计=数据结构+算法 数据结构事实上就是一门研究非数值计算的程序设计问题的操作对象,以及它们之间的关系和操作等相关问题的学科. 数据是描述客观事件的符号,是计算机中可以操作的对象,是能被计算机识别,并输入能计算机处理的符号集合,也就是说数据必须具备两个前提: 可以输入到计算机中 能被计算机程序处理 数据 数据元素是组成数据的.有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录 数据项:一个数据元素可以由若干个

大话数据结构 绪论及算法

程序设计 = 数据结构 + 算法 数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合. 数据元素:是组成数据的.有一定意义的基本单位,在计算机中通常作为整体处理.也被称为记录. 数据项:一个数据元素可以由若干个数据项组成.数据项是数据不可分割的最小单位. 数据对象:是性质相同的数据元素的集合,是数据的子集. 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合. 逻辑结构:是指数据对象中数据元素之间的相互关系. 1)集合结构:集合结构中的数

《大话数据结构》学习笔记 排序

排序的严格定义:  假设含有n个记录的序列为{r1,r2,......,rn},对应的关键字分别为{k1,k2......,kn},需确定1,2,......,n的一种排列p1,p2,......,pn,使其相应的关键字 满足Kp1<=Kp2<=......Kpn关系,即使得序列成为一个按关键字有序的序列(rpq,rp2,......rpn),此操作称为排序.  排序的稳定性:内排序与外排序(根据记录是否全部放置在内存中). 根据排序中的主要操作,可以分为插入排序类(直接插入排序->希尔

大话数据结构读书笔记

大话数据结构读书笔记 编程基础: 数据结构 算法 1 线性表 //顺序储存结构的结构代码: #define MAXSIZE 20//储存空间的起始分配量 typedef int ElemType;//ElemType类型根据实际类型而定,这里假设是int typedef struct{ ElemType data[MAXSIZE];//数组储存元素,最大值为MAXSIZE int length;/线性表当前长度: }SqList; //顺序存储结构需要三个属性: //1存储空间的起始位置:数组d

【学习总结】《大话数据结构》- 第3章-线性表

[学习总结]<大话数据结构>- 总 启示: 线性表:零个或多个数据元素的有限序列. 目录 3.1 开场白 3.2 线性表的定义 3.3 线性表的抽象数据类型 3.4 线性表的顺序存储结构 3.5 顺序存储结构的插入与删除 3.6 线性表的链式存储结构 3.7 单链表的读取 3.8 单链表的插入与删除 3.9 单链表的整表创建 3.10 单链表的整表删除 3.11 单链表结构与顺序存储结构优缺点 3.12 静态链表 3.13 循环链表 3.14 双向链表 3.15 总结回顾 3.16 结尾语 -

《大话数据结构》---第一章 数据结构绪论

数据结构是一门研究非数值计算的程序设计问题中的操作对象,以前他们之间的关系和操作等相关问题的学科. 程序设计 = 数据结构 + 算法 数据:描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合.数据元素:组成数据的.有一定意义的基本单位,在计算机中通常作为整体处理.也被称为记录.数据项:一个数据元素可以由若干个数据项组成,数据项是数据不可分割的最小单位.数据对象:是性质相同的数据元素的集合,是数据的子集.(性质相同即具有相同数量和类型的数据项)数据结构:是