4
A
回答
8
据我所知,没有一种通用的工具来计算任意代码的大O符号 - 这将是一项艰巨的任务 - 一开始并不总是清楚要测量哪个缩放问题。即使非常简单的逻辑,a = b + c
也不会像您想象的那样扩展 - 如果您需要允许任意大的数字,那么这是而不是O(1)
。
要做的最简单的事情就是基准和绘制结果。您应该意识到,对于高效的代码,可以通过例如方法调用开销“缩小”缩放比例。所以需要一点努力 - 您需要找到足够大的N值,以使其翻倍,从而产生显着的差异。
要验证你的命令是O(N)
的字符串长度,我跑以下基准:
require 'benchmark'
def times_for length
str = '012123132132121321313232132313232132' * length
Benchmark.bm do |x|
x.report(:gsub) { 1000.times { str.gsub(/1/).count } }
end
end
times_for 250
user system total real
gsub 1.510000 0.000000 1.510000 ( 1.519658)
times_for 500
user system total real
gsub 2.960000 0.000000 2.960000 ( 2.962822)
times_for 1000
user system total real
gsub 5.880000 0.010000 5.890000 ( 5.879543)
通过观察,你可以看到这是一个简单的线性关系 - 每当我双倍的字符串的长度时,所花费的时间(大致)增加一倍。
顺便说一句,s.count('1')
多,速度更快,但也O(N)
:
times_for 250
user system total real
count 0.010000 0.000000 0.010000 ( 0.008791)
times_for 500
user system total real
count 0.010000 0.000000 0.010000 ( 0.016489)
times_for 1000
user system total real
count 0.020000 0.000000 0.020000 ( 0.029052)
您可以采取从基准的返回值,并用它们来自动在大O.这是一个猜测可能是像编纂一样的服务。
+0
+1的详细答案。我也不知道如何使用count。凉! –
相关问题
- 1. 时间复杂度
- 2. 时间复杂度
- 3. 时间复杂度
- 4. 时间复杂度
- 5. 时间复杂度和空间复杂度,如何计算空间复杂度
- 6. 计算函数的空间复杂度和时间复杂度
- 7. map.find()的时间复杂度
- 8. A *的时间复杂度
- 9. Math.Sqrt()的时间复杂度?
- 10. BST的时间复杂度
- 11. 'if'in'时间复杂度
- 12. 时间复杂度(Java,Quicksort)
- 13. 降低时间复杂度
- 14. 算法复杂度时间
- 15. 时间复杂度说明
- 16. 字谜时间复杂度
- 17. JQUERY时间复杂度
- 18. 运行时间复杂度
- 19. 排序时间复杂度
- 20. 大O时间复杂度
- 21. 计算时间复杂度
- 22. 减少时间复杂度
- 23. 时间计算复杂度?
- 24. Python3 list.count()时间复杂度
- 25. 计算时间复杂度
- 26. 时间复杂度环
- 27. 时间复杂度验证
- 28. 对数时间复杂度
- 29. 了解时间复杂度
- 30. 大-θ,时间复杂度
它可能是'O(N)',其中N是字符串的长度。通过正则表达式引擎可能会因为其他原因而效率低下,但不会改变时间*复杂性*,例如,如果它比其他方法花费时间长3倍。 。 。例如s.count('1')' –