
[美]杰伊·温格罗 著
本书是简单易懂的数据结构与算法入门书。作者略过复杂的数学公式,用“通俗讲解×逐步图示×代码实现”的方式介绍了数据结构与算法的基本概念,培养读者的算法思维。全书共有20章。读者将了解数据结构与算法为何如此重要,如何快速使用大O记法判断代码的运行效率,以及如何用动态规划优化算法。本书的重点内容包括冒泡排序、选择排序、插入排序等排序算法,以及深度优先搜索、广度优先搜索、迪杰斯特拉算法等图算法。在学习算法的过程中,读者也将通晓数组、哈希表、栈、队列、链表、图等常用数据结构的适用场景。
第一版和第二版都不错。 你学到了正确选择算法和数据结构可以大幅改善代码性能。 你学到了如何确定代码效率。 你学到了如何优化代码,让代码更快、更省空间且更优雅。 你从本书中学到了做出合理技术决策的框架。创造伟大的软件需要评估各种可能性的优劣,而你现在已经有能力看出每种方案的优劣,根据手头的任务做出最合理的选择。你现在还有能力思考新的方案,即便这些方案可能并不直观 我还希望你能从书中学到一点:这些复杂难懂的主题不过是更简单内容的组合,而这些简单的概念都是你可以掌握的。有些参考资料对概念的解释并不是很好,反而让这些概念看起来更复杂了。但不要被这些资料吓到——任何概念都能以容易理解的方式讲解。
本书自身的算法介绍也可以算作是弹出一个最大堆的父值,让读者学到最经典的算法以此来理解和拓展类似的算法逻辑。最开心的是,关于算法本身可以通过作者的点播联想到更多的实际案例,例如我和同伴在讨论关于公司架构按照最大堆来排吗?调过来一个A和B就算他们能力差不多但可能会因为上滤(从基层开始对比)和下渗(从管理层开始对比)而到了不同的位置?OKR和KPI的系统会让最下层的员工离真正的核心方向指标越来越远吗?在进一步的想象中,发现就算公司管理扁平化,但信息没有办法随时完全地和每个节点同步,真正的结构也仍然是堆的样子(看起来像数组,实际回溯是通过一定规律的index向上回溯)等等,当然这些只是把很多问题简单化的思考,但真的会让我从不同的角度回看以前不太清晰的问题,本身也是一种分析问题的大O。总而言之,非常感谢作者的笔墨重新让我捡起一些思考的工具。
1、零基础工具书,强化逻辑推理学习。实例非常多,作者一点点手把手教,又图又画先把故事说一遍,即便代码用不上,是一本让小白完全能够看明白逻辑的算法书。 还有代码认真的一条条分析。好评! 2、这本书教会我们算法的本质是确定自己的目标(复杂度)、拆解问题,写代码只是其中一步。 例如算法优化—找规律中,先通过举例子把规律找出来,代码是呈现出来的工具/结果。 如果不想抠代码的,单看解决问题的思路也很不错!
断断续续看了一个多月终于看完了,我只能说这本书真的太棒了,自学数据结构先看这本是很好的,学校的教材未免太劝退。里面写得简洁明了,易于理解。作为一个很水的计网人,我寒假就看了点这本书,回来之后感觉C语言水平都好多了,打题目也更有思路了。虽然代码经常是用ruby写的,但是思路是通的嘛。我觉得这本给完全小白应该都能看得明白,非常之感人了。
推荐本书👍👍👍 1.数据结构就是数据的组合方式 2.算法就是为了满足某种需要对数据进行的操作 3.优化算法效率的前提是要明确当前代码的效率 4.常用的排序算法有冒泡排序、插入排序、选择排序、快速排序、查找算法有二分查找(对于有序数组很高效) 5.时间复杂度看的是步骤数而不是代码行数 6.要根据不同的需要选择合适的算法
为了面试准备,最近重读的一本书。初学算法时看得就是这本,讲解的肥肠好,虽然在实现算法时有时使用了ruby或一些其他我不会的语言,但是问题不大,毕竟现在随便一个人工智能都能帮忙转换代码。是一本对新手肥肠肥肠友好的书,个人认为比那本图解算法讲解的更友好更容易懂。 另外新手学习算法还是要注意,语言不重要,重要的是思想,不管使用什么语言来实现代码,思想都是一样的,不用过余纠结语言实现的问题。。。比如很多书籍总是说C语言描述,Java语言描述。。。这些都不重要,重要的是你理解他的思路,能使用自己任意擅长的语言实现即可。。。 重读才发现这是人民邮电出的书。。。属于是被封面耽误了的一本好书。
《秒懂算法:用常识解读数据结构与算法》: 核心内容 《秒懂算法:用常识解读数据结构与算法》是一本适合初学者的数据结构与算法入门书籍。作者杰伊·温格罗通过“通俗讲解×逐步图示×代码实现”的方式,帮助读者快速理解数据结构与算法的基本概念,培养算法思维。全书共20章,内容涵盖: 1. 数据结构的重要性:介绍了数组、哈希表、栈、队列、链表、图等常用数据结构及其适用场景。 2. 算法效率的衡量:通过大O记法帮助读者快速判断代码的运行效率。 3. 排序算法:详细讲解了冒泡排序、选择排序、插入排序等常见排序算法。 4. 图算法:包括深度优先搜索、广度优先搜索、迪杰斯特拉算法等。 5. 动态规划:介绍了如何通过动态规划优化算法。 读书笔记 1. 数据结构的基础 • 数据结构是数据的组合方式,不同的组合方式会影响代码的运行速度。 • 常见的数据结构包括数组、栈、队列、链表、哈希表和图,每种结构都有其特定的适用场景。 2. 算法效率的衡量 • 用大O记法衡量算法的时间复杂度,而不是单纯依赖运行时间。 • 例如,数组的查找操作时间复杂度为O(1),而链表的查找操作为O(n),这直接影响程序的性能。 3. 排序算法 • 冒泡排序、选择排序和插入排序是常见的简单排序算法,但它们的时间复杂度较高(O(n²)),适合小规模数据。 • 更高效的排序算法如归并排序和快速排序,时间复杂度为O(nlogn),适合大规模数据。 4. 图算法 • 深度优先搜索(DFS)和广度优先搜索(BFS)是图算法的两大基础,适用于路径搜索和图遍历。 • 迪杰斯特拉算法用于求解图中的最短路径问题,是图算法中的经典。 5. 动态规划 • 动态规划通过将问题分解为子问题并存储子问题的解,避免重复计算,从而优化算法。 6. 学习方法 • 本书通过图示和代码实现帮助读者理解算法和数据结构,适合初学者快速上手。 《秒懂算法》通过通俗易懂的方式,帮助读者快速掌握数据结构与算法的核心知识,是编程初学者的入门佳作。
ruby def unique_paths(rows, columns, memo = {}) return 1 if rows == 1 || columns == 1 # 同题目 key = [rows, columns] # 若已计算,直接返回缓存值 return memo[key] if memo.key?(key) # 递归计算并存入缓存(利用对称性可减少一半计算,但非必须) memo[key] = unique_paths(rows - 1, columns, memo) + unique_paths(rows, columns - 1, memo) end
作为一个非科班自学计算机的人,我觉得这本书讲解数据结构和算法这方面非常好,而且我是没有学过任何相关的算法等这些,只是学过一些基础的c#而已,就看这本书就可以很好的掌握这本功课了,书本有很多经典例题,结合ai来解疑,后面再刷点力扣的题来巩固和提高就更好了,非常好,非常推荐。
他的第一版读完了,第二版直接扩充了一倍的内容。总的来说教科书至少应该写成这个水平才具有基本的可读性。大部分中文书写的要不然是背诵默写,要不然写成了科普,还有的就是摆列公式,搞得好像你天生就得精通微积分(从书目编排来看,往往作者可能连一加一等于二都不理解,知识水平停留在小学的九九乘法表然后用类似的肌肉归纳法成功的混到了写书的资格,然后进一步推广其曾接受荼毒的肌肉归纳训练的指导)