• 算法作业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美。

      

    本书中,更加直观地比较了贪婪问题和动态规划在解决此背包问题上的求解。进一步说明,贪婪算法虽然理解上简单,但在很多问题上得出的不是最优解。而动态规划很大程度弥补了这一点。

    虽然内容不多,但也基本老师囊括了老师上课所讲的解题思想,帮助理解后思考老师的板书和笔记顿时豁然开朗。也许,这本书相对于其他的算法书有很多内容上的不足之处,在很多证明上都有欠缺,但我依然感谢它,教会了我很多,陪我走过这段懵懂的日子。

    这学期学了很多算法,让我不再像以前一样只知道使用蛮力算法,现在我懂得用更灵活的方法,更便捷的思路来尝试解决问题。希望在日后的学习中,可以更加熟练地运用这些算法,相互之间可以更好地联系起来,将效率最大化。

     

  • 相关阅读:
    eclipse对项目Working Sets整理分类
    word中visio只显示边框,不显示内容解决
    使用WebStorm运行vue项目
    如何提高你的学习速度-超链接式学习法
    SQL中的join连接查询
    TCP的三次握手
    Tomcat 实现热部署
    Linux下软件设成系统服务运行
    Redis服务器搭建
    nginx.conf完整配置实例
  • 原文地址:https://www.cnblogs.com/-happy-/p/14891783.html
Copyright © 2020-2023  润新知