《大话数据结构》笔记(1)--数据结构绪论,算法

第一章 数据结构绪论

基本概念和术语

数据

数据是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。

换言之,数据就是符号,而且具备两个前提:

1. 可以输入到计算机中

2. 能被计算机程序处理

数据元素

数据元素是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。

数据项

一个数据元素可以由若干个数据项组成。

数据项是数据不可分割的最小单位。

数据对象

数据对象是性质相同的数据元素的集合,是数据的子集。

数据结构

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

逻辑结构与物理结构

逻辑结构

逻辑结构是指数据对象中数据元素之间的相互关系。

逻辑结构分为以下四种:
1. 集合结构

集合结构中的数据元素除了同属于同一个集合外,它们之间没哟其他关系。

2. 线性结构

线性结构中的数据元素之间是一对一的关系。

3. 树形结构

树形结构中的数据元素之间存在一种一对多的层次关系。

4. 图形结构

图形结构的数据元素是多对多的关系。

物理结构(存储结构)

物理结构是指数据的逻辑结构在计算机中的存储形式。

实际上就是如何把数据元素存储到计算机的存储器中。

存储器主要是针对内存而言的,像硬盘、软盘、光盘等外部存储器的数据组织通常用文件结构来描述。

数据结构的存储形式有两种:

1. 顺序存储

顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。

数组就是这样的顺序存储结构。

2. 链式存储

链式存储结构是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。

逻辑结构是面向问题的,而物理结构是面向计算机的,其基本目标就是将数据及其逻辑关系存储到计算机的内存中。

抽象数据类型

数据类型

数据类型指一组性质相同的值的集合及定义在此集合上的一些操作的总称。

抽象数据类型

抽象数据类型是指一个数学模型及定义在该模型的一组操作。

抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。

抽象数据类型体现了程序设计中问题分解、抽象和信息隐藏的特性。

描述抽象数据类型的标准格式:

第二章  算法

 算法

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

 

算法的特性

算法具有五个基本特性:输入、输出、有穷性、确定性和可行性

输入输出

算法具有零个或多个输入,至少有一个或多个输出。

有穷性

有穷性指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。

确定性

确定性指算法的每一步骤都具有确定的含义,不会出现二义性。

可行性

可行性指算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成。

算法设计的要求

正确性

“正确”分为以下四个层次

1. 算法程序没有语法错误。

2. 算法程序对于合法的输入数据能够产生满足要求的输出结果。

3. 算法程序对于非法的输入数据能够得出满足规格说明的结果。

4. 算法程序对于精心选择的,甚至刁难的测试数据都有满足要求的输出结果。

可读性

健壮性

健壮性指当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果。

 

时间效率高和存储量低

算法效率的度量方法

事后统计方法

这要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。

差评,不考虑。

事前分析估算方法

在计算机程序编制前,依据统计方法对算法进行估算。

一个程序的运行时间依赖于算法的好坏和问题的输入规模。所以在分析一个算法的运行时间时,重要的是把基本操作数量与输入规模关联起来,即基本操作的数量必须表示成输入规模的函数。

 

函数的渐进增长

判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注主项(最高项)的阶数。

算法时间复杂度

定义

推导大O阶方法

常数阶

顺序结构的时间复杂度为常数阶。

线性阶

n次单变量循环为O(n)

对数阶

下例中的时间复杂度为O(logn)

平方阶

下例中的时间复杂度为O(n2)

例子:

常见的时间复杂度

最坏情况与平均情况

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

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

算法空间复杂度

算法的空间复杂度通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记作:S(n) = O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数。

时间: 2024-10-15 02:06:58

《大话数据结构》笔记(1)--数据结构绪论,算法的相关文章

46. 蛤蟆的数据结构笔记之四十六普里姆算法

46. 蛤蟆的数据结构笔记之四十六普里姆算法 本篇名言:"手莫伸 ,伸手必被捉.党与人民在监督 ,万目睽睽难逃脱.汝言惧捉手不伸 ,他道不伸能自觉 , 其实想伸不敢伸 ,人民咫尺手自缩.-- 陈毅" 连通图的生成树是一个极小的连通子图,它含有图中全部的顶点,但只有足以构成一棵树的n-1条边.所谓的最小成本,就是n个顶点,用n-1条边把一个连通图连接起来,并且使得权值的和最小.构造连通网的最小代价生成树,即最小生成树(Minimum Cost Spanning Tree). 找连通图的最

44. 蛤蟆的数据结构笔记之四十四弗洛伊德Floyd算法

44. 蛤蟆的数据结构笔记之四十四弗洛伊德Floyd算法 本篇名言:"希望是厄运的忠实的姐妹. --普希金" 我们继续来看下数据结构图中的一个算法,这个算法来自图灵奖得主. 1.  Floyd算法介绍 Floyd算法又称为插点法,是一种用于寻找给定的加权图中多源点之间最短路径的算法.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名.注意这个可不是心理学的那个弗洛伊德. 是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径

《ACM/ICPC 算法训练教程》读书笔记 之 数据结构(线段树详解)

依然延续第一篇读书笔记,这一篇是基于<ACM/ICPC 算法训练教程>上关于线段树的讲解的总结和修改(这本书在线段树这里Error非常多),但是总体来说这本书关于具体算法的讲解和案例都是不错的. 线段树简介 这是一种二叉搜索树,类似于区间树,是一种描述线段的树形数据结构,也是ACMer必学的一种数据结构,主要用于查询对一段数据的处理和存储查询,对时间度的优化也是较为明显的,优化后的时间复杂为O(logN).此外,线段树还可以拓展为点树,ZWK线段树等等,与此类似的还有树状数组等等. 例如:要将

43. 蛤蟆的数据结构笔记之四十三最短路径之迪杰斯特拉(Dijkstra )算法

43. 蛤蟆的数据结构笔记之四十三最短路径之迪杰斯特拉(Dijkstra )算法 本篇名言:"辛勤的蜜蜂永没有时间悲哀.--布莱克" 这次来看下Dijkstra )算法.还是老方法,先原理,后实现.代码来自网络. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47046031 1.  最短路径 最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径. 管道铺设.线路安排

【算法笔记】数据结构(一)

数据结构是数据的组织形式,可以用来表征特定的对象数据.在计算机程序设计中,操作的对象是各式各样的数据,这些数据往往拥有不同的数据结构,例如数组.接口.类等.而算法和数据结构具有千丝万缕的联系,计算机科学家尼克劳斯·沃思(Nikiklaus Wirth)提出"数据结构+算法=程序"的著名公式.这是因为不同的数据结构所采用的处理方法不同,计算的复杂程度也不同,因此算法往往是依赖于某种数据结构的,即数据结构是算法实现的基础. 数据结构是计算机中对数据的一种存储和组织方式,同时也泛指相互之间存

48. 蛤蟆的数据结构笔记之四十八的有向无环图的应用关键路径

48. 蛤蟆的数据结构笔记之四十八的有向无环图的应用关键路径 本篇名言:"富贵不淫贫贱乐 ,男儿到此是豪雄.-- 程颢" 这次来看下有向无环图的另一个应用关键路径. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47135061 1.  关键路径 与AOV-网相对应的是AOE-网(Activity On Edge)即边表示活动的网.AOE-网是一个带权的有向无环图,其中,顶点表示事件(Event),弧表示活动,权表

33. 蛤蟆的数据结构笔记之三十三广义表实现二

33. 蛤蟆的数据结构笔记之三十三广义表实现二 本篇名言:" 希望是附丽于存在的,有存在,便有希望,有希望,便是光明.--鲁迅" 我们继续来看下广义表的其他代码实现.代码均来自网络,解释来自蛤蟆,均亲测可行. 欢迎转载,转载请标明出处: 1.  广义表实现二 1.1         main 创建两个链表的指针head和L. 输入一个字符串,调用GLCreate函数创建广义表.显示,获取头表,尾表,输出长度,深度,原子个数,复制列表,Merge列表,遍历,比较广义表操作. 如下图1:

34. 蛤蟆的数据结构笔记之三十四树的概念

34. 蛤蟆的数据结构笔记之三十四树的概念 本篇名言:"过去属于死神,未来属于你自己.--雪莱" 本篇笔记开始我们要进入新的概念了,树!是不是有点小激动呢?让我们从概念开始吧 当然概念要理解,如果当前不能立刻理解,可以后续结合代码一起理解效果更佳. 1.  树型结构 之前我们学习的那么多,其实都是线性数据结构. 树 则不同,它是非线性结构. 树形结构指的是数据元素之间存在着"一对多"的树形关系的数据结构,是一类重要的非线性数据结构.在树形结构中,树根结点没有前驱结点

C语言、数据结构笔记集合

链表中的“p->next” p->next到底是指p的下一个节点还是p的指针域呢?p是一个指针,那么p->next也应该是一个指针,即p->next应该是一个地址,因此p->next其实是p指向的节点的指针域(next域),所以p->next还是属于当前节点的,只不过它是下一个节点的地址罢了.所以如果函数返回“p->next”,那么函数的类型应为指针函数. 如何让VS2013进行C编程的时候使用基本库函数不会得到警告 把VS项目创建中的安全周期检查关闭就可以任意使

24、蛤蟆的数据结构笔记之二十四串的模式匹配算法

24.蛤蟆的数据结构笔记之二十四串的模式匹配算法 本篇名言:"燧石受到的敲打越厉害,发出的光就越灿烂. -- 马克思" 来看下两个算法,BF和KMP算法在串的模式匹配中实现. 欢迎转载,转载请标明出处: 1.  BF算法 BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符:若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果.B