
《算法图解》
《算法图解》
不学无术的小镇做题家
这个作者很懒,什么都没留下…
展开
-
《算法图解》第八章笔记
1.贪婪算法的概念贪婪算法被用于解决一些看起来很复杂,很难快速求得最优解的问题,具体步骤就是每一步就选择局部最优解,最终得到的就是全局最优解,优点是简单易行。解决背包问题不能使用贪婪算法,因为每一步选择的局部最优解,最终得到的不一定是全局最优解。2.实例:集合覆盖问题如何找出覆盖全美50个州的最小广播台集合呢?所有可能的集合总数有2n2^n2n个,所以运行时间为O(2n)O(2^n)O(2n),使用暴力遍历求得最优解要花费大量时间,所以只能采取贪婪算法策略:选出这样一个广播台,即它覆盖了最多的原创 2020-06-30 22:42:02 · 453 阅读 · 2 评论 -
《算法图解》第七章笔记
7.1 使用狄克斯特拉算法狄克斯特拉算法的用途是寻找加权图的最短路径,包含四个步骤:找出最便宜的点,即可在最短时间内前往的点。对于该点的邻居,检查是否有前往它们的更短路径,如果有,就更新开销。重复这个过程,直到对图中的每个节点都这样做了。计算最终路径。7.2 术语计算非加权图中的最短路径,可使用广度优先搜索;要计算加权图中的最短路径,可使用狄克斯特拉算法。狄克斯特拉算法只适用于有向无环图(directed acyclic graph,DAG)。7.3 换钢琴具体例子演示在书中,不多赘原创 2020-06-28 21:12:49 · 183 阅读 · 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 · 202 阅读 · 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 · 512 阅读 · 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 · 398 阅读 · 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 · 162 阅读 · 0 评论 -
《算法图解》第二章读书笔记
内存的工作原理计算机就像是很多抽屉的柜子,每个抽屉都有地址。用户需要将数据存储到内存时,请求计算机提供存储空间,由计算机给用户提供一个存储地址。数组优点:支持随机访问内存效率高缺点:元素必须连续存储需要预先申请存储空间插入删除操作需要移动其他元素链表优点:元素可以不连续存储插入删除操作方便不需要预先申请存储空间缺点:访问元素时,必须先访问前面所有元素,也就是仅支持顺序访问内存效率较低数组链表读取O(1)O(1)O(1)O(n原创 2020-05-22 20:14:02 · 222 阅读 · 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 · 171 阅读 · 0 评论