码迷,mamicode.com
首页 > 其他好文 > 详细

数据科学002Coursera课程Algorithmic Toolbox 第二周总结

时间:2017-09-05 17:51:03      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:工作   images   举例   支持   toolbox   技术   重复   定义   结果   

为什么学习算法

简单编程问题

  1. 可以进行线性扫描
  2. 无法做到更好
  3. 程序是否工作很显而易见

算法问题

  1. 不清楚如何做
  2. 简单方法往往效率很低
  3. 有优化空间

人工智能问题很难描述清楚

 

而本课主要研究的是算法问题

明确且清晰描述的算法问题

很难高效执行的算法问题

 

从问题描述到提出算法,直观算法往往很低效。因此才需要研究算法。

斐波那契数列

0, 1, 1, 2, 3, 5, 8, 13, 21 ,34,…

最早是为了研究兔子繁殖提出的模型

定义很简单:

技术分享

给出输入n,求序列为n的斐波那契数列元素作为输出,直观算法如下:

技术分享

我们可以简单将执行代码的行数作为运行时间的单位,这样我们有:

技术分享

由此我们可以知道

T(n)>=Fn

也就是说程序的运行时间也和斐波那契数列一样高速增长,显然这远远超出了我们硬件所能支持的水平。

而直观算法速度慢的原因就是在计算前两项的过程中存在大量重复计算。

技术分享

高效算法:

技术分享

最大公约数

技术分享

 

直观算法:

技术分享

此处循环终止条件应为min(A, B)

关键引理如下:

技术分享

证明:

技术分享

欧几里得算法

 技术分享

每次循环大概把输入降为原来的一半,所以时间复杂度大概为log(ab)

计算时间复杂度

我们想要了解具有普遍意义的运行时间,也就是时间复杂度。

同时这个结果应当适用于较大量的输入

Asymptotic Notation

我们要考虑的是程序运行时间和输入数据规模的关系。

技术分享

技术分享

Bio-O Notation

技术分享

使用big-O notation 来描述运行时间有几个优点:

  1. 可以清晰描述运行时间随输入数据规模变化的增长率
  2. 表示符号更加简洁

 技术分享

使用Big-O

常见规则:

技术分享

举例:斐波那契数列

技术分享

 

 

设计的几种境界

技术分享

 

数据科学002Coursera课程Algorithmic Toolbox 第二周总结

标签:工作   images   举例   支持   toolbox   技术   重复   定义   结果   

原文地址:http://www.cnblogs.com/Libra-Beta/p/7479482.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!