数据结构-算法

本文介绍了数据结构和算法在程序设计中的重要性。数据结构包括数据、数据元素、数据项和逻辑与存储结构,强调了数据结构的逻辑关系如集合、线性结构、树结构和图结构。算法是解决问题的具体步骤,具有正确性、可行性等特性。文章还讨论了抽象数据类型的概念,以及算法的描述方法和分析,包括时间复杂度和空间复杂度。
摘要由CSDN通过智能技术生成

 

一、程序设计----数据表示 数据处理

【解决一个问题,将问题抽象成数据模型,得到解决问题的基本思理,将对应的想法通过数据表示存入内存中,通过算法做数据处理,最后利用编程设计实现程序,达到解决该问题】

数据表示:核心为数据结构(将数据以及数据之间的关系存储到计算机的内存中)

数据处理 :核心为算法(具体的操作步骤,将问题求解的基本思理形成算法)

程序=数据结构+算法

二、数值问题和非数值问题

问题----(数值问题|非数值问题)

抽象->数据模型:数值问题【数学方程】

非数值问题【线性表、数、图等数据结构】

|组织和处理

(1)数据的逻辑结构:表、树、图等数据结构,组织待处理的数据及数据之前的关系

(2)数据的存储结构:有效存储数据及数据之间的逻辑关系

(3)算法:增删改查,有效处理数据

(4)常用数据处理技术:查找技术、排序技术、索引技术等

三、数据结构

1.数据【data】:信息的载体

能够被输入到计算机中并且能够被计算机程序识别和处理的信息符号集合

-----(1)数值数据:整数、实数等信息

      (2)非数值数据:文字、图片、声音等信息

2.数据元素与数据项

数据元素【data element】:数据的基本单位;数据结构时涉及的最小数据单位

数据项【data item】:构成数据元素的不可分割的最小单位

3.数据结构【data structure】:相互之间存在一定关系的数据元素的集合

|(1)逻辑结构【logical structure】:数据元素之间逻辑关系的整体;

 

Data_Structure=(D,R) D数据元素的有限集合,R是D上关系的集合

逻辑关系不同:

(1)集合:无任何关系

(2)线性结构:一对一

非线性结构(3)树结构:一对多的层次关系

(4)图结构:多对多的任意关系

逻辑关系描述:—>

 

(2)存储结构,又称物理结构【storage structure】:数据及其逻辑关系在计算机中的表示,存储数据元素以及之间的逻辑关系

(1)顺序存储结构:用一组连续的存储单元依次存储数据元素,之间的逻辑关系由元素存储位置来表示

(2)链式存储结构:用任意一组存储单元存储数据元素,之间的逻辑关系用指针来表示

4.数据结构的访问接口:

数据的访问(也称操作):对数据的读取、修改、加工、处理等操作

对数据结构的操作的调用形式与规范称为操作的接口

数据结构的基本操作的接口的全体称为数据结构的访问接口

 

基本操作的特性:抽象性、基本性、完备性、一般性

数据结构的基本操作定义在逻辑结构之上,实现于存储结构——数据的封装和信息的隐藏

四、抽象数据类型:

1.数据类型:一组值得集合以及定义其上的一组操作的总称;定义了该类型值得取值范围和能够执行的操作

|高级程序设计语言支持的基本数据类型

抽象:忽略事物具体非本质细节的一个概括

2.抽象数据类型【abstract data type ADT】:一个数据结构以及定义该结构上的一组操作的总称

|自定义的数据类型——定义+实现

 

(1)定义-不涉及实现

ADT 抽象数据类型名

Data

数据元素之间的逻辑关系的定义

Operation

操作1

前置条件:执行操作前数据所必须状态

输入:

功能:该操作完成的功能

输出:

后置条件:执行操作后数据的状态

操作2

……

操作n

endADT

(2)实现——类

五、算法以及算法分析

1.算法:对特定问题求解步骤的一种描述,是指令的有限序列——解决问题的方法

2.必须满足的特性:输入【有0个或多个输入】、

输出【有一个或多个输出】、

有穷性【执行有穷步和有穷时间】、

确定性【无二义性,结果可再现】、

可行性【实现的操作执行有限次】

3.好算法的五大特性:正确性【满足需求,正确结果】、

鲁棒性【非法识别、抵抗】、

简单性【容易理解和实现】、

抽象分级【抽象-逻辑步骤-指令-模块-功能】、

高效性【时间效率和空间效率】

4.算法得描述方法:

(1)自然语言

容易理解,但容易出现二义性,且较冗长

(2)流程图

直观易懂,严密不如程序设计语言,灵活不如自然语言

(3)程序设计语言

算法可以被计算机直接执行,抽象性差

(4)伪代码

介于自然语言和程序设计语言之间得方法

适合描述算法的方法,称为算法语言或第一语言

 

5.算法分析—是否是好算法—算法效率

(1)度量算法效率的方法

事后统计:先实现再输入然后测算

实现花费时间精力多;结果依赖软硬件环境

事前分析估算:对资源消耗进行估算

(2)复杂度:时间复杂度+空间复杂度

【1】时间复杂度

<1>主要影响因素:a.问题规模n,输入量的多少

运行算法所需时间:T

|T-n:T(n)

b.基本语句:执行次数与整个算法的执行次数成正比的语句-增长趋势的度量

<2>|渐进时间复杂度【时间复杂度】:当n充分大时,基本语句执行次数再渐近意义下的阶-O

<3>定义1-1:若存在两个正的常数c和n,对于任意n>=n,都有T(n)<=cxf(n),则称T(n)=O(f(n))

<4>最好、最坏、平均情况

常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2n)<Ο(n!)

【2】空间复杂度

空间复杂度:指算法执行过程中,需要的辅助空间数量

辅助空间:除算法本身和输入输出数据所占据的空间外,算法临时开辟的存储空间-S(n)

S(n)=O(f(n))

n:问题规模

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值