2014-10-28 37 views
-3

如何提高此代码的时间复杂度?如何提高此代码的时间复杂度?

$s = "Name"; 
    for($i=0; $i<strlen($s); $i++) { 

    //some code 

    } 
+0

这是不如此复杂,你为什么这么想? – Mihai 2014-10-28 18:46:37

+0

你知道这个for循环是所有迭代循环中最快的吗? – 2014-10-28 18:47:46

+0

对不起,在想JavaScript。尽管如此,基本的循环仍然非常快。您在此时正在执行微优化 – 2014-10-28 18:49:09

回答

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