算法的由来
算法的定义
算法的定义:给定计算问题,算法是一系列良定义的计算步骤,逐一执行计算步骤可得到预期的输出。
良定义:定义明确无歧义
计算步骤:计算机可以实现的指令
有了良定义的计算步骤,计算机就可以 逐一地执行这些计算步骤,从而得到可以预期的输出。
算法的性质
算法的性质:又穷性、确定性、可行性
有穷性:算法必须在计算有限个步骤后终止;
确定性:算法必须没有歧义;
可行性:可以机械地一步一步执行基本操作步骤;
算法的表示
算法的分析-渐进分析法
课程目标:设计高效的算法、分析算法的效率。
- 分析算法的运行时间-分析算法时间复杂度
- 分析算法的内存成本-分析算法空间复杂度
课程的重点在于分析算法的运行时间
然我们对运行时间的分析独立与机器,怎么做呢? 我们可以归纳一些最基础的操作作为基本操作代价,设置均为1。
统一机器性能后,算法的运行时间依赖于问题输入规模与实例。
我们发现,最坏情况和最好情况下的输入实例对问题的运作时间是有影响的。我们来看看最好情况。
对于一般情况,相对来讲对输入的随机分布是有要求的,它的分析比较复杂,需要用到比较多的概率论的基础知识,分析难度也是比较大的,因此我们这课上并不把经历花在这种针对一般情况的平均分析。
在输入实例的影响下,我们通常是用最坏的情况,最坏的实例来对我们的算法进行分析。
算法的运行时间,在上述分析原则的情况下,既不依赖于具体的机器,也不依赖于输入的实例,它仅依赖于我的输入规模。我的输入规模n便成为了最重要的影响因素。因此,后面的算法运行时间分析,都用n的函数叫做T(n)表示。
那如何用T(n)分析清楚时间复杂度呢?
我们发现,当n充分大的时候,两个曲线其实就很接近了。
这是因为这两个函数的最高阶都是相同的。他们两个区别已经不大了。这就导致我们思考,怎么分析地简洁。
在计算机中,由于是二进制的,因此我们见到的log_2(n)简记为logn
当函数T(n)的渐进上界和渐进下界恰好相等时,就等于渐进紧确界。
我们用渐进分析法这种工具来分析算法的运行时间,分析出来的结果称之为算法的时间复杂度,通常用渐进记号O(n)表示。
如何设计有效的算法呢? 我们分成4篇来进行介绍。
前三篇是三个通用(不限制数据的结构)的算法设计策略,分而治之、动态规划、贪心策略。
因为图是一种非常通用的数据结构,针对图这种通用的数据结构呢,有一系列算法设计的技巧。
四篇中除了设计有效的算法之外,也包含着若干算法分析的技巧。
- 如何去攻克那些比较难的算法问题?
不会的问题,不要较真,但要坚持学。比如说某个算法或者问题,你1-2个小时想不出来,那么你就放下,明天再想1-2个小时,这样,总有一天,你会灵光一现把问题解决掉。
2.进入企业,无论是课本上的基础的经典算法,还是比赛中求解问题的经验,这些方法和经验在实际应用中他们帮助大不大?他们在您的实际工作中起到一个什么样的作用?
在09年之前的学术界,AI对于编程的要求不高,作为一个AI的研究员,在05-09做研究的时候没怎么用过编程或者数据结构的算法的基础,因为那个时候是小数据,主要在里面去做一些包括统计和最优化方面的研究,如何将小数据做的优美,然后matlab写一点代码跑一下就可以了。但是进入到工业界,我在05年之前的那些经验的积累对于在互联网大数据时代,怎么把算法用好及其关键。因为我可以把做体系架构和作算法的那一批人整合起来。
第二个方面,在比赛的过程当中,你会非常目标导向,我的目标就是拿冠军,围绕着拿冠军这个目标我要做什么事,最关键的五件事是什么等等。我要把这五件事做了。到了工业界其实也是目标导向,每个企业都有自己很核心的目标,要达成这个目标你最重要做哪几件事,这样一个做事的方法论也是非常重要的。
3.算法的基本素养,对于你做决策或者是工作和生活中有什么帮助呢?
今天的人工智能,大家都看到了算法,但是绝大多数人没有关注到人工智能的成本,大企业中用于去跑人工智能算法的服务器的数量都是10万计的,如果每台服务器成本是10万,那么就是100亿,绝大多数企业无法承担,那么算法数据结构和如何搭建更好的体系结构就可以去把成本降下来,这就极其重要。
4.算法是不是您企业(第四范式)的核心竞争力?
一个企业的核心是为客户提供价值。我们就是需要把算法和价值之间建立联系。
5.基本的算法和人工智能的算法有什么区别和联系?
本质上是不同的分支,今天的人工智能主要是建立在概率论的基础之上,概率论通过概率去求解一个最优解。 这个求解最优解的过程恰恰是我们在经典的教科书中看到的过程。