算法图解

[美] Aditya Bhargava

出版时间

2017-02-28

ISBN

9787115447630

评分

★★★★★
书籍介绍

本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。书中的前三章将帮助你打下基础,带你学习二分查找、大O表示法、两种基本的数据结构以及递归等。余下的篇幅将主要介绍应用广泛的算法,具体内容包括:面对具体问题时的解决技巧,比如,何时采用贪婪算法或动态规划;散列表的应用;图算法;K最近邻算法。

AI导读
核心看点
  • 图文并茂,用通俗语言拆解复杂算法
  • 涵盖二分查找、递归、排序及图算法
  • Python代码示例直观,降低学习门槛
适合谁读
  • 编程零基础或初学者,建立算法信心
  • 需快速回顾算法概念的在职程序员
  • 对计算机科学感兴趣的非专业读者
读前提醒
  • 适合入门热身,深入细节需读进阶书
  • 后半部分部分章节讲解略显简略
  • 建议配合《啊哈!算法》对比阅读
读者共识
  • 公认最好的算法入门书之一,易读
  • 前几章精彩,后几章评价褒贬不一
  • 能消除对算法的恐惧,激发学习兴趣

本导读基于书籍简介、目录、原文摘录、短评和书评生成,不等同于全文精读。

精彩摘录
  • "大O表示法(稍后介绍)讨论运行时间时, log指的都是log2。 使用大O表示法,这个运行时间为O(n)。单位秒呢?没有——大O表示法指的并非以秒为单位的速度。 大O表示法让你能够比较操作数,它指出了算法运行时间的增速。"
  • "下面按从快到慢的顺序列出了你经常会遇到的5种大O运行时间。  O(log n),也叫对数时间,这样的算法包括二分查找。  O(n),也叫线性时间,这样的算法包括简单查找。  O(n * log n),这样的算法包括第4章将介绍的快速排序——一种速度较快的排序算法。  O(n2),这样的算法包括第2章将介绍的选择排序——一种速度较慢的排序算法。  O(n!),这样的算法包括接下来将介绍的旅行商问题的解决方案——一种非常慢的算法。"
  • "当前,我们获得的主要启示如下  算法的速度指的并非时间,而是操作数的增速。  谈论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加。  算法的运行时间用大O表示法表示。  O(log n)比O(n)快,当需要搜索的元素越多时,前者比后者快得越多。"
  • "'use strict'; function binary_search(list, item) { let low = 0; let high = list.length - 1; while (low <= high) { let mid = Math.floor((low + high) / 2); let guess = list[mid]; if (guess === item) { return mid; } if (guess > item) { high = mid - 1; } else { low = mid + 1; } } return null;} const my_"
  • "'use strict';// Selection Sort - O(n^2)// Parameter:// 1. random array // 1. Finds the smallest value in an arrayfunction findSmallestIndex(array) { var smallestElement = array[0]; // Stores the smallest value var smallestIndex = 0; // Stores the index of the smallest value for (var i = 0; i < array"
  • "我很喜欢Leigh Caldwell在Stack Overflow上说的一句 话: “如果使用循环, 程序的性能可能更高; 如果使用递归, 程序可能 更容易理解。 如何选择要看什么对你来说更重要。 ”"
  • "编写递归函数时, 必须告诉它何时停止递归。 正因为如此, 每个递归 函数都有两部分: 基线条件 ( base case) 和递归条件 ( recursive case) 。 递归条件指的是函数调用自己, 而基线条件则指的是函数不再 调用自己, 从而避免形成无限循环。"
  • "使用栈虽然很方便, 但是也要付出代价: 存储详尽的信息可能占用大量 的内存。 每个函数调用都要占用一定的内存, 如果栈很高, 就意味着计 算机存储了大量函数调用的信息。 在这种情况下, 你有两种选择。 重新编写代码, 转而使用循环。 使用尾递归 。 这是一个高级递归主题, 不在本书的讨论范围内。 另外, 并非所有的语言都支持尾递归 递归指的是调用自己的函数。 每个递归函数都有两个条件: 基线条件和递归条件。 栈有两种操作: 压入和弹出。 所有函数调用都进入调用栈。 调用栈可能很长, 这将占用大量的内存。"
作者简介
Aditya Bhargava,软件工程师,兼具计算机科学和美术方面的教育背景,在adit.io撰写编程方面的博客。
目录
第1章 算法简介  1
1.1 引言  1
1.1.1 性能方面  1
1.1.2 问题解决技巧  2
1.2 二分查找  2

显示全部
用户评论
文科小白看图说话系列。感觉到了作者的苦心,已经尽可能讲的基础又简略了,即便如此,遇到代码部分还是愉快地跳过了。
很有意思也很好读的一本小书,作者实现了自己的承诺,写得非常简单易懂。Python真是一门简洁优雅的语言,以及,学习算法,真能开拓思路呀!
适合零基础当做入门科普读物吧,书中的python代码不多,还算直观。买这本书是冲着python代码去的。有点小失落,理论部分还行。
写的很好,但是太基础了。
非常好的入门算法书, 和&lt;我的第一本算法书&gt;一起看, 很快就重新回忆起各种数据结构和算法. 实现方法是python这一点也很好.
算法讲得非常清晰,尤其是动态规划
启蒙优秀著作
后面篇幅有限,结合例子的阐述变少了。 总体来说还是很不错的,特别是散列表。 之前看我的第一本算法书里说的散列值是哈希值,这下算是对应起来了。
非常好的算法入门书籍,图解可以帮助自己更好地理解
两年前,去上班的路上读过。
下载
收藏