
算法图解
gxls2024
这个作者很懒,什么都没留下…
展开
-
《算法图解》第一章学习心得
二分法学习要点:仅当列表是有序的时候, 二分查找才管用。 如按英文字母表排序的电话簿。时间复杂度为log2(n)二分法搜索的python3代码def binary_search(list,item): low=0 high=len(list)-1#low和high用于跟踪要在其中查找的列表位置 while low<=high: mid=int((low...原创 2018-03-29 20:52:32 · 278 阅读 · 0 评论 -
《算法图解》第九章动态规划学习心得
1、背包问题动态规划先解决子问题,再逐步解决大问题。每个动态规划都从一个网格开始,背包问题的网格如下:网格最初是空的,动态规划就是逐步将网格填满。吉他行第一个单元格表示背包的容量为1磅。 吉他的重量也是1磅, 这意味着它能装入背包! 因此这个单元格包含吉他, 价值为1500美元。 来看下一个单元格,这个单元格表示背包的容量为2磅, 完全能够装下吉他!这行的其他的单元格也是如此,因为你目前只能把吉他...原创 2018-04-01 16:42:19 · 2501 阅读 · 0 评论 -
《算法图解》第十一章学习心得
1、树二叉查找树 (binary search tree),如下图对于其中的每个节点,左子节点的值都比它小,而右子节点的值都比它大 (按字母表排序)。 假设你要查找Maggie。 为此, 你首先检查根节点。Maggie排在David的后面, 因此你往右边找。Maggie排在Manning前面, 因此你往左边找。终于找到了Maggie! 这几乎与二分查找一样! 在二叉查找树中查找节点时, 平均运行时...原创 2018-04-01 19:11:42 · 267 阅读 · 0 评论 -
《算法图解》第八章贪婪算法学习心得
1、近似算法近似算法 (approximation algorithm) 。 在获得精确解需要的时间太长时, 可使用近似算法。 判断近似算法优劣的标准如下:速度有多快;得到的近似解与最优解的接近程度。集合覆盖问题算法举例states_need=set(["mt", "wa", "or", "id", "nv", "ut","ca", "az"])#传原创 2018-03-31 23:44:43 · 1174 阅读 · 1 评论 -
《算法图解》第七章迪克斯特拉学习心得
1、狄克斯特拉算法 (Dijkstra's algorithm) 对于广度优先搜索找出的路径,只适用于图中边的权值都相同的情况,如果权值不相同,可能找出的未必是最短路径。如图:对于不同权值的图,我们使用狄克斯特拉算法寻找最短路径,该算法包含以下四个步骤:找出“最便宜”的节点, 即可在最短时间内到达的节点。更新该节点的邻居的开销, 其含义将稍后介绍。重复这个过程, 直到对图中的每个节点都这样做了。计...原创 2018-03-31 22:24:18 · 2933 阅读 · 0 评论 -
《算法图解》第六章广度优先搜索学习心得
1、图简介最短路径问题(shorterst-path problem),如前往朋友家的最短路径, 也可能是国际象棋中把对方将死的最少步数。 解决最短路径问题的算法被称为广度优先搜索 。 解决最短路径问题需要两个步骤:使用图来创建问题模型。使用广度优先搜索解决问题。 图仿真一组连接。 图由节点 (node) 和边 (edge)组成。一个节点可能与众多节点直接相连,这些节点被称为邻居 。 有向图 (d...原创 2018-03-31 16:50:55 · 922 阅读 · 0 评论 -
《算法图解》第五章散列表学习心得
1、散列函数散列函数必须满足一些要求:它必须是一致的。 例如, 假设你输入apple时得到的是4, 那么每次输入apple时, 得到的都必须为4。 如果不是这样, 散列表将毫无用处;它应将不同的输入映射到不同的数字。 例如, 如果一个散列函数不管输入是什么都返回1, 它就不是好的散列函数。 最理想的情况是, 将不同的输入映射到不同的数字。 散列函数的特性:散列函数总是将同样的输入映射到相同的索引;...原创 2018-03-30 22:38:19 · 774 阅读 · 0 评论 -
《算法图解》第四章快速排序学习心得
1、分而治之(divide and conquer, D&C)工作原理:找出简单的基线条件;确定如何缩小问题的规模,使其符合基线条件。2、递归求和def addarr(arr): if arr==[]: return 0 else: return arr[0]+addarr(arr[1:])3、快速排序def quicksort(array)...原创 2018-03-30 21:40:57 · 425 阅读 · 0 评论 -
《算法图解》第三章递归学习心得
1、问题的引入盒子里有盒子, 而盒子里的盒子又有盒子。 钥匙就在某个盒子中。 分别用while循环和递归解决这个问题(伪代码):while循环:def look_for_key(main_box): pile=main_box.make_a_pile_to_look_through() while pile is not empty: box=pile.grab_a...原创 2018-03-30 20:05:30 · 636 阅读 · 0 评论 -
《算法图解》第二章学习心得(二)
选择排序算法python3代码:def findSmallest(arr): smallest=arr[0]#存储最小的值 smallest_index=0#存储最小元素的索引 for i in range(1,len(arr)): if arr[i]<smallest: smallest_index=i return ...原创 2018-03-29 21:48:16 · 323 阅读 · 0 评论 -
《算法图解》第二章学习心得(一)
1、存储方式数组:数组在计算机内存中都是相连的,添加新元素比较麻烦,速度也会很慢。数组的插入时间复杂度为O(n)链表:链表中的元素可存储在内存的任何地方。链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。添加元素方便。链表的插入时间复杂度为O(1)2、访问数组:知道数组中每个元素的地址。 需要随机地读取元素时, 数组的效率很高, 因为可迅速找到数组的任何元素。 数组的元素...原创 2018-03-29 21:35:59 · 244 阅读 · 0 评论 -
《算法图解》第十章K最近邻算法学习心得
1、K最近邻 (k-nearest neighbours, KNN) 算法 问题:橙子还是柚子 ?一般而言, 柚子更大、 更红。 这个水果又大又红, 因此很可能是柚子。但下面这样的水果呢? 一种办法是看它的邻居。 来看看离它最近的三个邻居。 在这三个邻居中, 橙子比柚子多, 因此这个水果很可能是橙子。这就是使用K最近邻 (k-nearest neighbours, KNN) 算法进行了分类!其中邻...原创 2018-04-01 17:12:02 · 580 阅读 · 0 评论