邓俊辉数据结构学习心得系列——如何正确衡量一个算法的好坏

数据结构这门课主要关注如何设计合理的数据结构和算法,来简化时间复杂度和空间复杂度。

想要科学的解决这样一个优化的问题,最核心的思想也是最基础的,就是要量化问题。这也是将数学运用在实际问题中的一个基石。量化复杂度,也可以称作为给复杂度建模。这个想法是最基础且重要的。正如用熵去量化信息的不确定性,不同的范数去量化不同情况下空间的大小。好的量化方式,可以用简单的方式去解决一般性问题,其重要性说到这里,不言而喻。

邓俊辉在计算模型这节里点名了这一点。并且,关于如何对复杂度建模这一内容,给出了一个从直观到抽象,从特殊到一般化,并且介绍了关注长远,对其进行简化的想法。这个过程以前看的时候觉得索然无味,心想直接关注最后的结果拿来用不就好了。但现在才明白,这些自然的演变思路,才是最宝贵,最有价值的东西。这将作为学习探索,解决问题的思路,伴随我们一生。

闲话聊得多了,现在来对其核心地方做一个梳理。

头脑风暴——面对一个问题有两套算法,如何判断一个算法的效率

想法一: 是骡子是马,牵出来遛遛。直接在一台机器上面跑一下不就知道了?
问题:

  1. 针对不同的规模,这个方法不能一概而论。
    例如矩阵求特征根的方法。矩阵维数小的时候,有小的方法。维数大的时候,有维数大的方法。不能直接说谁好谁坏。
  2. 假设问题规模一样,不同的实例,也可能造成运算时间完全不同。例如,随机搜索问题。
  3. 跑得环境不一样,结果也不一样。就计算机编程语言而言,从代码写作风格(大牛和菜鸟),选用的语言,不同编译器,电脑硬件配置,都会造成时间上的差异。

针对上面三个问题,视频中对应提出了对应的方法。(第一个问题待补充)
针对第2个问题,我们规定讨论问题规模为n时的最坏情况
针对问题3,我们设计一台理想的计算机模型,它的运算规矩是人为规定的,而且是理想的。我们通过计算,完成这个算法所需要的计算步骤,来代替运算时间,成为我们衡量一个算法耗时的标准。

这里我谈一下自己的看法,一直知道,算法的时间复杂度是通过计算这个算法运行过程中所要用到的加减乘除运算的步骤来计算的。想当然的,会想象自己有一台电脑,算法在里面运算的这个过程。但是现在这个观点,让我对为什么选取这样计算方式产生了更本质的理解。这里的计算机,不是一个实际的机器,而是一个理想的计算模型。
很自然的,接下去会产生的一个问题就是**什么是计算模型,什么是它的核心要素?**这也是后面的课程中介绍的

什么是计算模型,什么是它的核心要素?

我们为什么需要计算模型,在上文中已经进行了梳理。是为了使算法的复杂度计算不受外部因素的影响,从而制定一个放乎四海(这是一个成语,但是我不记得具体怎么说了,大致意思就是放在哪里都一致适用)的准则。因为是要用来对算法进行执行,所以认为是一个理想的计算机,称之为计算模型。
课程中给了两个模型:分别是 图灵机模型RAM模型

图灵机

其中图灵机模型的原型只是一个纸带,是早期纸条计算机编程的计算原型
图灵机模型
其运行规则,由一个5个元素组成的单元表示。
( q , c ; d , L / R , p ) (q,c;d,L/R,p) q,c;d,L/R,p
其中,q表示指针当前状态,c表示当前cell中存储的值,d表示给cell的读写操作,L/R表示接下去是左移还是右移,p表示指针接下去的状态。
视频中给了一个给一个数字加1的算法实例,来说明如何用这个模型来完成算法的计算,这里不再赘述。
如果说,图灵机计算模型是早期计算机的计算抽象,那么RAM模型,就是从现代计算机中抽象出来的计算模型

RAM模型

在这里插入图片描述
和图灵机一样,RAM模型同样是一种理想模型,也规定了基本操作。可以看到,这个模型的基本操作和图灵机比起来,更加贴近我们计算机的处理方式。
同样,视频中给了一个具体的实例,这里不再赘述。

最后,我们通过规定每一个基础计算步骤的时间(或假设都花一样的时间),来通过计算执行一个指定算法步骤数目的方式,来统一算法复杂度的计算。

总结:

  1. 如何度量算法的好坏,并且其中的解决思路是这一文的重点!
  2. 为了解决相关问题,我们提出了计算模型,来消除外部因素对算法复杂度衡量的影响。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值