![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
《算法图解》
《算法图解》
不学无术的小镇做题家
这个作者很懒,什么都没留下…
展开
-
《算法图解》第八章笔记
1.贪婪算法的概念 贪婪算法被用于解决一些看起来很复杂,很难快速求得最优解的问题,具体步骤就是每一步就选择局部最优解,最终得到的就是全局最优解,优点是简单易行。 解决背包问题不能使用贪婪算法,因为每一步选择的局部最优解,最终得到的不一定是全局最优解。 2.实例:集合覆盖问题 如何找出覆盖全美50个州的最小广播台集合呢?所有可能的集合总数有2n2^n2n个,所以运行时间为O(2n)O(2^n)O(2n),使用暴力遍历求得最优解要花费大量时间,所以只能采取贪婪算法策略: 选出这样一个广播台,即它覆盖了最多的原创 2020-06-30 22:42:02 · 404 阅读 · 2 评论 -
《算法图解》第七章笔记
7.1 使用狄克斯特拉算法 狄克斯特拉算法的用途是寻找加权图的最短路径,包含四个步骤: 找出最便宜的点,即可在最短时间内前往的点。 对于该点的邻居,检查是否有前往它们的更短路径,如果有,就更新开销。 重复这个过程,直到对图中的每个节点都这样做了。 计算最终路径。 7.2 术语 计算非加权图中的最短路径,可使用广度优先搜索;要计算加权图中的最短路径,可使用狄克斯特拉算法。狄克斯特拉算法只适用于有向无环图(directed acyclic graph,DAG)。 7.3 换钢琴 具体例子演示在书中,不多赘原创 2020-06-28 21:12:49 · 140 阅读 · 0 评论 -
《算法图解》第六章笔记
6.1 图简介 6.2 图是什么 图由节点和边组成,一个节点可能与众多节点直接相连,这些节点被称为邻居。 6.3 广度优先搜索 广度优先搜索(breadth-first search,BFS)可用于解决两类问题: 从节点A出发,有前往节点B的路径吗? 从节点A出发,前往节点B的哪条路径最短? 6.3.1 查找最短路径 实现广度优先搜索的数据结构,称为队列(queue)。 6.3.2 队列 ...原创 2020-06-15 17:29:44 · 161 阅读 · 0 评论 -
《算法图解》第五章笔记+练习
散列表查找元素的时间为O(1)O(1)O(1)。 5.1 散列函数 散列函数必须是一致的,输入相同元素返回值必须一样。 散列函数应将不同的输入映射到不同的返回值。 Python提供的散列表实现为字典,可使用函数dict来创建散列表。 >>> book = dict() >>> book['apple'] = 0.67 >>> book['milk'] = 1.49 >>> book['avocado'] = 1.5 >>原创 2020-06-02 20:05:18 · 459 阅读 · 0 评论 -
《算法图解》第四章读书笔记+练习
本章内容 学习分而治之(divide and conquer,D&C),分而治之是你学习的第一种通用的问题解决方法。 学习快速排序——一种常用的优雅的排序算法。快速排序使用分而治之的策略。 4.1 分而治之 使用D&C解决问题的过程包括两个步骤。 找出基线条件,这种条件必须尽可能简单。 找出递归条件,不断将问题分解(或者说缩小规模),直到符合基线条件。 对于求数组元素总和的问题,一般的做法采用循环 def sum(arr): total = 0 for x in arr: t原创 2020-05-27 11:03:43 · 326 阅读 · 0 评论 -
《算法图解》第三章读书笔记
3.1 递归 递归通俗来讲就是”自己调用自己“。 ”如果使用循环,程序的性能可能更高;如果使用递归,程序可能更容易理解。如何选择要看什么对你来说更重要。“ 3.2 基线条件和递归条件 基线条件(base case):函数调用自己 递归条件(recursive case):函数不再调用自己 def countdown(i): print(i) if i <= 0: #基线条件 return else: #递归条件 countdown(i-1原创 2020-05-23 22:38:59 · 134 阅读 · 0 评论 -
《算法图解》第二章读书笔记
内存的工作原理 计算机就像是很多抽屉的柜子,每个抽屉都有地址。 用户需要将数据存储到内存时,请求计算机提供存储空间,由计算机给用户提供一个存储地址。 数组 优点: 支持随机访问 内存效率高 缺点: 元素必须连续存储 需要预先申请存储空间 插入删除操作需要移动其他元素 链表 优点: 元素可以不连续存储 插入删除操作方便 不需要预先申请存储空间 缺点: 访问元素时,必须先访问前面所有元素,也就是仅支持顺序访问 内存效率较低 数组 链表 读取 O(1)O(1)O(1) O(n原创 2020-05-22 20:14:02 · 181 阅读 · 0 评论 -
《算法图解》第一章读书笔记
二分查找 二分查找要求输入数组有序,时间复杂度为O(log2n)O(log_{2}n)O(log2n),python代码如下: def binary_search(list,item): low = 0 high = len(list) - 1 while low <= high: mid = int((low + high)/2) if item > list[mid]: low = mid + 1原创 2020-05-22 00:23:19 · 136 阅读 · 0 评论