如何改善此代码的时间复杂度?
$s = "Name";
for($i=0; $i<strlen($s); $i++) {
//some code
}
答案 0 :(得分:0)
这取决于PHP的字符串和strlen()
的实现。如果它是O(n)(它在GNU的C strlen()
中),则OP代码的复杂度将为O(n²)。在这种情况下,将strlen()
移出循环会改善为O(n):
$length = strlen($s);
for($i=0; $i<$length; $i++) {
//some code
}
但是,如果strlen()
的复杂度为O(1)(e.g. C++),则代码位于O(n)中,您无法再对其进行改进。
我必须承认,我不熟悉C / C ++,但我想长度是zend_string
的简单属性,即PHP's strlen()
是O(1):
ZEND_FUNCTION(strlen)
{
zend_string *s;
// [..]
RETVAL_LONG(s->len);
}