大话数据结构——算法

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

为什么把数据结构和算法一起说?

想想罗密欧与朱丽叶,梁山伯和祝英台,少了一个你总会觉得奇怪吧。

算法的五个基本特性:

  • 输入:有0个或多个输入;
  • 输出:有1个或多个输出;
  • 有穷性:步骤有限,不能无穷循环下去;
  • 确定性:有确定的含义,不能出现二义性;
  • 可行性:每一步都能通过有限次数完成。

算法设计的要求:

  • 正确性:能正确反映问题,得到问题的正确答案;
  • 可读性:便于阅读、理解和交流;
  • 健壮性:即使输入不合法,算法也能处理,而不是出现异常或中止;
  • 时间效率高和存储量低:像生活中人们所希望的花最少时间,办最大的事。

算法效率的度量方法:

  1. 事后统计法:利用测试好的程序和数据,用计算机测试运行时间判断算法的优劣。这种方法有很大缺陷,必须事先设计好程序,风险大;时间很可能依赖于计算机硬件配置;算法测试的数据选择困难,如数据量大小会影响运行时间。
  2. 事前分析估算法:在程序编制前,进行估算。取决于以下因素:算法采用的策略、方法(算法好坏的根本);编译产生的代码质量(软件);问题的输入规模;机器指令执行的速度(硬件条件)。

算法时间复杂度推导方法:

  1. 用行数1取代运行时间中的所有加法常数;例如,f(n)=1,f(n)=5等的时间复杂度都是O(1),也称为常数街;
  2. 在修改后的运行次数函数中,只保留最高阶的项;
  3. 如果最高阶存在且不是1,则去除与这个项相乘的常数。

    得到的结果就是大O阶。

时间: 2024-11-01 19:09:08

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

[大话数据结构]算法

算法相关: 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或者多个操作. 我们不可能把所有的算法都实现,也更不可能用所有的输入逐一的验证算法,所以算法的正确性在大部分情况下都不能用程序来证明,而是用数学方法证明. 好的算法,应该具有正确性.可读性.健壮性.高效率和低存储量的特征,但是对于算法有意义的研究就是算法的效率性了. 算法效率的度量方法: 事后统计方法:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序进行运行时间的比较,

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

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

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

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