Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ZHGDG_HOA.6_为什么去学算法
Search
Zoom.Quiet
May 12, 2014
Technology
0
170
ZHGDG_HOA.6_为什么去学算法
140511 #GDG #Zhuhai
为什么去学算法
Zoom.Quiet
May 12, 2014
Tweet
Share
More Decks by Zoom.Quiet
See All by Zoom.Quiet
PyCon2014China-Zhuhai-high performance
zoomquiet
0
140
PyCon2014China-Zhuhai-meta programming
zoomquiet
1
110
PyCon2014China-Zhuhai-bpm.py
zoomquiet
0
87
PyCon2014China-Zhuhai-luna kv db
zoomquiet
0
86
PyCon2014China-Zhuhai-seed studio
zoomquiet
0
71
PyCon2014China-Zhuhai-Docker Registry Build By Python
zoomquiet
0
84
PyCon2014China-Zhuhai-jeff
zoomquiet
0
65
PyCon2014China-Zhuhai-pythonic front-end
zoomquiet
0
95
DevFest2014-Zhuhai-Polymer
zoomquiet
0
380
Other Decks in Technology
See All in Technology
抽象化をするということ - 具体と抽象の往復を身につける / Abstraction and concretization
soudai
16
6.8k
トラシューアニマルになろう ~開発者だからこそできる、安定したサービス作りの秘訣~
jacopen
2
2k
Developer Summit 2025 [14-D-1] Yuki Hattori
yuhattor
19
6.2k
株式会社EventHub・エンジニア採用資料
eventhub
0
4.3k
7日間でハッキングをはじめる本をはじめてみませんか?_ITエンジニア本大賞2025
nomizone
2
1.8k
関東Kaggler会LT: 人狼コンペとLLM量子化について
nejumi
3
590
AndroidXR 開発ツールごとの できることできないこと
donabe3
0
130
OpenID Connect for Identity Assurance の概要と翻訳版のご紹介 / 20250219-BizDay17-OIDC4IDA-Intro
oidfj
0
280
明日からできる!技術的負債の返済を加速するための実践ガイド~『ホットペッパービューティー』の事例をもとに~
recruitengineers
PRO
3
400
エンジニアの育成を支える爆速フィードバック文化
sansantech
PRO
3
1.1k
一度 Expo の採用を断念したけど、 再度 Expo の導入を検討している話
ichiki1023
1
170
アジャイル開発とスクラム
araihara
0
170
Featured
See All Featured
BBQ
matthewcrist
87
9.5k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
Testing 201, or: Great Expectations
jmmastey
42
7.2k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
12
960
Optimizing for Happiness
mojombo
376
70k
Designing for Performance
lara
604
68k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
How to Ace a Technical Interview
jacobian
276
23k
Transcript
None
为什么去学算法? 鹄思乱想
算法重要吗 • 不重要 - 如果你只满⾜足于实现所谓业务功能 • 重要 - 如果你不希望只是码⼯工
为什么重要 • Algorithms + Data Structures = Programs • 你永远不知道你不知道的东⻄西
• 找到解决问题更好的办法
⽰示例⼀一 • 散列的点中找所有可以包含4个点以上的线段 • ⽅方案⼀一 (暴⼒力) • 4 重循环 !
• 缺点 • 时间复杂 度 N⁴ • 要求包含点数越多,性能越差 (N⁵ N⁶ 等)
⽰示例⼀一 • 散列的点中找所有可以包含4个点以上的线段 • ⽅方案⼆二 (排序) • 每取⼀一点,算其它点相对⾓角度 • 按⾓角度排序后,找相同的点
! • 优点 • 时间复杂度 N³ lg N • N (取样本点) * NlgN (排序) * N (查找相同点) • 不存在要求包含点数越多,性能越差的问题
⽰示例⼆二 • ⼋八数码问题 • 以最少的步数排列好 ! ! • 优先队列 •
按当前阵⾏行,对紧接着可实现的阵⾏行放⼊入队列 • 把队列中的各阵⾏行,把优先值最⼩小的先取出 • 重复第⼀一步,直到和⺫⽬目标匹配
去哪学 • 国外各⼤大 MOOC (Massive Open Online Course) • Coursera
• Udacity • Edx
选 MOOC 原因 • ⺫⽬目的只是初步了解我不熟悉的东⻄西 • 单看算法书内容太多,重点不突出 • 视频时间较短,可在上下班时观看 •
进度容易控制 • 每周习题有趣 • 锻炼英语
MOOC⽐比较 • Coursera • 课程免费 • 付费/专项 (⼀一个系列多个课程) - $49/课
• 课程有固定时间安排 (开课, 作业, 考试) • 讨论区按课时, 作业, 考试细分
MOOC⽐比较 • Udacity • 免费或付费 - $150/⽉月 直到上完或取消 • ⽆无固定时间,没有任何压⼒力
• Youtube 在线看,视频可下载 • 讨论区像普通论坛,有点乱
MOOC⽐比较 • Edx • 课程免费 • 付费/专项 (⼀一个系列多个课程) - $50/课
• 课程有固定时间安排 (开课, 作业, 考试) • 国内连接速度慢
我怎么学算法 • 看 • 每天班⻋车上看视频 (来回 1 ⼩小时) • 想
• 数据建模, 解决问题思路 (⻋车上, 散步 …) • 坐电脑前有时更不好理清思路 • 做 • 习题 (9:30-10:30PM, 6-7:15AM)
有问题怎么办? • Google • 作业不会做? Performance 不通过? • 重新看视频,作业提⽰示点 •
Forum 上看别⼈人的 Tips (但没有答案贴出来) • ⾃自⼰己想, 想, 想 (深刻体会: 坚持就能想出来)
制作算法的动画 鹄思乱想
动机 • 可视化让算法学习更有趣和容易理解 • 对⾃自⼰己算法学习的巩固 • @左⽿耳朵耗⼦子 推荐过同类⺴⽹网站,想挑战⾃自⼰己 • ⽤用
AngularJS 练习⼀一下
⺫⽬目标 • ⼀一个辅助别⼈人学习算法的⺴⽹网站 • ⽀支持基础的⼏几种排序算法 • 可选输⼊入数据 (顺序, 倒序, 随机,
⾃自⼰己输⼊入) • 具备暂停和单步运⾏行能⼒力 (亮点, 别⼈人没有)
设计分析和想法 • 排序算法特点 - 命令式对数据结构的操作 • 动画动在哪⾥里? • 实现难点 •
动画 • 单步运⾏行
设计分析和想法 排序算法特点 - 命令式对数据结构的操作
设计分析和想法 ! • 显⽰示当前⽐比较对象 ! • 交换 动画动在哪⾥里
设计分析和想法 • 动画实现 • MVVM 的前端思想⾮非常适合表现数据状态转换 ! • 单步执⾏行 •
怎么实现单步? • 每步做的是什么? 实现难点
设计分析和想法 • MVVM (Model-View-ViewModel) • 双向数据绑定 (two way data-binding) •
⻚页⾯面随数据变化⾃自动更新 • 数组⾥里的数据位置交换了 == ⻚页⾯面动画 为什么MVVM 适合
设计分析和想法 • 原⽣生⽀支持 MVVM, 双向数据绑定 • 声明式 HTML,组件式 • 和
DOM 分离 • 测试先⾏行,还有Chrome 插件 Batarang • 社区和⽣生态圈庞⼤大 • 强⼤大的爹 Google • 个⼈人品味 (选择框架从来不容易) 为什么我选择 AngularJS
设计分析和想法 • Ember.js • React (Facebook) • KnockoutJS • Reactive
! • 相关链接 • http://www.ituring.com.cn/article/38394 • http://blog.nebithi.com/knockoutjs-vs-angularjs/ • http://www.quora.com/Pete-Hunt/Posts/Facebooks-React-vs-AngularJS-A-Closer-Look • http://blog.ractivejs.org/posts/whats-the-difference-between-angular-and-ractive/ 其它类似框架
设计分析和想法 • 连续动画的实现 • var id = setInterval(step, interval); •
暂停 • clearInterval(id); • 单步 • step 怎么实现单步
设计分析和想法 • ⽅方案 1. for 循环转递归 (看 SICP, 函数式上脑了) •
保留状态, for 循环到哪,⽐比较交换到哪 ! 2. 操作队列重现 每步做的是什么
设计分析和想法 for 循环转递归
设计分析和想法 for 循环转递归 • 缺点 • 多重循环时⾮非常复杂 • 算法越复杂, 引⼊入边界条件变量越多
• 逻辑复杂,代码重构改进困难 • 想⽀支持其它算法实在写不下去了,浪费时间
None
设计分析和想法 • 实现原理 • 对影⼦子数据进⾏行排序 • 将每⼀一步关键操作(动画部分)放⼊入对列 • 每次取出⼀一个操作,改变⻚页⾯面数据状态 操作队列重现
None
设计分析和想法 怎么想到第⼆二种⽅方案 • 思维的转变 (命令式 —> 声明式) • 动画核⼼心是数据状态变化 •
函数式思维: 同样数据, 经过同样的⽅方法, 结果应该⼀一样 • 递归 • 没看清动画本质 • 焦点放在命令式的考虑怎么对数据进⾏行操作 • 操作队列重现 • 结合动画核⼼心和函数式思维 • 焦点转变为声明哪些数据变成什么样
花多少时间? • 实现Insertion, Selection, Bubble, Heap, Quick • 2 星期
! • ⽤用⽅方案⼆二重构 • 3 天
怎么拿来玩? • 开源在: github.com/kenspirit/visual-alg • 纯 HTML, JS, 打开 src/sorting.html
就可以⽤用
谢谢 ! 微博: 鹄思乱想 博客: www.thinkingincrowd.me
祝: 码不停提 !-) Happy
blog.zhgdg.org