对《算法图解》的笔记(14)




读过 算法图解

算法图解
  • 书名: 算法图解
  • 作者: [美] Aditya Bhargava
  • 页数: 196
  • 出版社: 人民邮电出版社
  • 出版年: 2017-3
  • 1.2

    算法的速度指的并非时间, 而是操作数的增速。 谈论算法的速度时, 我们说的是随着输入的增加, 其运行时间将以 什么样的速度增加。 算法的运行时间用大O表示法表示。 O (log n )比O (n )快, 当需要搜索的元素越多时, 前者比后者快得 越多。

    2018-04-16 21:54:03 回应
  • 第1章 算法简介 code
    '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_list = [1, 3, 5, 7, 9]; console.log(binary_search(my_list, 3)); // 1console.log(binary_search(my_list, -1)); // null <?phpfunction binarySearch($needle, $array) { $low = 0; $high = count($array) - 1; while ($low <= $high) { $middle = floor(($low + $high) / 2); if ($array[$middle] == $needle) { return $middle; } if ($array[$middle] > $needle) { $high = $middle - 1; } else { $low = $middle + 1; } } return null;}$array = [1, 3, 5, 7, 9];echo binarySearch(3, $array) . "\n";echo binarySearch(-1, $array) . "\n";
    引自 第1章 算法简介 code
    2018-04-16 22:20:54 回应
  • 第2章 选择排序

    小结

    计算机内存犹如一大堆抽屉。

    需要存储多个元素时, 可使用数组或链表。

    数组的元素都在一起。

    链表的元素是分开的, 其中每个元素都存储了下一个元素的地址。

    数组的读取速度很快。

    链表的插入和删除速度很快。

    在同一个数组中, 所有元素的类型都必须相同( 都为int、 double

    等) 。

    '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.length; i++) { if (array[i] < smallestElement) { smallestElement = array[i]; smallestIndex = i; } } return smallestIndex;} // 2. Sort the arrayfunction selectionSort(array) { var sortedArray = []; var length = array.length; for (var i = 0; i < length; i++) { // Finds the smallest element in the array var smallestIndex = findSmallestIndex(array); // Adds the smallest element to new array sortedArray.push(array.splice(smallestIndex, 1)[0]); } return sortedArray;} console.log(selectionSort([5, 3, 6, 2, 10])); // [2, 3, 5, 6, 10]
    引自 第2章 选择排序
    2018-04-16 22:40:33 回应
  • 3.1
    我很喜欢Leigh Caldwell在Stack Overflow上说的一句 话: “如果使用循环, 程序的性能可能更高; 如果使用递归, 程序可能 更容易理解。 如何选择要看什么对你来说更重要。 ”
    引自 3.1
    2018-04-16 23:37:48 回应
  • 3.2
    编写递归函数时, 必须告诉它何时停止递归。 正因为如此, 每个递归 函数都有两部分: 基线条件 ( base case) 和递归条件 ( recursive case) 。 递归条件指的是函数调用自己, 而基线条件则指的是函数不再 调用自己, 从而避免形成无限循环。
    引自 3.2
    2018-04-16 23:41:39 回应
  • 3.4 小结 
    使用栈虽然很方便, 但是也要付出代价: 存储详尽的信息可能占用大量 的内存。 每个函数调用都要占用一定的内存, 如果栈很高, 就意味着计 算机存储了大量函数调用的信息。 在这种情况下, 你有两种选择。 重新编写代码, 转而使用循环。 使用尾递归 。 这是一个高级递归主题, 不在本书的讨论范围内。 另外, 并非所有的语言都支持尾递归 递归指的是调用自己的函数。 每个递归函数都有两个条件: 基线条件和递归条件。 栈有两种操作: 压入和弹出。 所有函数调用都进入调用栈。 调用栈可能很长, 这将占用大量的内存。
    引自 3.4 小结 
    2018-04-16 23:51:31 回应
  • 11.1

    2018-04-17 00:28:26 回应
  • 4.1-4.2

    function say_hello(){

    //alert(sum([1, 2, 3, 4]))

    //alert(count([1, 2, 3, 4]))

    //alert( max([1, 5, 10, 25, 16, 1]) );

    alert(quicksort([10, 5, 2, 3]));

    }

    function sum(arr){

    if(arr.length == 0)

    return 0;

    return arr[0] + sum(arr.slice(1));

    }

    function count(arr){

    if(arr.length == 0)

    return 0;

    return 1 + count(arr.slice(1));

    }

    function max(arr){

    if(arr.length == 2){

    return arr[0] > arr[1] ? arr[0] : arr[1];

    }

    var subMax = max(arr.slice(1));

    return arr[0] > subMax ? arr[0] : subMax;

    }

    function quicksort(arr){

    if(arr.length < 2)

    return arr;

    var pivot = arr[0];

    var less = arr.slice(1).filter(function(v){ return v <= pivot;});

    var greater = arr.slice(1).filter(function(v){ return v > pivot;});

    return quicksort(less).concat([pivot],quicksort(greater));

    }

    2018-04-17 16:18:49 回应
  • 4.3

    2018-04-17 16:28:37 回应
  • 5.1
    刚才你就打造了一个“Maggie”! 你结合使用散列函数和数组创建了一种 被称为散列表 ( hash table) 的数据结构。 散列表是你学习的第一种包 含额外逻辑的数据结构。 数组和链表都被直接映射到内存, 但散列表更 复杂, 它使用散列函数来确定元素的存储位置。 在你将学习的复杂数据结构中, 散列表可能是最有用的, 也被称为散列 映射、 映射、 字典和关联数组。 散列表的速度很快! 还记得第2章关于 数组和链表的讨论吗? 你可以立即获取数组中的元素, 而散列表也使用 数组来存储数据, 因此其获取元素的速度与数组一样快。
    引自 5.1
    2018-04-17 16:47:47 回应
<前页 1 2 后页>

的其他笔记  · · · · · ·  ( 全部1108条 )

人类死亡史
3
请教机长
2
预期收益:在不确定市场创造非凡回报
9
經濟學.INFOGRAPHICS視覺資訊大繪解
6
民族与民族主义
18
共產主義
2
On Java 中文版 基础卷
1
预期收益
15
阿尔法经济学
5
CFA一级中文教材
3
我畢業五年,用ETF賺到400萬
16
人为何需要仪式
3
投资的常识
5
图解棒球规则
3
生存还是毁灭
2
因子投资
6
像大师一样投资
1
致命的海滩
1
FOF投资的量化分析
1
决战股市终极方案
1
男权的神话
4
小乌龟投资智慧2
2
股票魔法师
2
每个人的经济学
11
投资精要
3
估值:难点、解决方案及相关案例
1
手把手教你港股打新
2
从投票到暴力
2
巴菲特与索罗斯的投资习惯
2
股市进阶之道
7
中国股神林园炒股秘籍
1
彼得·林奇的成功投资
8
价值的力量
1
投资至简
7
债券投资实战
1
徐远的投资课
27
原则
1
從地理看經濟的44堂公開課
6
完全圖解 從海洋看世界經濟: 從海上貿易、領海攻防, 到石油、天然氣、水產資源的爭奪戰, 看懂世界經濟全貌
5
慢慢变富
3
癌症
1
您厉害,您赚得多
4
投资中不简单的事
9
投资中最简单的事
7
超额收益
2
股市真规则
11
股市长线法宝(原书第5版)
13
大钱细思
5
共同基金常识
8
散户自救法则
1
买入大牛股的9个关键
3
指数基金投资指南
4
七堂课穿越牛熊
4
低风险投资十八种武器
6
低风险投资之路 (第二版)
1
投资大白话
4
你的第一本保险指南
6
躺着赚钱
3
ETF全球投资指南
9
投资最重要的事
14
定投十年财务自由
19
投资
1
现代世界的诞生
1
全球不平等逸史
8
好好赚钱
1
有效资产管理
4
毒家企業
1
how to如何不切实际地解决实际问题
1
迈向财富自由之路
5
美国政党与选举
6
领导力
1
戏剧
1
經濟學.視覺資訊全解讀
12
好的资本主义,坏的资本主义
5
太阳系三环到四环搬迁纪要
1
埃及的革命考古學
1
經濟學人109個世界常識: 藏在5G通訊、表情符號和酒杯尺寸背後的祕密
2
重构
1
为什么不平等至关重要
1
白板
7
邻人之妻
3
秘境
1
白话大数据与机器学习
1
深度学习入门
1
怎样玩转信息
1
民族主义
2
码农翻身
2
数据密集型应用系统设计
2
自闭症
2
瘋狂世界
1
万物起源
1
码出高效:Java开发手册
4
做二休五
1
民主
2
Java Web轻量级开发面试教程
1
海盗经济学
3
法医的眼泪
1
生活中的经济学
2
纪录片
5
数字游戏
3
程序员面试金典(第5版)
2
上一堂最好玩的日本学
1
Java程序员成功面试秘籍
15
程序员面试手册
2
Spring 3.x企业应用开发实战
3
Spring+MyBatis企业应用实战
12
扫地出门
10
数据结构与算法经典问题解析
2
深入分析Java Web技术内幕
3
东京酷玩之旅
1
日本.铁道旅行途中
1
Java程序性能优化
8
宅人的东京
1
Spring实战(第4版)
4
Spring实战(第3版)
1
Java Persistence with MyBatis 3
1
Effective java 中文版(第2版)
15
疯狂Java讲义
13
銀座媽媽桑教的,男人就是吃這套!
1
Java Web技术及应用
1
塑造世界经济的50项伟大发明
1
Java 8实战
2
MySQL技术内幕
1
吴琼琼的彩妆教室
1
风格感觉
1
培養與鍛鍊程式設計的邏輯腦(第二版)
2
明解Java
3
无神论
8
經濟學A-Z速查指南
6
高手
1
经济学语境下的法律规则
4
精通Git(第2版)
3
千年金融史
1
创造性破坏
10
移动的帝国
4
搭地铁游曼谷(第3版)
1
乡下人的悲歌
3
如何有效阅读一本书
1
co-Trip小游趣:东京
1
这就是日本
8
东京攻略完全制霸(第5版)
1
HTTP/2基础教程
2
政治是什么?
19
为什么有的国家富裕,有的国家贫穷
1
认识管理(第4版)
4
Web应用安全权威指南
22
图解基础设施设计模式
4
PHP7内核剖析
2
经济学的思维方式(原书第13版)
2
图解Java多线程设计模式
1
经营战略全史
4
图解密码技术
10
图解TCP/IP (第5版)
5
斯坦福极简经济学
1
图解HTTP
5
经济学通识课
2
Web应变之道
1
SQL进阶教程
5
SQL基础教程
9
技术之瞳——阿里巴巴技术笔试心得
2
深入理解ES6
11
文案创作完全手册
2
收获,不止SQL优化
8
卧底经济学4
7
知识分子与社会
1
Pretty Good Number One
13
网络是怎样连接的
5
图解设计模式
1
JavaScript权威指南(第6版)
1
JavaScript高级程序设计(第3版)
2
Web性能权威指南
6
JavaScript模式
7
高性能网站建设进阶指南
12
AV男優Q&A
1
黑客攻防技术宝典(第2版)
11
程序员面试攻略(原书第3版)
1
jQuery基础教程(第3版)
5
jQuery 技术内幕
1
李安哲学
1
编写高质量代码
1
HTML5数据推送应用开发
2
酷玩经济学
10
JavaScript忍者秘籍
6
Ruby on Rails Tutorial
5
Modern PHP(中文版)
1
Web前端黑客技术揭秘
5
性存在
5
好色
1
MongoDB权威指南
4
谜男启示录
2
賣淫的倫理學探究
2
嗨翻C语言
1
艺术的疗效
1
高效能程序员的修炼
2
独裁者手册
2
我的涼山兄弟
2
哈利·波特的哲学世界
4
如何高效学习
3
无聊的魅力
2
Web之困:现代Web应用安全指南
1
程序员的思维修炼
1
苦水音乐
1
大转变
1
《生活大爆炸》粉丝升级手册
3
像经济学家一样思考
1
打工女孩
3
经济学常识
1
美国底层生存方式揭秘
1
时尚的哲学
1
被掩盖的经济真相
2
读人
4
平壤水族馆
1
人生的意义
3
浪潮之巅
15
论剽窃
1
你以为你以为的就是你以为的吗?2
5
加图决策者手册
4
不要讓床冷掉
2
社会主义
1
足球经济学
14
享受吧!一個人的SEX
1
快感
2
漫步华尔街
4
一件T恤的全球经济之旅
4
一切皆有价
6
白老虎
3
市场经济:大师们的思考
23
写给无神论者
3
理性乐观派
10
怪诞行为学
5
为什么常识会撒谎
2
价格理论及其应用
9
被捆绑的欲望
2
反对爱情
5
百辩经济学
8
诡辩与真相
57
亲爱的卧底经济学家
4
头条新闻背后的哲学
1
社会学与生活
1
把妹達人之誘惑藝術
3