-3
A
回答
0
这取决于PHP的Strings和strlen()
的实现。如果它是O(n)(它在GNU的C strlen()
中),OP代码的复杂度将是O(n 2)。移动strlen()
跳出循环会在这种情况下提高至O(N):
$length = strlen($s);
for($i=0; $i<$length; $i++) {
//some code
}
然而,如果的strlen()
复杂度为O(1)(e.g. C++),该代码是在为O(n ),你无法再改进它。
我不得不承认,我是不流利的C/C++,但我想长度为a zend_string
的简单属性,即PHP's strlen()
是O(1):
ZEND_FUNCTION(strlen)
{
zend_string *s;
// [..]
RETVAL_LONG(s->len);
}
+0
你是对的,strlen()在核心PHP中是O(1)。将调用strlen()移出循环不会改变时间复杂度,只会减少n个函数调用到单个函数调用的开销,这是一个实现细节 – 2014-10-28 20:47:28
相关问题
- 1. 此代码的时间复杂度
- 2. 如何提高此算法的时间复杂度?
- 3. 如何确定此代码的时间复杂度?
- 4. 如何减少此代码的时间复杂度
- 5. 如何提高此代码的速度?
- 6. 给定代码的时间复杂度
- 7. 下面代码的时间复杂度?
- 8. 给定代码的时间复杂度。
- 9. 给定代码的时间复杂度?
- 10. 此代码的时间复杂度列出所有排列?
- 11. 此代码示例的时间复杂度
- 12. 时间复杂度练习(伪代码)
- 13. 时间复杂度伪代码
- 14. 时间复杂度和空间复杂度,如何计算空间复杂度
- 15. 提高RNNs的复杂度
- 16. 如何找到下面代码的时间复杂度?
- 17. 以下代码的时间复杂度如何为O(n)?
- 18. 代码Θ(nLogn)的时间复杂度如何?
- 19. 提高此代码的速度? Foreach
- 20. 时间复杂度和幅度提高订单
- 21. 如何提高HashMap迭代的复杂度?
- 22. 如何提高此代码的性能?
- 23. 如何提高此代码的性能?
- 24. 如何提高此代码的性能?
- 25. 如何计算此功能的时间复杂度?
- 26. 如何确定此算法的时间复杂度?
- 27. 如何计算此实现的时间复杂度
- 28. 如何计算此递归算法的时间复杂度
- 29. 基于伪代码的复现关系(时间复杂度)
- 30. 查找给定java代码的时间和空间复杂度
这是不如此复杂,你为什么这么想? – Mihai 2014-10-28 18:46:37
你知道这个for循环是所有迭代循环中最快的吗? – 2014-10-28 18:47:46
对不起,在想JavaScript。尽管如此,基本的循环仍然非常快。您在此时正在执行微优化 – 2014-10-28 18:49:09