数据结构

定义

数据:描述客观事物的数字、字符以及一切能够输入到计算机中,并且能够被计算机程序处理的符号的集合;

数据元素之间的联系称之为结构数据结构就是具有结构的数据元素的集合。

数据结构是一个二元组(D,R),其中D是数据元素的有限集合,R是D上的关系的集合

逻辑结构

数据元素之间具有的逻辑关系。分为线性关系,如线性表、数组、堆栈、队列、串、文件等;非线性关系,如树、二叉树、图、集合等。

存储结构

具有某种逻辑结构的数据在计算机存储器中的存储方式(存储映象)
1、顺序存储结构
用一组地址连续的存储单元依次存放数据元素,数据元素之间的逻辑关系通过元素的地址直接反映。

2、链式存储结构
用一组地址任意的存储单元依次存放数据元素,数据元素之间的逻辑关系通过指针间接地反映。

3、索引存储结构
利用数据元素的索引关系来确定数据元素的存储位置,由数据元素本身与索引表两部分组成。
特点:查找、插入和删除等操作的时间效率较高,但存储空间开销较大,比如目录

4、散列存储结构
通过事先准备好的散列函数关系与处理冲突的方法来确定数据元素的存储位置。
特点:查找、插入和删除等操作的时间效率较高,但确定好的散列函数比较困难

算法

定义

算法是用来解决某个特定课题的指令的集合。
算法是由人们组织起来准备加以实施的一系列有限的基本步骤。
算法就是解决问题的方法。

性质

输入:由算法外部提供n>=0个有限量作为算法的输入;(可以没输入)

输出:有算法内部提供n>0个有限量作为算法的输出;(必须有输出)

有穷性:算法必须在有限的步骤内能够结束;

确定性:组成算法的每一条指令必须有清晰明确的含义;

有效性:算法的每一条指令必须具有可执行性;

算法的描述

1、采用自然语言来描述
2、采用程序流程图的形式来描述
3、伪代码(形式化语言)
4、使用具体的程序语言描述

算法分析

算法分析是指对算法质量优劣的评价。
目的是改进算法质量;前提是算法必须正确;

除正确性外,通常从三个方面分析一个算法:
1、依据算法编写的程序在计算机中运行时间多少的度量,称之为时间复杂度;(反映算法运行的快慢)
2、依据算法编写的程序在计算机中占存储空间多少的度量,称之为空间复杂度;(反映算法需要的空间的多少)
3、其他方面(算法的可读性、可移植性、易测试性)

时空效率高的算法才是一个好算法,它常常是不懈努力和反复修正的结果

时间复杂度

一个程序在计算机中运行时间的多少与诸多因素有关,其中主要有:
1、问题的规模;(几乎所有算法的时间效率都与问题的规模有关
2、编译程序功能的强弱以及产生的机器代码质量的优劣;
3、机器执行一条指令的时间长短;
4、程序中那些关键语句的执行次数;(对算法运行时间贡献最大的语句)

频度统计法

以语句执行的次数的多少作为算法的时间量度的分析方法称为频度统计法

一条语句的频度是指该语句被执行的次数,而整个算法的频度是指算法中所有语句的频度之和

数据结构和算法概念_算法

注:第一个for循环之所以是n+1,是由于当i=n时还需判断一次

关于符号O的的定义

数据结构和算法概念_算法_02


注:与高等数学中同阶的定义一致;

算法时间复杂度的数学意义:当问题的输入规模n趋于无穷大时,算法的运行时间表现出固定的增长次数

对于上述例子中的算法,g(n)=n3,称算法的时间复杂度为O(n3)

O(1)表示算法的复杂度为常量,不随问题规模n的大小而改变

几种常见的复杂度的形式如下:

数据结构和算法概念_时间复杂度_03