挑战程序设计竞赛学习笔记2

CSDN不支持上下标

收获:

书中只给出算法函数,程序所用数据默认已读入程序并保存在全局变量中。

以高效算法为目标,需要正确估算各种算法的复杂度。

缩短运行时间,主要应该从复杂度入手。

 

1.3.4程序结构

程序都从标准输入按指定格式读入数据

输入数据已经由main函数读入并保存在全局变量中

通过调用solve函数来求解

1.5以高效算法为目标

1.5.1什么是复杂度

在设计满足问题要求的算法时,我们不可能挨个去试,应当通过估算算法复杂度来判断

在分析复杂度时,我们通常考虑它与什么成正比,并称之为算法的阶。

例如

1.1 四重循环,每重n次,运行的时间与n⁴成正比。

我们将与n⁴成正比写作 O(n⁴),将对应的时间写作 O(n⁴) 时间

1.5.2关于运行时间

程序的运行时间不光取决于复杂度,也会受到诸如循环体的复杂性等因素的影响。

但是,因此造成的差距多数情况下最多也就几十倍。

另一方面,忽略其余因素,n=1000时,O(n³)时间的算法和O(n²)时间的算法差距就是1000倍。

因此要缩短运行时间主要应该从复杂度入手

估算出算法的复杂度后,只要将数值可能的最大值带入带入复杂的渐进式中,就能简单的判断算法是否能满足运行时间限制的要求。

例如

考虑 O(n²) 时间的算法,限制条件是n<=1000,将n=1000代入 n的平方 就得到了1000000。

在这个数值的基础上,我们就可以结合下表进行判断。

假设时间限制为1秒
1e6                       完全没问题
1e7                       勉强能满足
1e8                       算法循环体稍微复杂一点就很可能超时

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值