Skip to content

lazy-b/algorithmNote

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

小灰的算法之旅 algorithmNote

小灰的漫画之旅学习笔记

算法概述

  • 衡量算法好坏的重要标准有两个:时间复杂度空间复杂度
  • 数据结构(data structure):是数据的组织、管理和存储格式,其使用目的是为了高效地访问和修改数据。
  • 数据结构的组成方式
    • 线性结构:数组、链表、栈、队列、哈希表
    • 树:二叉树、二叉堆
    • 其他:跳表、哈希链表、位图
  • 若 存在 函数 f( n), 使 得当 n 趋近 于 无穷大 时, T( n)/ f( n) 的 极 限值 为 不等于 零 的 常数, 则 称 f( n) 是 T( n) 的 同 数量级 函数。 记作 T( n)= O( f( n)), 称为 O( f( n)), O 为 算法 的 渐进 时间 复杂度, 简称 为 时间 复杂度。

魏梦舒. 漫画算法:小灰的算法之旅 (Kindle 位置 323-325). Kindle 版本.

  • 推导出时间复杂度的几个原则:

    • 如果 运行时 间 是 常数 量级, 则用 常数 1 表示
    • 只 保留 时间 函数 中的 最 高阶 项
    • 如果 最 高阶 项 存在, 则 省去 最 高阶 项 前面 的 系数
  • 常见的空间复杂度:

    • 常量空间
    • 线性空间
    • 二维空间
    • 递归空间:纯粹的递归操作的空间复杂度也是线性的,如果递归深度是 n ,那么空间复杂度就是 O(n)
  • 什么 是 算法

    在 计算机 领域 里, 算法 是一 系列 程序 指令, 用于 处理 特定 的 运算 和 逻辑 问题。

    衡量 算法 优劣 的 主要 标准 是 时间 复杂度 和 空间 复杂度。

  • 什么 是 数据 结构

    数据 结构 是 数据 的 组织、 管理 和 存储 格式, 其 使用 目的 是 为了 高效 地 访问 和 修改 数据。

    数据 结构 包含 数组、 链 表 这样 的 线性 数据 结构, 也 包含 树、 图 这样 的 复杂 数据 结构。

  • 什么 是 时间 复杂度

    时间 复杂度 是对 一个 算法 运行 时间 长短 的 量度, 用 大 O 表示, 记作 T( n)= O( f( n))。

    常见 的 时间 复杂度 按照 从低 到 高的 顺序, 包括 O( 1)、 O( logn)、 O( n)、 O( nlogn)、 O( n2) 等。

  • 什么 是 空间 复杂度

    空间 复杂度 是对 一个 算法 在 运行 过程中 临时 占用 存储 空间 大小 的 量度, 用 大 O 表示, 记作 S( n)= O( f( n))。

    常见 的 空间 复杂度 按照 从低 到 高的 顺序, 包括 O( 1)、 O( n)、 O( n2) 等。 其中 递归 算法 的 空间 复杂度 和 递归 深度 成正比。

魏梦舒. 漫画算法:小灰的算法之旅 (Kindle 位置 453-454). Kindle 版本.

数据结构基础

数组(array)是有限个相同类型的变量(针对强类型语言,如:Java)所组成的有序集合,适合:读操作多、写操作少的场景。

链表(linked list)是一种在物理上非连续、非顺序的数据结构,由若干节点(node)所组成,适合:频繁的插入、删除元素。

* 单向链表的每一个节点又包含两部分,一部分是存放数据的变量 data,另一部分是指向下一个节点的指针 next。  
* 双向链表的每一个节点包含三部分,数据变量data、指向下一节点的next 指针以及指向前置节点的perv 指针。  

物理结构:顺序存储结构(例如:数组)、链式存储结构(例如:链表)。

逻辑结构:线性结构(例如:顺序表、栈、队列)、非线性结构(例如:树、图)。

逻辑结构不影响使用的物理结构,例如栈和队列属于逻辑结构,它们的物理结构既可以利用数组,也可以使用链表来完成。

栈( stack) 是一 种 线性 数据 结构,栈 中的 元素 只能 先入 后 出( First In Last Out, 简称 FILO)。 最早 进入 的 元素 存放 的 位置 叫作 栈 底( bottom), 最后 进入 的 元素 存放 的 位置 叫作 栈 顶( top)。

栈 这种 数据 结构 既可 以用 数组 来 实现, 也可以 用 链 表 来 实现。

队列( queue) 是一 种 线性 数据 结构, 队列 中的 元素 只能 先入 先出( First In First Out, 简称 FIFO)。 队列 的 出口 端 叫作 队 头( front), 队列 的 入口 端 叫作 队 尾( rear)。

与 栈 类似, 队列 这种 数据 结构 既可 以用 数组 来 实现, 也可以 用 链 表 来 实现。

散 列表 也 叫作 哈 希 表( hash table), 这种 数据 结构 提供 了 键( Key) 和 值( Value) 的 映射 关系。 只要 给出 一个 Key, 就可以 高效 查 找到 它 所 匹配 的 Value, 时间 复杂度 接 近于 O( 1)。

对于 某一个 Key, 散 列表 可以 在 接近 O( 1) 的 时间 内 进行 读写 操作。 散 列表 通过 哈 希 函数 实现 Key 和数 组 下标 的 转换, 通过 开放 寻址 法 和 链 表 法 来 解决 哈 希 冲突。

About

小灰的漫画之旅学习笔记

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published