首页 > 其他分享 >读书笔记三

读书笔记三

时间:2023-12-29 13:22:32浏览次数:38  
标签:读书笔记 冰柜 问题 饮料 算法 贪心

从买书那天算起,到今天已经过了半个多月。这段时间说短不短,如果是一本300多页的小说的话,我大概一天就能搞定(我的记录是一天一千多页《大唐双龙传》),但是到现在《编程之美》我只看了不到50页。虽然我不是天天看,但是一旦我看了一个问题之后,我就希望能够把这个问题在算法层面分析透,这份专注是我以前看《算法导论》或者上算法课的时候所不曾体会到的。究其原因,主要还是纯粹的理论流于枯燥,纯粹的应用不免肤浅,而这本书的定位刚刚好,既能够以应用带动算法的学习,又能够避免过于说教的风格。

尽管初衷不错,但我仍觉拿捏得尺度有待商榷。因为编程应该既严谨又灵活,严谨的思考保证了程序运行的稳定,而灵活的思维则为创新提供了条件。而“编程之美”给我的感觉是灵活有余严谨不足。我觉得既然是有关算法的书,那么在一些关键点上的证明就不可或缺,例如在我看的六个问题中就出现两个贪心算法没证明其贪心选择性,或讨论的不够,其中“买书问题”的贪心选择还是有问题的。当然,我们不应该奢求这本定位于“面试题集”的书能够写出如“算法导论”般严格的证明。但至少应该给出具体思路,以证明想法是有依据而非直观感觉(因为我们的直观感觉在很多时候是不准确的,就比如我的读书笔记四种分析买书问题,如果把三本书的折扣改成15%,那我们就有可能被得到的折扣表格所误导而采用原始的贪心算法);最可怕的是鉴于构建反例实际是一件非常困难的事情,所以我们从给出的例子中可能也无法看出端倪。此外,在看书过程中所遇到的各种错误的数量也是屡创新高。听说马上就要出第二版了,真是为后面的内容担心,难道最后又要附一页勘误表?

虽然问题多多,但由于瑕不掩瑜,我们仍然能够从书中获得足够多的微软人的智慧,哪怕是促使我们重新温习一遍算法基础也好,希望第四版( 如果有的话:-) )能看到一个完美的“编程之美”。

    1 问题描述及分析

本题所说的问题是微软每天为员工提供各种不同的饮料,如可乐,酸奶,豆浆,咖啡,绿茶……..(待遇不错啊,呵呵),饮料i的单位容量为Vi,其中每种饮料单个容量都是2的方幂,员工对饮料i的满意度为Hi,冰柜的总容量为V(每天必须装满),问题是如何组合现有的各种饮料,使总的满意度最高。

还是说一下我的第一印象,很显然这是一道最优化问题,但很容易想到这道题和线性规划的描述很符合,但是由于解线性规划的单纯型方法比较复杂,这里就不再讨论了。其次,回想一下经典的0-1背包问题,和本问题也有些相似,所不同的是0-1背包问题中,每件物品只能拿一次,而这里同一种饮料能拿多瓶;此外,原问题中每天供应的总量V是必须达到的(否则会有员工投诉?),所以不能够像0-1背包问题那样有让背包装不满的情况。这个条件实际上改变了我们对于最优解的搜索策略,因为容量为V的装饮料的冰柜每天早晨都必须是满的,所以即便有另一个使满意度最高但冰柜不满的组合我们也是不能选的。

其实我们可以稍微改变一下本题的条件,忽略原问题中的每种饮料单个容量都是2的方幂的条件,并允许冰柜不满的情况下求最大满意度的组合,希望可以使原问题的解决更富有一般性。

标签:读书笔记,冰柜,问题,饮料,算法,贪心
From: https://www.cnblogs.com/tqylqt/p/17934669.html

相关文章

  • 读书笔记
    np.array():创建numpy数组np.zeros():返回全0数组np.ones():返回全1数组np.arange():创建等差数列数组np.linspace():创建等间隔数列数组np.reshape():改变数组形状数组运算np.add():加法运算np.subtract():减法运算np.multiply():乘法运算np.divide():除法运算np.dot():矩阵乘......
  • 《程序员的修炼之道》第三章读书笔记
    第3章基本工具中,包含了一些常用的工具和技巧,可以提高我们的工作效率和代码质量。以下是这些小节的简要介绍:14.纯文本的威力:纯文本是一种通用的文件格式,它在各种场景中都非常有用。本节介绍了一些处理纯文本的强大工具和技术,比如正则表达式、grep、sed等。15.shell游戏:shell是......
  • 《FPGA原理和结构》——读书笔记
    最近做了一个关于FPGA的项目后,读了《FPGA原理和结构》这本书。主要梗概内容和想法如下。第一章:理解FPGA所需要的基础知识理解FPGA我们需要数电的组合逻辑、时序逻辑等内容的知识。FPGA(20世纪70年度发展起来的,因为其具有通过组合使用器件内大量的逻辑块来实现所需的电路,比以往侠......
  • 读书笔记+画图
    print("0217向悦")importnumpyasnp#创建两个矩阵a=np.array([[1,2,3],[4,5,6]])b=np.array([[7,8],[9,10],[11,12]])#计算矩阵乘积c=np.dot(a,b)#打印结果print(c)importscipy.optimizeasopt#定义方程组的函数deff(x):return[x[0]**2+x[1]**2-1,x[0......
  • 读书笔记2
    孟凡荣等所著《多版本TPR树》。文中参考TR树构建了多版本TPR树。文中称多数算法参考TR树,我并没有看过TR树的文献,故具体算法尚不清楚。仅从文中所述来看TPR树是一种全时态的索引。其中的每一条记录都有一个起始时间和一个终止时间,并设置一个特定的终止时间代表“未来”,以表示这个记......
  • 《程序员的修炼之道》第二章读书笔记
    第2章《注重实效的途径》是《程序员的修炼之道》中的重要章节,它介绍了一些实践性的方法和技巧,帮助程序员在软件开发中提高效率和质量。在这一章中,作者首先强调了重复的危害。重复的代码和流程可能导致维护难度和出现错误的概率增加。因此,我们需要通过技术手段和工具来减少重复,如自......
  • 《马云传》读书笔记
    1、没有什么随便能成功,充分的准备2、从1分到79分谁能知道,他付出了多少?3、专科分线能被本科录取,是找有准备,并非偶然(13岁开始学英语)4、请教前辈,组织(建立规矩)5、敢于走出小圈子,去帮助别人获得成长。6、主动出击(传播思想、传播事实、传播观点,要比传播产品更重要)宣传7、中国黄......
  • 读书笔记1
    贯彻全书的一个原则是DRY(Don‘tRepeatYourself)原则,这也是每个优秀的开发人员必须要遵循的规范,编码过程中任何地方都不要重复,因为重复暂时节省的时间将会给以后的维护使用带来巨大的麻烦,如果发现代码有重复或者违反正交性等原则的地方要立刻找机会重构。这样才能够拥有更快、更......
  • 《程序员的修炼之道》第一章读书笔记
    第1章注重实效的哲学我的源码让猫给吃了这个部分讲述了一个程序员在设计软件时遇到的问题,他的源码被猫吃了。作者通过这个故事告诉读者,在软件开发中注重实效的重要性,要避免过度追求完美而导致无法交付和实际应用的情况发生。软件的熵本节介绍了软件的熵,即软件系统内部的混......
  • 读书笔记
    第一章概述一.软件工程概念的提出1968年NATO(NorthAtlanticTreatyOrganization,北大西洋公约组织)会议首次提出“软件工程”概念。软件工程是为了解决开发成本效益和软件质量的问题而产生。二.软件1.什么是软件?《IEEEStandardGlossaryofSoftwareEngineeringTerminol......