学习来源

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

目标

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

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

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

  • 定义

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

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

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

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

学习Python程序设计语言

  • 程序设计(Programming) 是将算法编码为计算机可执行的表示法或编程语言的过程

    • 控制结构
    • 数据类型
  • python基础知识

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

清晰高效地表达算法

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

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

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

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

各种算法通常有较大差异

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

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

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

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

【数据结构与算法Python版学习笔记】引言的更多相关文章

  1. 【数据结构与算法Python版学习笔记】查找与排序——散列、散列函数、区块链

    散列 Hasing 前言 如果数据项之间是按照大小排好序的话,就可以利用二分查找来降低算法复杂度. 现在我们进一步来构造一个新的数据结构, 能使得查找算法的复杂度降到O(1), 这种概念称为" ...

  2. 【数据结构与算法Python版学习笔记】算法分析

    什么是算法分析 算法是问题解决的通用的分步的指令的聚合 算法分析主要就是从计算资源的消耗的角度来评判和比较算法. 计算资源指标 存储空间或内存 执行时间 影响算法运行时间的其他因素 分为最好.最差和平 ...

  3. 【数据结构与算法Python版学习笔记】目录索引

    引言 算法分析 基本数据结构 概览 栈 stack 队列 Queue 双端队列 Deque 列表 List,链表实现 递归(Recursion) 定义及应用:分形树.谢尔宾斯基三角.汉诺塔.迷宫 优化 ...

  4. 【数据结构与算法Python版学习笔记】递归(Recursion)——定义及应用:分形树、谢尔宾斯基三角、汉诺塔、迷宫

    定义 递归是一种解决问题的方法,它把一个问题分解为越来越小的子问题,直到问题的规模小到可以被很简单直接解决. 通常为了达到分解问题的效果,递归过程中要引入一个调用自身的函数. 举例 数列求和 def ...

  5. 【数据结构与算法Python版学习笔记】基本数据结构——列表 List,链表实现

    无序表链表 定义 一种数据项按照相对位置存放的数据集 抽象数据类型无序列表 UnorderedList 方法 list() 创建一个新的空列表.它不需要参数,而返回一个空列表. add(item) 将 ...

  6. 【数据结构与算法Python版学习笔记】树——利用二叉堆实现优先级队列

    概念 队列有一个重要的变体,叫作优先级队列. 和队列一样,优先级队列从头部移除元素,不过元素的逻辑顺序是由优先级决定的. 优先级最高的元素在最前,优先级最低的元素在最后. 实现优先级队列的经典方法是使 ...

  7. 【数据结构与算法Python版学习笔记】树——相关术语、定义、实现方法

    概念 一种基本的"非线性"数据结构--树 根 枝 叶 广泛应用于计算机科学的多个领域 操作系统 图形学 数据库 计算机网络 特征 第一个属性是层次性,即树是按层级构建的,越笼统就越 ...

  8. 【数据结构与算法Python版学习笔记】递归(Recursion)——优化问题与策略

    分治策略:解决问题的典型策略,分而治之 将问题分为若干更小规模的部分 通过解决每一个小规模部分问题,并将结果汇总得到原问题的解 递归算法与分治策略 递归三定律 体现了分支策略 应用相当广泛 排序 查找 ...

  9. 【数据结构与算法Python版学习笔记】图——最短路径问题、最小生成树

    最短路径问题 概念 可以通过"traceroute"命令来跟踪信息传送的路径: traceroute www.lib.pku.edu.cn 可以将互联网路由器体系表示为一个带权边的 ...

随机推荐

  1. Windows下Rancher复制Pod内文件到本地

    Rancher 未提供直接获取 Pod 内文件的工具(如果有请评论告知下,蟹蟹),但提供了 Rancher 的 CLI 客户端,通过 CLI 可以调用 k8s 的 CLI (kubectl) 命令来操 ...

  2. 【机器学习|数学基础】Mathematics for Machine Learning系列之线性代数(1):二阶与三阶行列式、全排列及其逆序数

    @ 目录 前言 二阶与三阶行列式 二阶行列式 三阶行列式 全排列及其逆序数 全排列 逆序数 结语 前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出-   自我介绍 ...

  3. VMware安装IPFire防火墙镜像

    之后便可以通过WEB登录到管理页面(admin账号,密码是在上面配置的) 详细可参考:https://www.mobibrw.com/2016/4900

  4. WinUI 3学习笔记(3)—— ComboBox & DropDownButton & SplitButton

    本篇想介绍相对小众但颇具使用价值的控件SplitButton,提到SplitButton难免会拿来与ComboBox进行比较,同时在WinUI 3的控件库中,还有一个默默无闻的DropDownButt ...

  5. Spring Cloud Gateway 学习+实践

    官网上给出的Spring Cloud Gateway特性如下图所示: 翻译过来就是: 基于 Spring Framework 5 ,Project Reactor 以及 Spring Boot 2.0 ...

  6. WebView(网页视图)基本用法

    资料来源于菜鸟教程 啊这官方文档居然失效了,打不开.那我们直接就看相关方法: WebChromeClient:辅助WebView处理Javascript的对话框.网站图标.网站title.加载进度等! ...

  7. Java面向对象系列(6)- 封装详解

    封装 该露的露,该藏得藏 我们程序设计要追求"高内聚,低耦合".高内聚就是类得内部数据操作细节自己完成,不允许外部干涉:低耦合:仅暴露少量得方法给外部使用 封装(数据得隐藏) 通常 ...

  8. Docker DevOps实战:Docker+Jenkins+Python+Pytest+Allure(1)- 创建Jenkins容器、安装Python环境、安装项目依赖类库、安装Allure报告插件

    前言: 本文实操笔记参照菠萝笔记,安装过程中的坑大家可以参考下 创建Jenkins容器 # 下载Jenkins镜像 [root@localhost ~]# docker pull jenkins/je ...

  9. linux中创建公私钥

    linux中创建公私钥要再~(root)目录下ssh-keygencd /root/.ssh/lsid_rsa 是私钥id_rsa.pub 是公钥把 authorized_keys删除掉,重新建aut ...

  10. 『GoLang』包

    可见性规则 在Go语言中,标识符必须以一个大写字母开头,这样才可以被外部包的代码所使用,这被称为导出.标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的.但是包名不管 ...