2014-10-28 7 views
-3

Как я могу улучшить временную сложность этого кода?Как улучшить временную сложность этого кода?

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

    //some code 

    } 
+0

Это не так сложно, почему вы так думаете? – Mihai

+0

Вы понимаете, что для цикла является самым быстрым из всех повторяющихся циклов? –

+0

Извините, думал о javascript. Тем не менее, базовая для цикла все еще очень быстро. Вы выполняете микрооптимизации в этот момент –

ответ

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() представляет собой О (1) (e.g. C++), код в O (п), и вы больше не сможете его улучшить.

Я должен признать, что я не владеет C/C++, но я предполагаю, что длина простой атрибут zend_string, т.е. PHP's strlen() является O (1):

ZEND_FUNCTION(strlen) 
{ 
    zend_string *s; 
    // [..] 
    RETVAL_LONG(s->len); 
} 
+0

Вы правы в том, что strlen() - это O (1) в ядре PHP. Перемещение вызова в strlen() из цикла не изменит сложность по времени, уменьшит только накладные расходы n вызовов функций на один вызов функции - это деталь реализации –

Смежные вопросы