算法基础概念

前言

仔细读,慢慢读

数据与数据结构

数据 是信息的载体,是对客观事物的符号表示。(计算机数据指能被计算机处理的符号的总称)

数据元素 是数据的基本单位。在计算机中通常作为一个整体考虑。

数据对象 是性质相同的数据元素的集合,是数据的一个子集

数据结构 是相互之间存在一种或多种特定关系的数据元素的集合。

任何问题中,数据元素都不是孤立存在的,而是在他们之间存在着某种联系,这种数据元素相互之间的关系称之为结构

数据结构通常下有四种基本结构:
1)集合
2)线性结构
3)树形结构
4)图形结构或者网状结构

数据元素之间的关系,在计算机中有两种表示的方法:顺序映像非顺序映像。由此得到两种不同的存储结构:顺序存储链式存储
顺序映像:借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。
非顺序映像:借助指示元素存储地址的指针表示数据元素之间的逻辑关系。

数据结构与数据类型

数据类型:类型明显或隐含着值的范围,所以一个值集合和其上的一组操作的总称。
数据类型也可分两类:
非结构的原子类型 - 不可再分了
结构类型 - 值由若干成分按某种结构组成,它是可以分解的。它的成分可以是结构的,也可以是非结构的。

数据类型即抽象数据类型ADT(Abstract Data Type),也就是一个数据模型以及定义在该模型上的一组操作。

如何形成数据类型?

为了提高软件的复用率,在近代程序设计方法学中指出,构成软件系统的每个相对独立的模块上,定义一组数据和施于这些数据上的一组操作,将实现细节隐藏于模块内部,对模块外部暴露抽象的数据结构和操作。显然抽象的层次越高,何有抽象类型的软件模块的复用程度就越高。

在这里,个人对抽象的理解就是提取对一系列数据的共性和通用性,并可以结构性的与其他抽象结构产生联系。如果不可以结构性产生联系,这就不是一种合理的抽象。

数据类型相对于数据结构,更强调范围和操作行为。即便数据结构的逻辑关系是一样的,但定义在其上的行为不同,也会产生大为不同的数据类型(例如栈和队列)。

可以把数据类型看作,已经产生明确作用和行为的数据结构,而再不只是描述元素之间的逻辑关系。

数据类型操作的种类是没有限制的,可以根据需要定义。主要由以下几种:
1)插入
2)删除
3)更新
4)查找
5)排序
从操作特性分析,可以分成两类:一类是加工类型,此操作改变了结构的值,一类是引用类型,此操作只是查询或者求得结构的值。

所以,我们了解一个数据类型,就要关心它的表示范围和行为,而了解一个数据结构,就要看其元素间的逻辑定位关系。

算法

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

算法的5个特征:
1)有穷性:必须有限步骤内完成
2)确定性:相同输入得相同输出。
3)可行性:能在有限次中行的通。
4)有输入:一个算法有零个和多个输入。输入取自特定集合。
5)有输出:一个算法有零个或多个输出。输出与输入有特定关系。

常见数据结构

线性表
有限元素构成的序列。其元素间的逻辑关系是什么,思考一下。根据存储方式不同而产生的不同的行为实现,产生两种数据类型,数组和链表(在这里,我把线性表称为数据结构,而把数组和链表称为数据类型)。
我们再区分数据行为,又可以产生栈和队列。

在这里,很容易产生分歧,什么是数据类型,什么是数据结构。通俗的讲数据类型是一种特殊的,行为更加具体的数据结构(虽说数据类型是高级语言的常用概念,然而我在这里想从计算机的角度,做一个统一),如果我们更加强调元素间的关系,我们可以称作数组,栈等是数据结构,比如它们都是线性序列,可以根据上一个线性的找到下一个。但如果我们更强调其行为和使用,则也可以称为数据类型。之所以在此赘述,希望我们能在描述角度上达成共识。


这就更贴近数据类型了。例如字符串。它有范围,有其特殊行为,也有其特殊的存储方式。但它基于基础的数据结构数组或链表实现。


仅在一端进行插入和删除操作的线性表。允许操作的一端叫做栈顶,另一端叫做栈底。“先进后出”,根据存储结构不同,又分为顺序栈和链栈。
栈可以反序输出。可以用来实现树的深度优先遍历。还有递归的实现。

队列
限定只能在线性表的一端进行插入,且只能在另一端进行删除。“先进先出”。根据存储结构分为顺序队列,链队列。

矩阵
一个二维数组。
矩阵的压缩指为多个值相同的元素只分配一个空间。对零元素不分配存储空间的存储方式。

特殊矩阵的压缩存储

  • 对称矩阵的压缩存储
  • 三角矩阵的压缩存储
  • 对角矩阵的压缩存储
    稀疏矩阵的压缩存储

结语

很多时候,我们明明已经身处其中,或者说使用多时,都对它还不熟悉,因为我们对其缺乏深度的总结和哲学性的思考。而这才是跳出其中的关键。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值