数据结构和算法介绍

算法 + 数据结构 = 程序

Pascal 之父尼古拉斯·沃斯(Nicklaus Wirth)凭借一句话获得了图灵奖,让他获得图灵奖的是他提出的著名公式:算法 + 数据结构 = 程序。

数据结构和算法是程序中的两个不同的概念,又有所联系。数据结构是数据的表示形式,算法是解决问题的流程,算法在程序中的体现是函数或方法。算法中经常用到数据结构,因此数据结构和算法之间存在密切的联系。

数据结构概述

数据结构虽然有多种类型,但是大致可以分成常用数据结构和高级数据结构两大类。

常用数据结构

常用数据结构为使用频率高的数据结构,有些编程语言中已经有常用数据结构的内部实现。常用数据结构有以下几种:

  • 数组和字符串
  • 链表
    • 单调栈
  • 队列
    • 单调队列
    • 优先队列
  • 哈希表
    • 二叉树
      • 二叉搜索树

高级数据结构

高级数据结构为使用频率相对较低,且要求较高的数据结构。掌握高级数据结构的难度高于掌握常用数据结构。高级数据结构有以下几种:

  • 字典树
  • 并查集
  • 线段树
  • 树状数组

算法概述

算法的种类有很多。以下列举常见的算法:

  • 排序
    • 初级排序
      • 插入排序
      • 冒泡排序
      • 选择排序
      • 插入排序变种:希尔排序
    • 高级排序
      • 归并排序
      • 堆排序
      • 快速排序
    • 线性时间排序
      • 计数排序
      • 桶排序
      • 基数排序
  • 二分查找
  • 位运算
  • 前缀和
  • 滑动窗口
  • 双指针
  • 广度优先搜索
  • 深度优先搜索
  • 回溯
  • 图算法
    • 拓扑排序
    • 最短路
    • 最小生成树
  • 分治
  • 贪心
  • 动态规划
  • 字符串算法
    • 字符串匹配
    • 字符串哈希

数学

很多算法离不开数学。例如,贪心算法的策略是每次选择局部最优解,并不是所有的问题都适合用贪心算法,对于可以用贪心算法求解的问题,需要通过数学证明贪心算法的正确性。对于动态规划算法的状态转移方程推导和正确性证明,也需要利用到数学知识。

除了算法需要数学推导和证明以外,有些算法本身就是数学知识的应用。以下列举算法中涉及到的数学方面的知识点:

  • 概率与统计
  • 组合数学
  • 博弈(常与动态规划结合)
  • 随机化
  • 几何
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟大的车尔尼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值