学习笔录【算法效率分析】

本文探讨了算法效率分析的两种方法:事后统计和事前分析估计。主要聚焦于事前分析中的渐进复杂度估算,讨论了算法时间复杂度的定义和大O记号的使用。算法时间复杂度是衡量算法优劣的重要标准,常见的复杂度阶有O(log2n), O(n), O(nlog2n), O(n2), O(n3)等。此外,还介绍了算法的空间复杂度,关注于算法执行过程中的辅助空间需求。" 54383152,5739129,Python NLTK库获取与分析文本语料库,"['Python', '自然语言处理', 'nlp', '文本语料']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:本文摘自《数据结构——从概念到C实现》【王红梅 皮德常 编著】

目录



算法效率分析

度量算法的效率有两种方法

一,事后统计,先实现算法,再输入数据来测量其时间,空间开销。此种方法的缺点至少有

  1. 编写程序实现算法很耗费时间精力
  2. 实验结果依赖于计算机的软硬件等环境因素,有时很容易掩盖算法本身的优劣。

二,事前分析估计,渐进复杂度估算,这是对算法所消耗资源的一种估算方法。



算法的时间复杂度

    同一个算法用不同的程序设计语言实现,或者用不同的编译程序进行编译,或者在不同的计算机上运行,效率均不相同。撇开与计算机软硬件有关的因素,影响算法时间代价的最主要因素是问题规模。问题规模是指输入量的多少,一般来说,它可以从问题的描述中得到。例如,找出100以内的所有素数,问题规模是100;对一个具有n个整数的数组进行排序,问题规模是n。一个显而易见的事实是:几乎任何算法对于规模更大的输入需要运行更长的时间。例如,找出1000内所有的素数比找出100内所有的素数需要更多的时间。所以,运行算法所需要的时间T是问题规模n的函数,记作T(n)。

​    要精确地表示算法的运行时间函数常常是很困难的,即使能够给出,也可能是个相当复杂的函数。为了客观地反映一个算法的执行时间,可以用算法中基本语句的执行次数来度量算法的工作量。基本语句是执行次数与整个算法的执行次数成正比的语句,基本语句对算法运行时间的贡献最大,是算法中最重要的操作。这种衡量效率的方法得出的不是时间量,而是一种增长趋势的度量。换而言之,只考察问题规模充分大时,算法中基本语句的执行次数在渐近意义下的阶,称作算法的渐近时间复杂度,通常使用大O记号表示。

【定义1-1】若存在两个正的常数c和n0,对于任意的n>=n0,都有T(n)<=c * f(n),则称T(n) = O(f(n))(读作“T(n)是Ofn的”,f(n)即与算法的运行时间函数同一数量级的估算函数)

​    此定义表明了函数T(n)与f(n)具有相同的增长趋势,并且T(n)的增长至多趋同于函数f(n)的增长。大O记号用来描述增长率的上限,也就是说,当输入规模为n时,算法耗费的时间的最大值。

​    算法的时间复杂度实际上是一种估算技术,若两个算法中的一个比另一个“稍微快一点”时,并不能基于时间复杂度来判断哪个算法更为优越。但在实际应用中,基于时间复杂度来判断算法的效率被证明是很有效的,尤其在确定算法是否值得实现的时候。常见的时间复杂度如下:
O ( log ⁡ 2 n ) &lt; O ( n ) &lt; O ( n l o g 2 n ) &lt; O ( n 2 ) &lt; O ( n 3 ) &lt; . . . &lt; O ( 2 n ) &lt; O ( n ! ) O(\log_2n)&lt;O(n)&lt;O(nlog_2n)&lt;O(n^2)&lt;O(n^3)&lt;...&lt;O(2^n)&lt;O(n!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值