SlideShare a Scribd company logo
1 of 24
Download to read offline
如何制作算法的动画
鹄思乱想
动机
• 可视化让算法学习更有趣和容易理解
• 对⾃自⼰己算法学习的巩固
• @左⽿耳朵耗⼦子 推荐过同类⺴⽹网站,想挑战⾃自⼰己
• ⽤用 AngularJS 练习⼀一下
⺫⽬目标
• ⼀一个辅助别⼈人学习算法的⺴⽹网站
• ⽀支持基础的⼏几种排序算法
• 可选输⼊入数据 (顺序, 倒序, 随机, ⾃自⼰己输⼊入)
• 具备暂停和单步运⾏行能⼒力 (亮点, 别⼈人没有)
设计分析和想法
• 排序算法特点 - 命令式对数据结构的操作
• 动画动在哪⾥里?
• 实现难点
• 动画
• 单步运⾏行
设计分析和想法
排序算法特点 - 命令式对数据结构的操作
设计分析和想法
!
• 显⽰示当前⽐比较对象
!
• 交换
动画动在哪⾥里
设计分析和想法
• 动画实现
• MVVM 的前端思想⾮非常适合表现数据状态转换
!
• 单步执⾏行
• 怎么实现单步?
• 每步做的是什么?
实现难点
设计分析和想法
• MVVM (Model-View-ViewModel)
• 双向数据绑定 (two way data-binding)
• ⻚页⾯面随数据变化⾃自动更新
• 数组⾥里的数据位置交换了 == ⻚页⾯面动画
为什么MVVM 适合
设计分析和想法
• 原⽣生⽀支持 MVVM, 双向数据绑定
• 声明式 HTML,组件式
• 和 DOM 分离
• 测试先⾏行,还有Chrome 插件 Batarang
• 社区和⽣生态圈庞⼤大
• 强⼤大的爹 Google
• 个⼈人品味 (选择框架从来不容易)
为什么我选择 AngularJS
设计分析和想法
• Ember.js
• KnockoutJS
• Reactive
• React (Facebook)
!
• 相关链接
• 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 循环转递归
• 缺点
• 多重循环时⾮非常复杂
• 算法越复杂, 引⼊入边界条件变量越多
• 逻辑复杂,代码重构改进困难
• 想⽀支持其它算法实在写不下去了,浪费时间
设计分析和想法
• 实现原理
• 对影⼦子数据进⾏行排序
• 将每⼀一步关键操作(动画部分)放⼊入对列
• 每次取出⼀一个操作,改变⻚页⾯面数据状态
操作队列重现
设计分析和想法
怎么想到第⼆二种⽅方案
• 思维的转变 (命令式 —> 声明式)
• 动画核⼼心是数据状态变化
• 函数式思维: 同样数据, 经过同样的⽅方法, 结果应该⼀一样
• 递归
• 没看清动画本质
• 焦点放在命令式的考虑怎么对数据进⾏行操作
• 操作队列重现
• 结合动画核⼼心和函数式思维
• 焦点转变为声明哪些数据变成什么样
花多少时间?
• 实现Insertion, Selection, Bubble, Heap, Quick
• 2 星期
!
• ⽤用⽅方案⼆二重构全部
• 3 天
怎么拿来玩?
• 开源在: github.com/kenspirit/visual-alg
• 纯 HTML, JS, 打开 src/sorting.html 就可以⽤用
谢谢
!
微博: 鹄思乱想
博客: www.thinkingincrowd.me
祝: 码不停提 !-)
Happy
blog.zhgdg.org

More Related Content

Viewers also liked

ECI-The Case for Carrier Cooperation and LSO-MEF London-May 2016
ECI-The Case for Carrier Cooperation and LSO-MEF London-May 2016ECI-The Case for Carrier Cooperation and LSO-MEF London-May 2016
ECI-The Case for Carrier Cooperation and LSO-MEF London-May 2016ECI – THE ELASTIC NETWORK™
 
ECI - ElastiCLOUD™ - For Data Center & Cloud Solutions
ECI - ElastiCLOUD™ - For Data Center & Cloud SolutionsECI - ElastiCLOUD™ - For Data Center & Cloud Solutions
ECI - ElastiCLOUD™ - For Data Center & Cloud SolutionsECI – THE ELASTIC NETWORK™
 
ECI & Light Reading Webinar: Real Revenues from Virtualized Services - Nov 2015
ECI & Light Reading Webinar: Real Revenues from Virtualized Services - Nov 2015ECI & Light Reading Webinar: Real Revenues from Virtualized Services - Nov 2015
ECI & Light Reading Webinar: Real Revenues from Virtualized Services - Nov 2015ECI – THE ELASTIC NETWORK™
 
ECI-NFV from Data Center to WAN - TNC Prague - June 2016
ECI-NFV from Data Center to WAN - TNC Prague - June 2016ECI-NFV from Data Center to WAN - TNC Prague - June 2016
ECI-NFV from Data Center to WAN - TNC Prague - June 2016ECI – THE ELASTIC NETWORK™
 
ECI Risk Free Transition to Packet-UTC LATAM-April 2016
ECI Risk Free Transition to Packet-UTC LATAM-April 2016ECI Risk Free Transition to Packet-UTC LATAM-April 2016
ECI Risk Free Transition to Packet-UTC LATAM-April 2016ECI – THE ELASTIC NETWORK™
 
ECI - ElastiGRID™ - For utilities and strategic industries
ECI - ElastiGRID™ - For utilities and strategic industriesECI - ElastiGRID™ - For utilities and strategic industries
ECI - ElastiGRID™ - For utilities and strategic industriesECI – THE ELASTIC NETWORK™
 

Viewers also liked (11)

ECI-The Case for Carrier Cooperation and LSO-MEF London-May 2016
ECI-The Case for Carrier Cooperation and LSO-MEF London-May 2016ECI-The Case for Carrier Cooperation and LSO-MEF London-May 2016
ECI-The Case for Carrier Cooperation and LSO-MEF London-May 2016
 
ECI - ElastiNET™ - For Service Providers & NRENS
ECI - ElastiNET™ - For Service Providers & NRENSECI - ElastiNET™ - For Service Providers & NRENS
ECI - ElastiNET™ - For Service Providers & NRENS
 
ECI OpenFlow 2.0 the Future of SDN
ECI OpenFlow 2.0 the Future of SDN ECI OpenFlow 2.0 the Future of SDN
ECI OpenFlow 2.0 the Future of SDN
 
ECI - ElastiCLOUD™ - For Data Center & Cloud Solutions
ECI - ElastiCLOUD™ - For Data Center & Cloud SolutionsECI - ElastiCLOUD™ - For Data Center & Cloud Solutions
ECI - ElastiCLOUD™ - For Data Center & Cloud Solutions
 
vCPE Challenges and Ways Forward
vCPE Challenges and Ways Forward vCPE Challenges and Ways Forward
vCPE Challenges and Ways Forward
 
ECI & Light Reading Webinar: Real Revenues from Virtualized Services - Nov 2015
ECI & Light Reading Webinar: Real Revenues from Virtualized Services - Nov 2015ECI & Light Reading Webinar: Real Revenues from Virtualized Services - Nov 2015
ECI & Light Reading Webinar: Real Revenues from Virtualized Services - Nov 2015
 
ECI-NFV from Data Center to WAN - TNC Prague - June 2016
ECI-NFV from Data Center to WAN - TNC Prague - June 2016ECI-NFV from Data Center to WAN - TNC Prague - June 2016
ECI-NFV from Data Center to WAN - TNC Prague - June 2016
 
Virtualized Transport for Edge Computing Services
Virtualized Transport for Edge Computing ServicesVirtualized Transport for Edge Computing Services
Virtualized Transport for Edge Computing Services
 
ECI Risk Free Transition to Packet-UTC LATAM-April 2016
ECI Risk Free Transition to Packet-UTC LATAM-April 2016ECI Risk Free Transition to Packet-UTC LATAM-April 2016
ECI Risk Free Transition to Packet-UTC LATAM-April 2016
 
ECI - ElastiGRID™ - For utilities and strategic industries
ECI - ElastiGRID™ - For utilities and strategic industriesECI - ElastiGRID™ - For utilities and strategic industries
ECI - ElastiGRID™ - For utilities and strategic industries
 
ECI-High Speed Takes a Village-WDM Africa-Feb 2016
ECI-High Speed Takes a Village-WDM Africa-Feb 2016ECI-High Speed Takes a Village-WDM Africa-Feb 2016
ECI-High Speed Takes a Village-WDM Africa-Feb 2016
 

Similar to 如何用 AngularJS 制作排序算法的动画

Joomla! 網站規劃 簡報-i love joomla! 5月小聚
Joomla! 網站規劃 簡報-i love joomla! 5月小聚Joomla! 網站規劃 簡報-i love joomla! 5月小聚
Joomla! 網站規劃 簡報-i love joomla! 5月小聚Asika Simon
 
Joomla! 網站規劃 簡報 - I love joomla! 5月小聚
Joomla! 網站規劃 簡報 - I love joomla! 5月小聚Joomla! 網站規劃 簡報 - I love joomla! 5月小聚
Joomla! 網站規劃 簡報 - I love joomla! 5月小聚ilovejoomla
 
A brief introduction to Machine Learning
A brief introduction to Machine LearningA brief introduction to Machine Learning
A brief introduction to Machine LearningWen-Tien Chang
 
数据分析组14 15
数据分析组14 15数据分析组14 15
数据分析组14 15bugu bugu
 
高雄和春資工系-Axure RP基礎課程
高雄和春資工系-Axure RP基礎課程高雄和春資工系-Axure RP基礎課程
高雄和春資工系-Axure RP基礎課程Souyi Yang
 
HPX台南讀書會-Axure RP基礎課程
HPX台南讀書會-Axure RP基礎課程HPX台南讀書會-Axure RP基礎課程
HPX台南讀書會-Axure RP基礎課程Souyi Yang
 
寫出高性能的服務與應用 那些你沒想過的事
寫出高性能的服務與應用 那些你沒想過的事寫出高性能的服務與應用 那些你沒想過的事
寫出高性能的服務與應用 那些你沒想過的事Chieh (Jack) Yu
 
網站規劃
網站規劃網站規劃
網站規劃jiannrong
 
Ops X Serverless (GCPUG.TW meetup 20180627)
Ops X Serverless (GCPUG.TW meetup 20180627)Ops X Serverless (GCPUG.TW meetup 20180627)
Ops X Serverless (GCPUG.TW meetup 20180627)Earou Huang
 
Geo science cafe 如何找到一份满意的工作
Geo science cafe 如何找到一份满意的工作Geo science cafe 如何找到一份满意的工作
Geo science cafe 如何找到一份满意的工作kewuc
 
全文搜尋引擎的進階實作與應用
全文搜尋引擎的進階實作與應用全文搜尋引擎的進階實作與應用
全文搜尋引擎的進階實作與應用建興 王
 
Digital product design process
Digital product design processDigital product design process
Digital product design processpeiyuhuang5
 
Data Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouseData Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouseJack Gao
 
设计师转型培训-工具篇
设计师转型培训-工具篇设计师转型培训-工具篇
设计师转型培训-工具篇Robert Luo
 
Angular從入門到實戰(二)
Angular從入門到實戰(二)Angular從入門到實戰(二)
Angular從入門到實戰(二)志龍 陳
 
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林imShining @DevCamp
 
React Native App 設計與開發專題研習課程 003
React Native App 設計與開發專題研習課程 003React Native App 設計與開發專題研習課程 003
React Native App 設計與開發專題研習課程 003信宏 陳
 

Similar to 如何用 AngularJS 制作排序算法的动画 (20)

Joomla! 網站規劃 簡報-i love joomla! 5月小聚
Joomla! 網站規劃 簡報-i love joomla! 5月小聚Joomla! 網站規劃 簡報-i love joomla! 5月小聚
Joomla! 網站規劃 簡報-i love joomla! 5月小聚
 
Joomla! 網站規劃 簡報 - I love joomla! 5月小聚
Joomla! 網站規劃 簡報 - I love joomla! 5月小聚Joomla! 網站規劃 簡報 - I love joomla! 5月小聚
Joomla! 網站規劃 簡報 - I love joomla! 5月小聚
 
Chrome dev tool
Chrome dev toolChrome dev tool
Chrome dev tool
 
A brief introduction to Machine Learning
A brief introduction to Machine LearningA brief introduction to Machine Learning
A brief introduction to Machine Learning
 
数据分析组14 15
数据分析组14 15数据分析组14 15
数据分析组14 15
 
OOP Basic
OOP BasicOOP Basic
OOP Basic
 
高雄和春資工系-Axure RP基礎課程
高雄和春資工系-Axure RP基礎課程高雄和春資工系-Axure RP基礎課程
高雄和春資工系-Axure RP基礎課程
 
HPX台南讀書會-Axure RP基礎課程
HPX台南讀書會-Axure RP基礎課程HPX台南讀書會-Axure RP基礎課程
HPX台南讀書會-Axure RP基礎課程
 
寫出高性能的服務與應用 那些你沒想過的事
寫出高性能的服務與應用 那些你沒想過的事寫出高性能的服務與應用 那些你沒想過的事
寫出高性能的服務與應用 那些你沒想過的事
 
網站規劃
網站規劃網站規劃
網站規劃
 
Ops X Serverless (GCPUG.TW meetup 20180627)
Ops X Serverless (GCPUG.TW meetup 20180627)Ops X Serverless (GCPUG.TW meetup 20180627)
Ops X Serverless (GCPUG.TW meetup 20180627)
 
Geo science cafe 如何找到一份满意的工作
Geo science cafe 如何找到一份满意的工作Geo science cafe 如何找到一份满意的工作
Geo science cafe 如何找到一份满意的工作
 
全文搜尋引擎的進階實作與應用
全文搜尋引擎的進階實作與應用全文搜尋引擎的進階實作與應用
全文搜尋引擎的進階實作與應用
 
Digital product design process
Digital product design processDigital product design process
Digital product design process
 
Data Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouseData Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouse
 
vmarket in action
vmarket in actionvmarket in action
vmarket in action
 
设计师转型培训-工具篇
设计师转型培训-工具篇设计师转型培训-工具篇
设计师转型培训-工具篇
 
Angular從入門到實戰(二)
Angular從入門到實戰(二)Angular從入門到實戰(二)
Angular從入門到實戰(二)
 
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
 
React Native App 設計與開發專題研習課程 003
React Native App 設計與開發專題研習課程 003React Native App 設計與開發專題研習課程 003
React Native App 設計與開發專題研習課程 003
 

如何用 AngularJS 制作排序算法的动画