算法从入门到入土(一)

《我的第一本算法书》学习记录

数据结构

什么是数据结构

数据结构用于描述数据的顺序和位置关系,数据存储于计算机的内存中。内存如图所示,形似排成1列的箱子,1个箱子里存储1个数据。数据存储于内存时,决定了数据顺序和位置关系的便是“数据结构”。

数据结构

三种比较常见的存储格式:

  • 全局无序随机排列(适合需要不断添加数据)
  • 全局有序排列(不需要修改数据)
  • 部分有序排列(两者合一)

链表

链表是数据结构之一,其中的数据呈线性排列。在链表中,数据的添加和删除都较为方便,就是访问比较耗费时间。

链表

这就是链表的概念图。Blue、Yellow、Red这3个字符串作为数据被存储于链表中。每个数据都有1个“指针”,它指向下一个数据的内存地址。

在链表中,数据一般都是分散存储于内存中的,无须存储在连续空间内。但是读取时需要按顺序读取,比如需要读取“red”就需要先从“Blue”读起。

在链表中添加数据只需要改变对应的指针指向的位置,将需要添加数据的位置前后的指针指向改变即可。

同时删除只需要将对应数据存储的指针取消即可,不需要删除实际数据,在正常运行过程中,数据会被后续结果覆盖。

**复杂度:**把链表中的数据量记成 n n n。访问数据时,我们需要从链表头部开始查找(线性查找),如果目标数据在链表最后的话,需要的时间就是 O ( n ) O(n) O(n),添加数据或删除数据只需要该表指针位置,复杂度为 O ( 1 ) O(1) O(1)

如果在数据的结尾添加一个指针指向开始数据,就会构成循环列表,适用于固定数量的数据更新。

数组

数组也是数据呈线性排列的一种数据结构。与链表不同,在数组中,访问数据十分简单,而添加和删除数据比较耗工夫。

由于数据是存储在连续空间内的,所以每个数据的内存地址(在内存上的位置)都可以通过数组下标算出,我们也就可以借此直接访问目标数据(这叫作“随机访问”)。

复杂度: 假设数组中有n个数据,由于访问数据时使用的是随机访问(通过下标可计算出内存地址),所以需要的运行时间仅为恒定的 O ( 1 ) O(1) O1。向数组中添加新数据时,必须把目标位置后面的数据一个个移开。所以,如果在数组头部添加数据,就需要 O ( n ) O(n) On的时间。

数组与列表的比较
访问 添加 删除
链表
数组

栈也是一种数据呈线性排列的数据结构,不过在这种结构中,我们只能访问最新添加的数据。栈就像是一摞书,拿到新书时我们会把它放在书堆的最上面,取书时也只能从最上面的新书开始取。

入栈:往栈中添加数据的操作叫“入栈”(Push)

出栈:从栈中取出数据的操作叫“出栈”(POP)

从栈中取出数据时,是从最上面,也就是最新的数据开始取出的。

像栈这种最后添加的数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
动态规划是一种常用的算法思想,用于解决具有重叠子问题和最优子结构性质的问题。下面是动态规划算法入门到精通的介绍: 入门: 1. 理解问题的最优子结构性质:动态规划算法通常通过将原问题分解为子问题来求解,而子问题的最优解可以用来构建原问题的最优解。 2. 定义状态:将原问题划分为若干个子问题,并定义状态表示子问题的解。 3. 确定状态转移方程:根据子问题之间的关系,确定状态转移方程,即如何通过已知的子问题的解来求解当前问题的解。 4. 确定边界条件:确定最简单的子问题的解,即边界条件。 进阶: 1. 优化状态转移方程:通过观察和分析,可以对状态转移方程进行优化,减少计算量或空间复杂度。 2. 记忆化搜索:使用数组或哈希表等数据结构来保存已经计算过的子问题的解,避免重复计算。 3. 自底向上的迭代方法:从最简单的子问题开始,逐步迭代求解更复杂的问题,直到求解原问题。 精通: 1. 状态压缩技巧:对于某些问题,可以使用位运算等技巧将状态表示压缩为一个整数,从而减少空间复杂度。 2. 优化空间复杂度:对于某些问题,可以只保存必要的中间结果,而不是保存所有子问题的解,从而减少空间复杂度。 3. 优化时间复杂度:通过分析问题的特点,可以对状态转移方程进行优化,减少计算量或提前终止计算。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值