软件编程(Programming)

数据结构

2020-07-05  本文已影响0人  ADO_AI
写在数据结构之前:前一阵通过阅读编程范式有关内容,对“面向对象编程”和“面向过程编程”有了更深入的认识。最大的认知提升在于对于程序的组织方法,不再局限于过去的面向过程编程的方式,而是认识到“对于大型程序的组织,面向对象编程(OOP可以将数据与函数绑定到一起,进行封装),是更易维护,更易复用,更易扩展,更易应变,即更加合理的方式”。其中一个令人印象深刻的例子就是燃油车和电动车;两者都提供相同的接口:方向盘/刹车/油门; 使用者可以无缝衔接地开不同车,但两种类型车的底层实现原理(例如发动机系统)完全不同;这充分体现了面向对象的编程思维(封装/提供操作接口)及其带来的优越性:“更易复用,更易扩展”。当然,实际项目中往往是面向过程编程+面向对象编程范式的综合应用。

为了更好地学习程序组织的方法和基本思想,我又尝试着去阅读了《数据结构与算法 python语言描述》《数据结构与算法 Python》(B站国家精品课程视频与内部教材PDF); 对近期所学做一个笔记摘要。综合阅读以上资料的过程中,诸多概念让我感到困惑:

1. 抽象数据类型与面向对象程序设计技术

2.结构性数据结构   [集合结构/线性(序列)结构/层次结构/树形结构/图结构]
  功能性数据结构(容器)

3. 线性结构:线性表 栈 队列 双端队列 

接下来我结合所学所看,做一个整体式的解释

抽象数据类型(Abstract Data Type,ADT)是计算机领域中被广泛接受的一种思想和方法,也是一种用于设计和实现程序模块的有效技术。ADT的基本思想是抽象,或者说是数据抽象(与函数定义的计算抽象或过程抽象对应)。python面向对象的程序设计技术是实现抽象数据类型的一种技术。--《数据结构与算法 python语言描述》裘宗燕 P34

抽象数据类型的实施(也可说是面向对象)一共有三步:
  1. 数据构造(产生对象,如 model = keras.models.Sequential() )
  2. 数据解析(获取对象有用信息,如 model.summary())
  3. 数据变动(修改对象的内部状态,如 model.add(……),model.compile(), model.fit)
以上就能看出keras中的学习模型从构建到模型训练均体现了抽象数据类型(即面向对象编程)的思想;
而之前的数据preprocessing和模型训练后的visulization则不可避免地使用面向过程编程的方式
问题1 回答:在抽象数据类型思想的指导下,面向对象编程以数据为中心进行程序组织。裘书中所讲的每种数据结构均以python语言的OOP范式进行实现。理解基本的数据结构类型及其特征是一切利用OOP进行程序组织和数据扩展的基础。
问题2 3 回答:

按照数据集合元素间是否有相互关系分为结构性数据和功能性数据:

  1. 结构性数据间元素遵循事先定义的相互关系, 包括线性(序列)结构 层次/树形结构 图结构
  2. 功能性数据 只需要能够完成元素的存储和使用即可,这是最基本的功能性的需求,无需(也不允许)规定元素间的相互关系,故又称容器()包括栈 队列 双端队列 字典等
上一篇 下一篇

猜你喜欢

热点阅读