数据结构的基本知识、算法

数据结构的基本知识

下面的都是摘自《大话数据结构》书中的内容,记下来可以时时查看:
数据:描述客观事物的符号,计算机可以操作的对象;
数据元素:组成数据的有一定意义的基本单位,作为整体能被计算机处理;人是人类的数据元素,牛马是牲畜类的数据元素
数据项:组成数据元素,人的眼睛耳朵就是人这个数据元素的数据项;
注意:数据项是数据的最小单位,不过讨论问题时数据元素才是数据模型的着眼点。
数据对象:性质相同的数据元素的集合,数据的子集
数据结构:相互存在关系的数据元素的集合。


逻辑结构、物理结构

逻辑结构:是指数据对象中数据元素之间的相互关系
集合结构,线性结构,树形结构,图形结构
物理结构:是指数据的逻辑结构在计算机中的存储形式
顺序存储结构,把数据元素存放在地址连续的存储单元里
链式存储结构,数据元素存储在在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。数据元素的存储关系不能反应逻辑关系,因此需要一个指针存放数据元素的地址。
逻辑结构面向问题,物理结构面向计算机。

抽象数据类型

数据类型:一组性质相同的值的集合及定义在次集合上的一些操作的总称。
抽象数据类型:是指一个数学模型及定义在该模型上的一组操作。
一个抽象数据类型定义了:一个数据对象、数据对象中个数据元素之间的关系及对数据元素的操作。
抽象数据类型体现了程序设计中问题分解、抽象和信息隐藏的特性。抽象数据类型把实际生活中的问题分解为多个规模小且容易处理的问题,然后建立一个计算机能处理的数据模型,并把每个功能模块的实现细节作为一个独立的单元,从而使具体实现过程隐藏起来。

算法

算法的基础

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
算法的五个基本特性:输入、输出、有穷性、确定性和可行性。
零个或多个输入,一个或多个输出。
有穷性:算法在执行有限的步骤后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。
确定性:每一步都有确定的含义,不会出现二义性。
可行性:每一步都必须是可行的,每一步都能够通过执行有限次数完成。
设计算法应该尽量满足时间效率高和存储量低的需求。

算法的评价

事后统计方法:利用设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。有很大的缺陷。
事前分析估算方法:在计算机程序编制前,依据统计方法对算法进行估算。
程序运行消耗的时间取决于:(1)算法的策略方法(2)编译产生的代码质量(3)问题的输入规模(4)机器执行指令的速度
一个程序的运行时间依赖于算法的好坏和问题的输入规模。
函数的渐进增长:给定两个函数f和g,如果存在一个整数N,使得对于所有的n>N,f总是大于g,那么,我们说f的增长渐近快于g。
算法运行次数公式的简化:
(1)忽略加法常数:如2n+3与3n+1,可以简化为比较2n与3n
(2)与高次项相称的常数并不重要:图4n+8与2n2+1,可直接比较n与n2
(3)最高次项的指数大的,函数随着n的增长,结果也会变得增长特别快。
(4)判断一个算法效率时,函数中的常数和其他次要项常常可以忽略,而更加应该关注主项(最高阶项)的阶数。
(5)某个算法随着n的增大,它会越来越优于(或者差于)另一个算法。

时间复杂度与空间复杂度

时间复杂度:算法的时间量度,用大写O来表示,记作T(n)=O(f(n)),f(n)是问题规模n的某个函数。
推导大O阶:
(1)用常数1取代运行时间中的所有加法常数
(2)再修改后的运行次数函数中,只保留最高阶项
(3)如果最高阶项存在且不是1,则去除与这个项相乘的常数。
执行时间恒定的算法(即公式里只有常数项,与n无关,我们用1取代了常数项),称之为O(1)的时间复杂度,又叫常数阶。
线性阶:分析循环结构的运行情况
对数阶:
平方阶:嵌套循环

执行系数函数 非正式术语
12 O(1) 常数阶
2n+3 O(n) 线性阶
3n^2+2n+1 O(n^2) 平方阶
5logn+20 O(logn) 对数阶
2n+3nlogn+19 O(nlogn) nlogn阶
6n3+2n2+3n+4 O(n^3) 立方阶
2的n次方 O(2的n次方) 指数阶
常用的时间复杂度所耗费的时间比较:
O(1)>O(logn)>O(n)>O(nlogn)>O(n2)>O(n3)>O(2n)>O(n!)>O(nn)
算法空间复杂度:通过计算算法所需要的存储空间实现,计算公式S(n)=O(f(n))。
posted @ 2018-03-22 01:34  歪胡子的日常  阅读(266)  评论(0编辑  收藏  举报