Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ZHGDG_HOA.6_为什么去学算法
Search
Zoom.Quiet
May 12, 2014
Technology
270
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ZHGDG_HOA.6_为什么去学算法
140511 #GDG #Zhuhai
为什么去学算法
Zoom.Quiet
May 12, 2014
More Decks by Zoom.Quiet
See All by Zoom.Quiet
PyCon2014China-Zhuhai-high performance
zoomquiet
0
210
PyCon2014China-Zhuhai-meta programming
zoomquiet
1
180
PyCon2014China-Zhuhai-bpm.py
zoomquiet
0
160
PyCon2014China-Zhuhai-luna kv db
zoomquiet
0
160
PyCon2014China-Zhuhai-seed studio
zoomquiet
0
160
PyCon2014China-Zhuhai-Docker Registry Build By Python
zoomquiet
0
170
PyCon2014China-Zhuhai-jeff
zoomquiet
0
160
PyCon2014China-Zhuhai-pythonic front-end
zoomquiet
0
210
DevFest2014-Zhuhai-Polymer
zoomquiet
0
500
Other Decks in Technology
See All in Technology
React改造してみた
tsukina_7mochi
0
120
TinyGoでオブザーバビリティ?OpenTelemetryはTinyGoで使えるのか / Is OpenTelemetry available in TinyGo environment?
ymotongpoo
2
140
「Docker Desktop不要の時代」は 来たのか?
ueponx
0
840
Metadata - Section 1: HTML Basics
mohab1
0
130
パスキーの自動テストはどこまでいけるのか
teamlab
PRO
0
290
会社紹介資料 / Sansan Company Profile
sansan33
PRO
31
430k
夫婦で子育てするための育児標準化
codmoninc
PRO
0
460
Rust で関数型ドメインモデリング
takonda
0
170
エンタメ企業のM&Aを支えるデータ基盤 ― 統合から店舗のリアルタイム分析まで / Data Engineering Summit 2026
genda
0
200
JAWS-UGグッズ職人仕事の流儀
kentapapa
0
120
Browser Spec: Testing Hotwire with Ruby
takahashim
1
130
スキマバイトという雇用形態は存在しないので、雇用期間1日のアルバイト契約を事業者とワーカーが結ぶ手続きを支えるのがタイミーなんです
akitoshiga
0
210
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
Designing for Performance
lara
612
70k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
580
For a Future-Friendly Web
brad_frost
184
10k
Why Our Code Smells
bkeepers
PRO
340
58k
Odyssey Design
rkendrick25
PRO
2
880
30 Presentation Tips
portentint
PRO
1
430
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
330
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
Speed Design
sergeychernyshev
33
2.2k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
570
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