理解是否具有与显式循环相同的渐近复杂性?
Do comprehensions have the same asymptotic complexity as explicit for cycles?
在大多数情况下,使用 list/dict 推导式可以在对代码计时时显着提高性能,但这会影响算法的渐近复杂度吗?
据我所知,差异是由于与显式循环相比,理解的评估方式不同,但这种差异应该是一个常数因素,在这种情况下,渐近复杂性不会改变,然后随着大小的增加问题的根源,最终应该是两个版本应该以相同的速度执行。我的想法对吗?
与此同时,当我尝试对其进行测试时,理解一直优于显式循环,直到我达到 运行 内存不足的大小。
问得好,但这不是渐近复杂性的工作原理。并不是说它们会收敛到相同的时间,而是它们会以相同的方式增长。例如,采用 2*n 和 n 的算法具有相同的渐近复杂度,但前者总是需要两倍的时间。我看不出任何理解为什么不具有相同复杂性的原因,但您可以通过计时测试凭经验对此进行测试。
在大多数情况下,使用 list/dict 推导式可以在对代码计时时显着提高性能,但这会影响算法的渐近复杂度吗?
据我所知,差异是由于与显式循环相比,理解的评估方式不同,但这种差异应该是一个常数因素,在这种情况下,渐近复杂性不会改变,然后随着大小的增加问题的根源,最终应该是两个版本应该以相同的速度执行。我的想法对吗?
与此同时,当我尝试对其进行测试时,理解一直优于显式循环,直到我达到 运行 内存不足的大小。
问得好,但这不是渐近复杂性的工作原理。并不是说它们会收敛到相同的时间,而是它们会以相同的方式增长。例如,采用 2*n 和 n 的算法具有相同的渐近复杂度,但前者总是需要两倍的时间。我看不出任何理解为什么不具有相同复杂性的原因,但您可以通过计时测试凭经验对此进行测试。