数据结构与算法的基本概念

数据结构与算法的基本概念

什么是数据结构?数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算。针对实际问题,建立合适的数据结构,设计较好的算法,能编写出更加简洁高效的程序。
逻辑结构:
数据之间的相互关系成为逻辑结构。通常分为四类基本结构:

  1. 集合: 数据该结构的数据元素间的关系是“属于同一个集合”。
  2. 线性结构: 数据元素之间存在一对一的关系。
  3. 树行结构: 数据元素之间存在一对多的关系。
  4. 图行结构: 数据元素之间存在多对多的关系。

三种基本的逻辑结构
在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
     线性结构               树结构               图结构

特点:
线性结构:除第一个和最后一个数据元素外,每个数据元素只有一个前驱和一个后继数据元素。
树结构:除根结点外,每个数据元素只有一个前驱数据元素,可有0个或若干个后继数据元素。
图结构:每个数据元素可有0个或若干个前驱数据元素和0个或若干个后继数据元素。

物理结构:
数据结构在计算机中的表示称为数据的物理结构,又称为存储结构。
数据结构在计算机中有两种不同的存储结构:顺序存储结构和链式存储结构。
顺序存储结构: 用数据元素在存储器中的相对位置来表示数据元素之间的逻辑关系。
链式存储结构: 在每个数据元素中增加一个存放地址的指针,用此指针来表示数据化元素之间的逻辑关系。

算法的概念:
算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。此外,一个算法还具有下列五个重要特性:
有穷性: 一个算法应包含有限个操作步骤。即一个算法在执行若干个步骤之后应该能够结束,而且每一步都在有限时间内完成。
确定性: 算法中的每一步都必须有确切的含义,不能产生二义性。
可行性: 算法中的每一个步骤都应该是能有效地执行,并得到确定的结果。
输入: 所谓输入,是指在算法执行时,从外界取得必要的数据。计算机运行程序的目的是为了进行数据处理,在大多数情况下,这些数据需要通过输入得到。有些情况下,数据已经包含在算法中,算法执行时不需要任何数据,所以一个算法可以有零个或多个输入。
输出: 一个算法有一个或多个输出,这是算法进行数据处理后的结果。没有输出的算法是毫无意义的。
算法的这些特性可以约束程序设计人员正确地书写算法,并使之能够正确无误地执行,达到求解问题的预期效果。

算法设计的好坏关乎程序的执行效率,算法的设计必须满足下列四个要求。
正确性: 正确性的含义是算法对于一切合法的输入数据都能够得出满足要求的结果,事实上要验证算法的正确性是极为困难的,因为通常情况下合法的输入数据量太大,用穷举法逐一验证是不现实的。所谓的算法正确性是指算法达到了测试要求。
可读性: 算法的可读性是指人对算法阅读理解的难易程度,可读性高的算法便于交流,有利于算法的调试和修改。通常增加算法的可读性是在书写算法时采用按缩进格式书写、分模块书写等方法可增加算法的可读性。
健壮性: 对于非法的输入数据,算法能给出相应的响应,而不是产生不可预料的后果。
效率与低存储量需求: 效率指的是算法的执行时间。对于解决同一问题的多个算法,执行时间短的算法效率高。存储量需求指算法执行过程中所需要的最大存储空间。存储量需求越小的算法效率越高。

算法的时间复杂度:
首先定义算法中一条语句的语句频度,语句频度是指语句在一个算法中重复执行的次数。以下给出了两个n×n阶矩阵相乘算法中的各条语句以及每条语句的语句频度。

语句                                  语句频度
for (i=0;i<n;i++)                   n+1
for (j=0;j<n;j++)                   n2+n
{
c[i][j]=0;                                n2
for (k=0;k<n;k++);                n2+n2
c[i][j]=c[i][j]+a[i][k]*b[k][j];       n3
}

算法中所有语句的总执行次数为Tn=2n3+3n2+2n+1, 即语句总的执行次数是问题的规模n的函数f(n)(Tn= f(n))。进一步地简化,可用Tn表达式中n的最高次幂来度量算法执行时间的数量级,即算法的时间复杂度,记做:T(n)=O(f(n));算法的分析就是看它的时间复杂度高还是低,如果时间复杂度高,那么它的效率就低,所以复杂度越低越好。
T(n)随n的增大而增大,增长的越慢,其算法的时间复杂度越低。下列三个程序中分别给出了原操作count++的三个不同数量级的时间复杂度。
(1)count++;
其时间复杂度为O(1),称之为常量阶段时间复杂度

(2)( for(i=1;i<=n;I++)
            count++;

其时间复杂度为O(n),是线性阶时间复杂度

(3)for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
            count++;

其时间复杂度为O(n2),平方时间复杂度

常见的时间复杂度
O(1)常数阶、O(n)线性阶、O(n3)立方阶、O(2n)指数阶、O(log2n)对数阶与O(nlog2n)。时间复杂(从小到大排列)的比较如下表所示:

在这里插入图片描述

算法的空间复杂度:
采用空间复杂度作为算法所需存储空间的量度,记作:S(n)=O(f(n);
其中n为问题的规模。
程序执行时,除了需存储本身所用的指令,常数,变量和输入数据之外,还需要一些对数据进行操作的辅助存储空间。
其中对于所需要的辅助空间单元数就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值