植物百科网
当前位置: 首页 农业百科

算法概念公式大全(掌握这些数学函数)

时间:2023-08-04 作者: 小编 阅读量: 1 栏目名: 农业百科

掌握这些数学函数如何进行算法分析呢?最简单方法是分别运行解决同一个问题的两个算法进行比较,但这样做法在很多时候并不理想面对这样的困难迫使我们求助于数学工具,虽然我们不能对一个还没有完整实现的程序使用运行比较法,但却能。

如何进行算法分析呢?

最简单方法是分别运行解决同一个问题的两个算法进行比较,但这样做法在很多时候并不理想。面对这样的困难迫使我们求助于数学工具,虽然我们不能对一个还没有完整实现的程序使用运行比较法,但却能通过数学分析了解程序性能的大致轮廓并预估改进版本的有效性。

大多数算法都有影响运行时间的主要参数 N,这里的 N 是所解决问题的大小的抽象度量,比如对于一个排序算法来说,N 是待排序元素的个数。我们的目标是尽可能地使用简单的数学公式,用 N 表达出程序的运行效率。

函数的增长

对于将要比较的两个算法,我们并不满足于简单地描述为“一个算法比另一个算法快”,而是希望能够通过数学函数直观地感受到二者的差异,具体来说,是希望知道“一个算法比另一个算法快多少”。

一些函数在算法分析中极为常见:

  1. 1。如果程序中的大多数指令只运行 1 次或几次,与问题的规模无关,我们就说程序运行的时间是常量的。小高斯的算法就是典型的常量时间。
  2. lg⁡N。随着问题规模的增长,程序运行时间增长较慢,可以认为程序的运行时间小于一个大常数。虽然对数的底数会影响函数的值,但影响不大。鉴于计算机是 2 进制的,所以通常取 2 为底数,lg⁡N=log2(⁡N),这与数学中略有差别(数学中 lg⁡N=log10⁡(N))。当 N=1024 时,lg⁡N=10;当 N 增长了 10 倍时,lg⁡N≈13,仅有略微的增长;只有当 N 增长到 N^2 时,lg⁡N 才翻倍。如果一个算法是把一个大问题分解为若干个小问题,而每个小问题的运行时间是常数,那么我们认为这个算法的运行时间是 lg⁡N,二分查找就其中的典型。
  3. √N。比 lg⁡N 稍大,当问题规模翻倍时,运行时间比翻倍少一点;当 N 增长了 100 倍时,程序运行时间增长 10 倍。开销是 √N 时间的程序通常对程序的终止条件做了处理,比如 ,在判断一个数是否是素数时,边界值是这个数的平方根,而不是这个数本身。
  4. N。这就是通常所说的线性时间,如果问题规模增大了 M 倍,程序运行时间也增大 M 倍。1 到 100 的蛮力求和法就是线性时间,这类方法通常带有一个以问题规模为终点的循环。
  5. N lg⁡N。当问题规模翻倍时,如果运行时间比翻倍多一点,我们就简单地说程序运行的时间是 N lg⁡N。当 N=1024 时,N lg⁡N=10240;如果 N=2048 ,N lg⁡N=22528。N lg⁡N 与 lg⁡N 都是把一个大问题分解为若干个能过在常数时间内运行的小问题,区别在于是否需要合并这些小问题,如果合并,就是 N lg⁡N;如果不合并,就是 lg⁡N。大多数归并问题的运行时间可以简单地看作 N lg⁡N。
  6. N²。如果问题规模翻倍,运行时间增长 4 倍;问题规模增长 10 倍,运行时间增长 100 倍。
  7. N³。如果问题规模翻倍,运行时间增长 8 倍;问题规模增长 10 倍,运行时间增长 1000 倍。
  8. 2^N。真正要命的增长。如果 N=10,2^N=1024;N 翻倍后,2^N=1048576。复杂问题的蛮力法通常具有这样的规模,这类算法通常不能应用于实际。

来看一下这些函数的增长曲线,如图 1 所示。

▲ 图 1 函数增长的曲线

以上函数能够帮助我们直观地理解算法的运行效率,让我们很容易区分出快速算法和慢速算法。大多数时候,我们都简单地把程序运行的时间称为“常数”、“线性”、“平方次”等。对于小规模的问题,算法的选择不那么重要,一旦问题达到一定规模,算法的优劣就会立马体现出来。代码 4-2 展示了当问题规模是 10、100、1000、10000、100000、1000000 时 lg⁡N 、√N 、N、N lg⁡N 、N² 、N³ 的增长规模。

▼代码 2 函数的增长规模 C4_2.py

01importmath0203fun_list=['lgN','sqrt(N)','N','NlgN','N^2','N^3']#函数列表04print(''*10,end='')05forfinfun_list:06print('%-15s'%f,end='')07print('\n','-'*100)0809N_list=[10**nforninrange(7)]#问题规模10forNinN_list:#函数在不同问题规模下的增长11print('%-8s%-2s'%(N,'|'),end='')12print('%-15d'%round(math.log2(N)),end='')13print('%-15d'%round(math.sqrt(N)),end='')14print('%-15d'%N,end='')15print('%-15d'%round(N*math.log2(N)),end='')16print('%-15d'%N**2,end='')17print(N**3)

运行结果如图 4.2 所示。

图 2 告诉我们,该问题规模是 1 的时候,所有算法都同样有效,问题规模越大,不同复杂度的算法运行效率相差得越大。

2^N 增长得太过迅猛,作为一个另类单独列出。

▼ 代码 3 2^N 的增长

01forNinrange(10,110,10):02print('2**{0}={1}'.format(N,2**N))

运行结果如图 3 所示。

▲ 图 4.3 2^N 的增长

这些运行结果告诉我们,有些时候,选择正确的算法是解决问题的唯一途径。对于函数的输出结果来说,如果把 100 看作 1 秒,那么 10000 就是 100 秒,超过 1 分半。这意味着对于一个规模是 1000000 的问题来说,一个是 lg⁡N 复杂度的算法可以立刻得出结果,√N 复杂度的算法耗时约 10 秒,N 复杂度的算法耗时将超过 2.7 小时,N^3 复杂度则需要 3 万多年!也许我们可以忍受一运行 10 秒或 2.7 小时的程序,但一定没法容忍有生之年看不到结果的程序。


上文 [遇见] 授权节选自北大出版社《程序员数学从零开始》

270余幅插图 90余段Python代码 20余个原理剖析,教你学会程序员必须掌握的数学及算法背后的数学原理。

    推荐阅读
  • 突触名词解释(突触是什么意思)

    突触名词解释突触是指一个神经元的冲动传到另一个神经元或传到另一细胞间的相互接触的结构。突触是神经元之间在功能上发生联系的部位,也是信息传递的关键部位。在光学显微镜下,可以看到一个神经元的轴突末梢经过多次分支,最后每一小支的末端膨大呈杯状或球状,叫做突触小体。这些突触小体可以与多个神经元的细胞体或树突相接触,形成突触。从电子显微镜下观察,可以看到,这种突触是由突触前膜、突触间隙和突触后膜三部分构成。

  • 《守望先锋》对战局影响大招top一览 守望先锋对局战绩

    今天小编要为大家带来的是玩家“黑呦酱”分享的《守望先锋》对战局影响大招top一览,感兴趣的玩家赶紧一起来看看吧!守望先锋大招分为四类,控制类,自身BUFF类,辅助类以及伤害类,由于伤害类大部分使用大招时,本体无法进行有效杀伤,且控制类及自身BUFF类需要其他技能的配合,so,此间因素也要加入考量。

  • 运动后喝黑咖啡还能燃脂吗 运动时喝黑咖啡会加快燃脂吗?

    2、运动过程中身体脂肪会加速燃烧,从而具有一定减肥作用;而黑咖啡热量比较小,加上其中含有大量的咖啡因以及维生素、纤维素物质,适量喝可以促进人体肠胃蠕动,加速脂肪代谢分解,对减肥具有促进作用。

  • 斯威汽车质量怎么样(斯威质量好不好)

    2018年6月起,斯威“品质特工队”以四大火炉的重庆作为起点,途径海南、吐鲁番、格尔木三地,历时近一年进行了数十万公里极限环境适应性试验。极端干燥高温环境下,常见车内温度往往会狂飙到60℃以上,而在斯威G01的车厢里,却始终能够保持清新凉爽的状态。一整套严酷考验下来,斯威G01的性能表现完全得以充分认证。这样一算,斯威G01差不多完成了近百万公里的专业级严酷考验。

  • 春天兰花怎么养 春天兰花怎么养浇水

    白墨兰花哪个品种最好白墨兰花是墨兰的珍贵变异品种假鳞茎椭圆形,已有数百年栽培历史,流传至今,不下十数个品种,它叶色莹润、体态优雅、幽香静远、且抗病,白墨兰花比较好的品种一般分企剑和软剑两个品系。什么兰花开花最香兰花品种很多,按花香来排,在兰花界春兰居首,惠兰次之,随后便是建兰、墨兰和寒兰,春兰的花香味最正宗,持久性也极强。

  • 奔驰e300l前进挡总共有几个(你看了奔驰22款E300L升级这套原厂HUD抬头显示效果觉得怎么样)

    从行车安全的角度来考虑,加装一台HUD是非常有必要的。HUD的全称是HeadUpDisplay,中文翻译过来就是抬头显示器。今天星骏汇小陈通过以上的产品配件图了解,我们看到这台奔驰22款E300L升级HUD抬头显示所需要更换的配件有,抬显仪器,高配仪表盖板,高配仪表电脑,雨量传感器,空调管升级HUD抬头显示把仪表台上的那一块盖板换掉,换成高配的预留好显示器孔位的盖板,装上显示器,从而使仪表显示的内容投射到挡风玻璃上面。

  • 儿童葫芦丝表演(通城千人共奏葫芦丝)

    儿童葫芦丝表演香城都市报讯 10月27日,通城县隽水中学参加湖北省“黄鹤杯”美育节节目视频录制现场,七、八年级千名学生,同奏乐曲《龙的传人》。该校相关负责人介绍,本学期,每天下午预备铃响5分钟,七、八年级各班集体合奏葫芦丝。丝竹声声,已渐成校园一道靓丽的风景线。近年来,该校贯彻落实社会主义核心价值观,注重未成年人思想道德建设,坚持开设中华传统和特色民族特色教育课程,促进学生“德智体”全面发展。

  • 鸡娃时代孩子的成长之道(与其1岁就开始鸡娃)

    出生时大脑发育已经完成25%,1岁完成了50%,3岁完成了60%,6岁达到90%。现在小学虽然是零基础入学,取消了统一考试,但是它对学生的要求并没有降低。吃够了佛系养娃的亏,橙子家的老二断然不肯再佛系养了。北京卫视于2018年摄制的纪录片《起跑线》中,有一个7岁的北京女孩令人印象深刻。她的家庭,在北京三环内有一套房,一辆车。妈妈认为,孩子从小培养兴趣,靠的是父母的指引。

  • 环氧树脂的作用与用途(环氧树脂有什么作用与用途)

    环氧树脂的作用与用途具有优良的物理和电绝缘性能,强度高、收缩性低,耐腐蚀以及有高绝缘的优势,所以被称为万能胶。电器、电机绝缘封装件的浇注。从常压浇注、真空浇注已发展到自动压力凝胶成型。长时间接触胶水时,有人会有细微的皮肤过敏和细微瘙痒疼痛的情况,建议在运用时戴上防护手套,如果出现了这样的情况,需要用酒精擦洗,然后用清水冲洗干净。

  • 明月曾照江东寒剧情(明月曾照江东寒剧情介绍)

    明月曾照江东寒剧情剧情简介:美少女战清泓是武林副盟主战破敌之女,从小被父亲禁止涉及江湖事。十年一期的武林大会即将来临,战清泓瞒着家人偷跑下山,立志夺取武林盟主之位。战清泓与温宥也开始互生情愫,奈何最终被世俗礼法所阻碍。与此同时,江湖上风起云涌,战清泓发现自己自幼背诵的家训竟是人人趋之若鹜的第一神功《鹤羽剑法》。