您当前的位置:首页 > 计算机 > 编程开发 > Python

把最长非递减子序列算法速度提高几十亿倍

时间:01-07来源:作者:点击数:

问题描述:

给定包含若干整数的任意列表,查找其中的最长非递减子序列。例如,[7, 1, 2, 5, 3, 4, 0, 6, 2]的最长非递减子序列为[1, 2, 3, 4, 6]。

参考代码:

图片

运行结果如下,从长度35的列表中查找长度为10的最长非递减子序列时,最笨的暴力穷举算法用时18751秒,后面几个算法从不同的角度进行改进和优化,最后一种算法瞬间解决问题,算法至少有千万倍的速度提升。

图片

为了进一步测试改进算法的效率,把原始数据改为长度1350的随机列表,专门测试func6(),把测试代码修改为

图片

运行结果如下,这样的问题规模前面几个函数尤其是前两个函数的运行时间之长恐怕是超出想象的,但func6()仍能在0.3秒钟给出结果。

图片

继续修改测试代码,把测试数据改为长度3000的随机列表,重新运行程序,

图片

运行结果:

图片
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门