数据结构与算法分析

以下内容来源于《数据结构》一书,由笔者阅读整理而成,如有描述不当的地方,还望各位博友指出。

编写解决实际问题的程序的一般过程:

(1)、如何用数据形式描述问题,即由问题抽象出一个适当的数学模型;
(2)、问题所涉及的数据量大小及数据之间的关系;
(3)、如何在计算机中存储数据结构及体现数据之间的关系;
(4)、处理问题时所需要对数据作何种运算;
(5)、所编写的程序性能是否良好。

一、数据结构及其概念

1、基本概念

数据:客观事物的表示符号。在计算机科学中指的是所有输入到计算机中,并被计算机程序处理的符号的总称;
数据元素:数据的基本单位。在程序中通常作为一个整体来进行考虑和处理;
数据项:数据的最小单位,是对客观事物某一方面特性的数据描述。一个数据元素可由若干个数据项组成;
数据对象:是性质形同的数据元素的集合,是数据的一个子集;
数据结构:相互之间具有一定联系的数据元素的集合。元素之间的相互联系称为逻辑结构。


数据元素之间的逻辑结构有四种基本类型:
(1)、集合:同属于一个集合,无其他关系;
(2)、线性结构:一对一的关系;
(3)、树型结构:一对多的关系;
(4)、图状或网状结构:多对多的关系。


数据结构的形式定义:
Data-Structure=(D,S)
其中,D是数据元素的有限集,S是D上关系的有限集。

2、数据结构的存储方式

顺序存储结构:用数据元素在存储器中的相对位置来表示数据元素之间的逻辑结构。
链式存储结构:在每一个数据元素中增加一个存放另一个数据元素地址的指针,用该指针来表示数据元素之间的逻辑结构。

数据的逻辑结构和无力结构是密不可分的两个方面,一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构
在C语言中,用一维数组表示顺序存储结构,用结构体类型表示链式存储结构。

3、数据结构的运算

(1)、建立(Create)一个数据结构
(2)、消除(Destroy)一个数据机构
(3)、从一个数据结构中删除(Delete)一个数据元素
(4)、把一个数据元素插入(Insert)到一个数据结构中
(5)、对一个数据结构进行访问(Access)
(6)、对一个数据结构中的数据元素进行修改(Modify)
(7)、对一个数据结构进行排序(Sort)
(8)、对一个数据结构进行查找(Search)

二、算法分析初步

1、算法定义

算法是对特定问题求解方法的一种描述,是指令的有限序列,其中每一条指令表示一个或多个操作。

2、算法的特性

(1)、有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷的时间内完成;
(2)、确定性:算法中的每一个指令必须有确切的含义。不存在二义性,且算法只有一个入口和出口;
(3)、可行性:一个算法是能行的。即算法描述的操作可以通过已实现的基本运算执行有限次来实现;
(4)、输入:一个算法有零个或多个输入;
(5)、输出:一个算法有一个或多个输出。

3、算法设计的要求

(1)、正确性:算法应满足具体需求;
(2)、可读性:算法应容易供人阅读和交流。可读性好的算法有助于对算法的理解和修改;
(3)、健壮性:算法应具有容错处理;
(4)、通用性:算法的处理结果对一般的数据集合都成立;
(5)、效率与存储量需求:效率指的是算法执行的时间,存储量指的是算法执行过程中所需要的最大存储空间。

4、算法的时间复杂度

算法中,基本操作重复执行的次数时问题规模n的某个函数,其时间量度记作T(n)=O(f(n)),称作时间复杂度。通常,用最深层循环内的语句中的原操作的执行频度(重复执行的次数)来表示。
表示时间复杂度的阶有:
O(1) 常量时间阶
O(n) 线性时间阶
O(log n) 对数时间阶
O(n^k) K次方时间阶

例1:

for(i=1;i<=n;i++){
    for(j=1;j<=n;j++){
        c[i][j]=0;
        for(k=1;k<=n;k++){
            c[i][j] = a[i][k]*b[k][j];
        }
    }
}
//三重循环,每个循环从1到n,总次数为n*n*n = n^3
//因此,时间复杂度为T(n)=O(n^3)

例2:

{++x;s=0}
//语句频度为1
//因此,时间复杂度为O(1)

例3:

for(i=0;i<=n;i++){
    ++x;
    s+=x;
}
//语句频度2n
//因此,时间复杂度为O(n)

例4:

for(i=1;i<=n;i++){
    for(j=1;j<=n;j++){
        ++x;
        s+=x;
    }
}
//语句频度2n^2
//因此,时间复杂度为O(n^2)

一个时间复杂度为O(1)的算法,它的基本运算执行的次数时固定的,因此,总的时间由一个常数来界定。而一个算法复杂度为O(n^2)的算法,则由一个二次多项式来界定。

5、算法的空间复杂度

空间复杂度指算法编写成程序后,在计算机中运行时所需存储空间大小的度量。记作:S(n)=O(f(n)),其中,n是问题规模。
该存储空间一般包含三个方面:
(1)、指令常数变量所占用的存储空间;
(2)、输入数据所占用的存储空间;
(3)、辅助存储空间。
一般,算法的空间复杂度指的是辅助空间。
(1)、一维数组a[n]:空间复杂度O(n)
(2)、二维数组a[n][m]:空间复杂度O(n*m)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值