算法图解读书笔记

date: 2017-9-16 11:11:15
title: 算法图解读书笔记

算法图解: http://www.ituring.com.cn/book/1864
套用面试时听到的一句话: 连 topk 问题都不知道, 我们不要计算机基础这么差的. 所以, 光看这本书, 还远远不够.
coding: https://coding.net/u/daydaygo/p/algorithm/git

一些概念

big O 表示法

对数(log)的理解: 可汗学院(khanacademy.org)有一个不错的视频
理解不同的大O运行时间
算法所需的固定时间量,被称为常量
平均情况和最糟情况
一些常见的大O运行时间
O(n!): 旅行商问题 阶乘函数(factorial function)

递归

基线条件 + 递归条件
编写涉及数组的递归函数时,基线条件通常是数组为空或只包含一个元素
循环 vs 递归: 程序的性能 vs 更容易理解
调用栈(call stack): 调用另一个函数时,当前函数暂停并处于未完成状态
尾递归: 对递归进行优化, 但并不是适用所有场景


NP完全问题: 没有快速算法的问题

数据结构

数组 vs 链表: facebook 查找用户名, 首字母作为数组, 数组的值为链表
队列(queue): 先进先出(First In First Out,FIFO)
栈(stack): 后进先出(Last In First Out,LIFO)

散列表(Hash Table)

场景: DNS解析(DNS resolution) / 缓存
散列函数: 防止重复 / SHA函数
冲突: 就在这个位置存储一个链表
填装因子
调整长度(resizing): 通常将数组增长一倍
一个不错的经验规则是:一旦填装因子大于0.7,就调整散列表的长度。
几乎根本不用自己去实现散列表

节点(node) + 边(edge)
有向图(directed graph)/ 无向图(undirected graph)
图还可能有环
权重(weight): 加权图(weighted graph) / 非加权图(unweighted graph)
负权边

二叉树 binary tree

二叉查找树(binary search tree)
平衡状态的特殊二叉查找树,如红黑树。
对数据库或高级数据结构感兴趣,请研究如下数据结构:B树,红黑树,堆,伸展树

算法

二分查找: 40亿个 vs 32次查找

选择排序: 依次找出最小的数
快速排序: 选取基准值(pivot), 将序列分成大于基准值和小于基准值的 2 部分, 递归下去
合并排序(merge sort): 将序列依次分为 2 部分, 直到最小的可排序序列, 然后依次合并排序后的部分

广度优先搜索(breadth-first search,BFS)

场景: 最短路径问题(shortest-path problem)

  • 编写国际跳棋AI,计算最少走多少步就可获胜;
  • 编写拼写检查器
  • 人际关系网络找到关系最近的医生

使用队列实现时, 要注意保存节点是否访问过
big O: O(V + E),其中V 为顶点(vertice)数,E 为边数。


狄克斯特拉算法(Dijkstra's algorithm): 有向无环图(directed acyclic graph,DAG)
贝尔曼-福德算法(Bellman-Ford algorithm): 负权边的图

贪婪算法

场景: 教室调度问题 / 背包问题 / 集合覆盖问题
在有些情况下,完美是优秀的敌人
每步都选择局部最优解
近似算法(approximation algorithm): 速度有多快 / 得到的近似解与最优解的接近程度

动态规划

场景:

  • 背包问题: 当前的最大价值。
  • 最长公共子串,但其实更常用的是最长公共子序列
  • DNA链的相似性
  • git diff
  • 编辑距离(levenshtein distance)指出了两个字符串的相似程度
  • word 软件中换行

但仅当每个子问题都是离散的,即不依赖于其他子问题时,动态规划才管用
没有放之四海皆准的计算动态规划解决方案的公式。

K最近邻(k-nearest neighbours,KNN)

特征抽取: 毕达哥拉斯公式(2 点间的距离) / 余弦相似度(cosine similarity)
分类就是编组
回归(regression)就是预测结果(如一个数字)
场景: 推荐系统 / 橙子还是柚子


欧几里得算法: 两个正整数a,b的最大公约数 gcd(a,b)
分而治之(divide and conquer,D&C)
费曼算法(Feynman algorithm)


OCR(optical character recognition): 第一步是查看大量的数字图像并提取特征,这被称为训练(training)
朴素贝叶斯分类器(Naive Bayes classifier): 垃圾邮件过滤器
反向索引(inverted index): 搜索引擎
傅里叶变换: 绝妙优雅且应用广泛的算法之一 / 给它一杯冰沙, 它能告诉你其中包含哪些成分
并行算法: 并行性管理开销 / 负载均衡
MapReduce: 分布式算法 / 映射(map)函数和归并(reduce)函数
概率型算法: 布隆过滤器是一种概率型数据结构 / HyperLogLog近似地计算集合中不同的元素数 / 它提供的答案有可能不对,但很可能是正确的 / 面临海量数据且只要求答案八九不离十时
安全散列算法(secure hash algorithm,SHA)函数: 比较文件 / 检查密码
Simhash: 局部敏感的散列算法
Diffie-Hellman密钥交换: 如何对消息进行加密,以便只有收件人才能看懂呢?
线性规划: 线性规划用于在给定约束条件下最大限度地改善指定的指标 / Simplex算法

函数式编程一瞥

// haskell: sum
sum[] = 0
sum(x:xs) = x + (sum xs)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 简短点评:爱因斯坦说,“如果你不能把它解释给你外婆听,那么你就没有弄明白。”(You do not really ...
    威玲旺卡阅读 751评论 2 3
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,071评论 0 12
  • 课程介绍 先修课:概率统计,程序设计实习,集合论与图论 后续课:算法分析与设计,编译原理,操作系统,数据库概论,人...
    ShellyWhen阅读 2,249评论 0 3
  • 读《唐浩明点评曾国藩日记》 同治六年十一月初四日 魁玉是盛京将军,家门四代一品,满人。曾国藩在日记里记录下魁玉自称...
    读行人声阅读 127评论 0 0
  • 远方被白雪包裹的 脆弱的东倒西歪着 那是一排树 孤树 我能想象他们春天的样子 稠密的叶 繁杂的枝 或许你可以叫他们...
    吾誰阅读 330评论 0 0