【数据结构与算法Python版学习笔记】引言

时间:2023-03-08 16:31:06
【数据结构与算法Python版学习笔记】引言

学习来源

北京大学-数据结构与算法Python版

目标

了解计算机科学、程序设计和问题解决的基本概念

计算机科学是对问题本身、问题的解决、以及问题求解过程中得出的解决方案的研究。面对一
个特定问题,计算机科学家的目标是得出一个算法(algorithm) ,写出一组解决该问题可能出现的任何情况的步步为营的指令。算法通过有限过程解决问题。算法是解决方案。 计算机科学可以被看作是对算法的研究。
  • 可计算
  • 抽象

理解什么是“抽象”以及抽象在问题解决过程中的作用

  • 定义

    抽象使我们能以一种区分所谓的逻辑对象和物质对象的方式来看待问题及其解决方案
  • 例子
    • 汽车,操纵机构(方向盘,油门,脚刹)称为接口
    • 计算机,一般用户使用,和计算机内部处理机制

理解“抽象数据类型”的概念以及在实际操作中学会运用

  • “过程抽象”启发“数据抽象”
  • 抽象数据类型(abstract data type) (常简写为ADT)

    不涉及数据、操作如何被执行,只是关于如何查看数据和许可操作的逻辑性描述。通过提出这种抽象概念,我们实现了对数据的封装(encapsulation) 。这种理念就是通过对执行的数据的封装,使之从用户视野中消失。这就叫做信息隐藏(information hiding) 。
  • 数据结构是对ADT的具体实现
    • 同一个ADT可以用不同数据结构实现
    • 采用程序设计语言的控制结构和基本数据类型来实现ADT所提供的逻辑接口
    • 对数据实现“逻辑”与“物理”的层次分离,可定义复杂的数据模型来解决问题,无需立即考虑此模型如何实现。
  • 接口的两端:抽象与实现
    • 独立于实现的数据模型
    • 通过层层抽象,降低问题解决过程的复杂度
  • 算法+数据结构=程序

学习Python程序设计语言

  • 程序设计(Programming) 是将算法编码为计算机可执行的表示法或编程语言的过程
    • 控制结构
    • 数据类型
  • python基础知识

为什么研究数据结构和算法

清晰高效地表达算法

  • 为了控制问题和问题解决过程的复杂度,利用抽象来保持问题的“整体感”

    而不会陷入到过多的细节当中去
  • 这要求对现实问题进行建模的时候,对算法所有处理的数据们也要保持与问题本身的一致性,不要有太多与问题无关的细节

学习各种不同问题的解决方案

  • 有助于在面对未知问题时,能够根据类似问题的解决方案来更好解决

各种算法通常有较大差异

  • 通过算法分析技术来评判算法本身特性,而不仅仅根据其所云运行环境来评判(特定机器或数据)

碰到棘手难题时能区分这种问题是否存在算法

某些问题解决需要折衷的处理方式

  • 学会在不同算法之间进行选择,以适合当前条件的要求