Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ZHGDG_HOA.6_为什么去学算法

 ZHGDG_HOA.6_为什么去学算法

140511 #GDG #Zhuhai
为什么去学算法

Zoom.Quiet

May 12, 2014
Tweet

More Decks by Zoom.Quiet

Other Decks in Technology

Transcript

  1. ⽰示例⼀一 • 散列的点中找所有可以包含4个点以上的线段 • ⽅方案⼀一 (暴⼒力) • 4 重循环 !

    • 缺点 • 时间复杂 度 N⁴ • 要求包含点数越多,性能越差 (N⁵ N⁶ 等)
  2. ⽰示例⼀一 • 散列的点中找所有可以包含4个点以上的线段 • ⽅方案⼆二 (排序) • 每取⼀一点,算其它点相对⾓角度 • 按⾓角度排序后,找相同的点

    ! • 优点 • 时间复杂度 N³ lg N • N (取样本点) * NlgN (排序) * N (查找相同点) • 不存在要求包含点数越多,性能越差的问题
  3. ⽰示例⼆二 • ⼋八数码问题 • 以最少的步数排列好 ! ! • 优先队列 •

    按当前阵⾏行,对紧接着可实现的阵⾏行放⼊入队列 • 把队列中的各阵⾏行,把优先值最⼩小的先取出 • 重复第⼀一步,直到和⺫⽬目标匹配
  4. MOOC⽐比较 • Coursera • 课程免费 • 付费/专项 (⼀一个系列多个课程) - $49/课

    • 课程有固定时间安排 (开课, 作业, 考试) • 讨论区按课时, 作业, 考试细分
  5. MOOC⽐比较 • Edx • 课程免费 • 付费/专项 (⼀一个系列多个课程) - $50/课

    • 课程有固定时间安排 (开课, 作业, 考试) • 国内连接速度慢
  6. 我怎么学算法 • 看 • 每天班⻋车上看视频 (来回 1 ⼩小时) • 想

    • 数据建模, 解决问题思路 (⻋车上, 散步 …) • 坐电脑前有时更不好理清思路 • 做 • 习题 (9:30-10:30PM, 6-7:15AM)
  7. 有问题怎么办? • Google • 作业不会做? Performance 不通过? • 重新看视频,作业提⽰示点 •

    Forum 上看别⼈人的 Tips (但没有答案贴出来) • ⾃自⼰己想, 想, 想 (深刻体会: 坚持就能想出来)
  8. 设计分析和想法 • MVVM (Model-View-ViewModel) • 双向数据绑定 (two way data-binding) •

    ⻚页⾯面随数据变化⾃自动更新 • 数组⾥里的数据位置交换了 == ⻚页⾯面动画 为什么MVVM 适合
  9. 设计分析和想法 • 原⽣生⽀支持 MVVM, 双向数据绑定 • 声明式 HTML,组件式 • 和

    DOM 分离 • 测试先⾏行,还有Chrome 插件 Batarang • 社区和⽣生态圈庞⼤大 • 强⼤大的爹 Google • 个⼈人品味 (选择框架从来不容易) 为什么我选择 AngularJS
  10. 设计分析和想法 • 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/ 其它类似框架
  11. 设计分析和想法 • 连续动画的实现 • var id = setInterval(step, interval); •

    暂停 • clearInterval(id); • 单步 • step 怎么实现单步
  12. 设计分析和想法 • ⽅方案 1. for 循环转递归 (看 SICP, 函数式上脑了) •

    保留状态, for 循环到哪,⽐比较交换到哪 ! 2. 操作队列重现 每步做的是什么
  13. 设计分析和想法 for 循环转递归 • 缺点 • 多重循环时⾮非常复杂 • 算法越复杂, 引⼊入边界条件变量越多

    • 逻辑复杂,代码重构改进困难 • 想⽀支持其它算法实在写不下去了,浪费时间
  14. 设计分析和想法 怎么想到第⼆二种⽅方案 • 思维的转变 (命令式 —> 声明式) • 动画核⼼心是数据状态变化 •

    函数式思维: 同样数据, 经过同样的⽅方法, 结果应该⼀一样 • 递归 • 没看清动画本质 • 焦点放在命令式的考虑怎么对数据进⾏行操作 • 操作队列重现 • 结合动画核⼼心和函数式思维 • 焦点转变为声明哪些数据变成什么样