数据结构预算法初探

很久没有来更新了,近半年项目比较忙,难得接近年底闲一阵子,研究一下数据结构预算法。今天首先了解一下关于数据结构和算法的一些基本概念。

数据结构概述:

数据结构主要是通过分析数据对象的结构特性,包括逻辑和数据对象之间的关系,然后把逻辑转换成计算机可实现的物理结构,从而便于计算机处理。

1、概念术语:

1、数据
2、数据元素:数据基本单位,如一张表;
3、数据项:组成数据元素的最小单位,如表里的字段;
4、数据对象:性质相同的数据元素集合,是数据的一个子集,如正整数N={1,2,3,4,5...};
5、数据结构:数据的组织形式,数据元素之间存在的一种或多种特定关系的数据元素级合;
6、数据类型:按照数据值的不同进行划分的可操作性;

2、数据的逻辑结构:

逻辑结构(logical structure)是指在数据中的元素之间的互相关系,数据之间存在不同的逻辑关系构成了以下4种结构类型:
1、集合结构:集合的数据没有任何关系;
2、线性结构:元素结构是一对一的,并且有先后次序a-b-c-d...;
3、树形结构:元素结构关系是一对多的;
4、图结构:元素结构是多对多的;

3、数据的存储(物理)结构:

存储结构(storage structure)也称物理结构(physical structure),指的是数据的逻辑结构在计算中的存储形式。数据的结构一般可以反映数据元素之间的逻辑关系。分为顺序存储结构和链式存储结构:
1、顺序存储结构:把数据元素放在一寸存储地址连续的存储单元里,其数据元素间的逻辑关系和物理关系是一致的;
2、链式存储结构:把数据元素存放在任意的存储单元里,这组存储单元可以是连续,也可以是不连续,数据元素的存储关系并不能反映其逻辑关系,因此需要借助指针来表示数据元素之间的逻辑关系。

4、抽象数据类型:

抽象数据类型(abstract data type,ADT)是描述具有某种逻辑关系的数据模型(或者我理解为一种迭代化的容器),并对在数学模型上进行的一组操作。抽象数据类型描述的是一组逻辑上的特性,与在计算机内部表示无关,计算机中的整数数据类型是一个抽象数据类型,不同处理器可能实现方法不同,但其逻辑特性相同,即加、减、乘、除等运算是一致的。“抽象”的意思是数据类型的数学抽象特性而不是指它们的实现方法。抽象数据类型体现了程序设计中的问题分解、抽象、信息隐藏等特性,可以把现实中的大问题分解为多个规模小且容易处理的小问题,然后建立起一个能被计算机处理的数据,并把每个功能模块的实现细节作为一个独立的单元,从而使具体实现过程隐藏起来。

5、算法:

算法(algorithm)是解决特定问题求解步骤的描述,在计算机中表现为有限的操作序列。在数据类型建立起来之后,就要对这些数据类型进行操作,建立起运算的集合即程序。运算的建立、方法好坏直接决定着计算机程序原型效率的高低。
数据结构和算法的关系:两者既有联系又有区别。联系是程序=算法+数据结构。数据结构是算法实现的基础,算法总是要依赖某种数据结构来实现的。算法的操作对象是数据结构。区别是数据结构关注的是数据的逻辑结构、存储结构有一集基本操作,而算法更多的是关注如何在数据结构的基本上解决实际问题。算法是编程思想,数据结构则是这些思想的基础。

6、时间复杂度:

在进行算法分析时,语句总是执行次数 T(n) 是关于问题规模 n 的函数。进而分析次数T(n)随规模n的变化情况并确定T(n)的数量级。算法的时间复杂度就是算法的时间度量,记作T(n) = O(f(n))。它表示随问题规模n的增大,算法的执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中,f(n)是问题规模n的某个函数。
算法的时间复杂度是衡量一个算法好坏的重要指标。一般情况下,随着规模n的增大,次数T(n)的增长较慢的算法为最优算法。常见时间复杂度从小到大依次排列:O(1) < O(log2n) < O(n) < O(n²) 例如:

(a) 1;      // 时间复杂度为O(1)
(b)for( i = 1 ; i <= n ;i++ ){  x = x+1;}    // 时间复杂度为O(n),称为线性阶
(c)for( i = 1 ; i <= n ; i++ ){ for( j = 1;j <= n;j++ ){  x = x + 1 } }  // 时间复杂度为O(n²),称为平方阶

7、空间复杂度:

空间复杂度(sapce complexity)作为算法锁需要存储空间的量度,记做S(n) = O(f(n))。其中,n为问题的规模;f(n)为语句关于n的所占存储空间的函数。
一般情况下,一个人程序在机器上运行时,出了需要存储程序本身的指令、常数、变量和输入数据除外、还需要存储对数据操作的存储单位。若输入数据所占空间只取决于问题本身,和算法无关,这样只需要分析该算法在实现时所需的辅助单元即可。若算法执行时所需要的辅助空间相对于输入数据量而言是个常量,则称此算法为原地工作,空间复杂度为O(1)。

你可能感兴趣的:(数据结构预算法初探)