在ruby中,什么';str.length的时间成本是多少?
我以前错误地要求str.count,而我真正的意思是str.length。感谢回复者回复我 这是恒定时间操作还是线性时间?我知道Java中的时间是常数,C中的时间是线性时间,这取决于Ruby中的情况,但不确定Ruby中的情况。统计字符串中(一组)子字符串的出现次数。为了做到这一点,它必须将每个字符与谓词集进行比较,没有其他方法 它不可能比O(n)快。琐碎的实现是O(n),因此为了使它比O(n)慢,您必须格外愚蠢并做额外的工作。因此,由于它不能比O(n)快,我们可以假设没有人会愚蠢或恶意地故意使它比O(n)慢,我们可以安全地得出结论,它是O(n) 然而,这只是一个结论。这不是保证。Ruby语言规范不提供性能保证。但是你可以非常肯定的是,如果Ruby实现不是O(n),它会被嘲笑,不会被使用,就会消亡。统计字符串中(一组)子字符串的出现次数。为了做到这一点,它必须将每个字符与谓词集进行比较,没有其他方法 它不可能比O(n)快。琐碎的实现是O(n),因此为了使它比O(n)慢,您必须格外愚蠢并做额外的工作。因此,由于它不能比O(n)快,我们可以假设没有人会愚蠢或恶意地故意使它比O(n)慢,我们可以安全地得出结论,它是O(n) 然而,这只是一个结论。这不是保证。Ruby语言规范不提供性能保证。但是你可以非常肯定的是,如果Ruby实现不是O(n)的话,它会被嘲笑,不会被使用,就会消亡。复杂性是在ruby中,什么';str.length的时间成本是多少?,ruby,string,time-complexity,Ruby,String,Time Complexity,我以前错误地要求str.count,而我真正的意思是str.length。感谢回复者回复我 这是恒定时间操作还是线性时间?我知道Java中的时间是常数,C中的时间是线性时间,这取决于Ruby中的情况,但不确定Ruby中的情况。统计字符串中(一组)子字符串的出现次数。为了做到这一点,它必须将每个字符与谓词集进行比较,没有其他方法 它不可能比O(n)快。琐碎的实现是O(n),因此为了使它比O(n)慢,您必须格外愚蠢并做额外的工作。因此,由于它不能比O(n)快,我们可以假设没有人会愚蠢或恶意地故意使它
O(n+m)
其中,n
是字符串的大小,m
是字符集参数的数量
用于从参数创建查找表/哈希O(m)
用于将输入字符串与查找表/哈希进行比较O(n)*O(1)
- 根据接收者和参数,
或n
可能是主要因素m
然而,如果你的意思是
String#length
那么它就是O(1)
复杂度是O(n+m)
其中,n
是字符串的大小,m
是字符集参数的数量
用于从参数创建查找表/哈希O(m)
用于将输入字符串与查找表/哈希进行比较O(n)*O(1)
- 根据接收者和参数,
或n
可能是主要因素m
然而,如果你的意思是
String#length
,那么它就是O(1)
为什么不检查它们的源代码呢?源代码只告诉你一个特定实现的特定版本的功能。它没有告诉您任何关于语言规范所做保证的信息。我相信目前大约有5种Ruby实现。(当然,还有很多,但有5个是工业实力、生产就绪、仍在维护和开发中以及在实际使用中)你真的是指String#count
,正如你的标题所要求的那样,还是指String#length
,正如链接的问题所暗示的那样?对于您自己的特定用例来说,对答案感到自信的一个非常好的方法是使用Ruby的基准测试工具,如下所述:为什么不检查它们的源代码?源代码只告诉您一个特定实现的特定版本的功能。它没有告诉您任何关于语言规范所做保证的信息。我相信目前大约有5种Ruby实现。(当然,还有很多,但有5个是工业实力、生产就绪、仍在维护和开发中以及在实际使用中)你真的是指String#count
,正如你的标题所要求的那样,还是指String#length
,正如链接的问题所暗示的那样?对于您自己的特定用例来说,对这个问题的答案感到自信的一个非常好的方法是使用Ruby的基准测试工具,这里概述了:不完全是这样,它不计算子字符串,而是计算所有参数交叉处出现的字符。奇怪,我知道。@akuhn这与Perl启发的符号非常相似。它实际上在内部使用tr\u find
和tr\u setup\u table
。不完全是,它不计算子字符串,而是计算所有参数交叉处出现的字符。奇怪,我知道。@akuhn这与Perl启发的符号非常相似。它实际上在内部使用tr\u find
和tr\u setup\u table
。