在ruby中,str.length的时间成本是多少?

时间:2017-01-04 00:48:48

标签: ruby string time-complexity

我之前错误地要求str.count,当我真正的意思是str.length。感谢回复者回复我

这是恒定时间操作还是线性时间?根据{{​​3}},我知道在Java中它是常数时间而C是线性时间但不确定Ruby的情况是什么。

2 个答案:

答案 0 :(得分:2)

String#count计算字符串中(一组)子串的出现次数。为了做到这一点,必须将每个字符与谓词集进行比较,没有别的办法。

它不可能比O(n)快。平凡的实现是O(n),所以为了使它慢于而不是O(n),你必须是额外的愚蠢并做额外的工作。因此,因为它不能比O(n)快,并且我们可以假设没有人会愚蠢或恶意到故意让它比O(n)慢,我们可以安全地得出结论它是O(n)。

然而,这只是一个结论。这不是保证。 Ruby语言规范不提供性能保证。但你可以非常肯定,一个不是O(n)的Ruby实现会受到嘲笑,而且根本不会被使用而且会死掉。

答案 1 :(得分:1)

复杂性为O(n + m)

其中n是字符串的大小,m是字符集参数的数量。

  • O(m)用于从参数
  • 创建查找表/哈希
  • O(n) * O(1)用于比较输入字符串和查找表/ hash
  • 根据接收者和参数,nm可能是主导因素。

如果您的意思是String#length,那么它是O(1)