算法作业13——《算法图解》读书笔记
《算法图解》读书笔记
本书作者:Aditya Bhargava
目录:
第一章:二分查找;时间复杂度计算
第二章:数组和链表
第三章:递归;栈
第四章:快速排序
第五章:散列表
第六章:广度优先算法
第七章:狄克斯特拉算法
第八章:贪婪算法
第九章:动态规划(背包问题,最长公共子串)
第十章:K最近邻算法
对于刚刚开始学习算法的同学来说,此时还没有对算法建立起极大的兴趣,过于枯燥的算法表述可能会让人望而却步。这个时候,就应该有一本相对简单的入门级算法书带领我们打开算法的大本。机缘巧合之下,我选择了《算法笔记》,这是一本图文并茂,语言相对简单易懂的一本入门级算法类书籍。它用更多的图片,更少的文字,让我在学习算法的过程中始终保持高昂的兴趣。
从这本书中,我用它更精简的语言,有趣的插画,更容易地理解了分治和动态规划。所以想要分享一下。
1.分治(Divide and Conquer,D&C)
课堂上老师介绍分治思想是通过结合快速排序的例子讲解的,本书中具有几个更加简单的例子帮助我更好地理解分治思想。
1.1使用D&C解决问题的两个步骤:
(1)找出基线条件,这种条件必须尽可能简单
(2)不断将问题分解,直到符合基线条件
1.2数组求和,使用分治思想求解{2,4,6}
1.3 分土地,均匀地将一块土地(1680m×640m)分成若干块方块(正方形),要求分出的土地尽可能大
基线条件:土地的一边是另一边的倍数(此时就可以将该块土地均分成方块)。
(1)1680m×640m的土地中包含的最大方块是640m×640m,1680m×640m分出两块640×640m后,余下一块640m×400m
(2)640m×400m的土地中包含的最大方块是400m×400m,余下一块240m×400m
(3)240×400的土地中包含的最大方块240m×240m,余下一块240m×160m
(4)240m×160m的土地中包含的最大方块160m×160m,余下一块80m×160m
(5)此时,余下的80m×160m的土地满足基线条件,80m×160m的土地均分成3块80m×80m。最后的结果就是1680m×640m的土地可以均分的最大方块边长是80m
2.贪婪算法&动态规划(Dynamic Programming,DP)
课堂上,老师也把经典的背包问题作为例子。本书中,背包问题也作为贪婪算法和动态规划的开篇之章。
2.1贪婪算法:音响3000美元,30磅;笔记本电脑2000美元,20磅;吉他1500美元,15磅;问35磅的背包最多可以装下多少美元的东西。每种物品只有一个。
贪心算法,在这里是以价值优先的方法选择物品。选择了重量30磅价值3000美元的音箱,而放弃了总重量35磅总价值3500美元的笔记本电脑和吉他。
2.2动态规划:吉他1500美元,1磅;音响3000美元,4磅;笔记本电脑,2000美元,3磅。每种物品只有1个。
(1)吉他行,1-4磅的背包均只可最多放入1把吉他,当前最大价值均为1500美元。
(2)音响行,1-3磅的背包均只可最多放入1把吉他,当前最大价值均为1500美元;到了4磅的背包,可以选择放1个音响,当前最大价值为3000美元。
(3)笔记本电脑行,1-2磅的背包均只可最多放入1把吉他,当前最大价值均为1500美元;到了3磅的背包,可以选择放1个笔记本电脑,当前最大价值均为2000美元;到了4磅的背包,选择1把吉他+3台笔记本电脑的总价值是3500磅,大于只放1个音响的价值(3000美元),选择前者,当前最大价值均为3500美。
本书中,更加直观地比较了贪婪问题和动态规划在解决此背包问题上的求解。进一步说明,贪婪算法虽然理解上简单,但在很多问题上得出的不是最优解。而动态规划很大程度弥补了这一点。
虽然内容不多,但也基本老师囊括了老师上课所讲的解题思想,帮助理解后思考老师的板书和笔记顿时豁然开朗。也许,这本书相对于其他的算法书有很多内容上的不足之处,在很多证明上都有欠缺,但我依然感谢它,教会了我很多,陪我走过这段懵懂的日子。
这学期学了很多算法,让我不再像以前一样只知道使用蛮力算法,现在我懂得用更灵活的方法,更便捷的思路来尝试解决问题。希望在日后的学习中,可以更加熟练地运用这些算法,相互之间可以更好地联系起来,将效率最大化。