2016-11-14 17 views
0

strlen сложность O (1), потому что строковая структура сохраняет длину строки, но как насчет mb_strlen? И, пожалуйста, объясните мне, почему?Какая сложность mb_strlen?

+1

Как я узнал, скорость зависит от используемой кодировки. В общем, он работает больше, чем 'strlen'. Он должен не только подсчитывать байты, но и должен предварительно анализироваться как char. Это все, что я узнал. –

+1

Поскольку строка должна обрабатываться последовательно, чтобы подсчитывать каждую кодовую точку, справедливо полагать, что это O (n) – Federkun

+0

* сложность strlen - O (1) * - где вы получаете эту информацию? – apokryfos

ответ

1

Глядя на source code в худшем случае, это O (N).

mbtab = encoding->mblen_table; 
n = 0; 
p = string->val; 
k = string->len; 
/* count */ 
if (p != NULL) { 
    while (n < k) { 
     m = mbtab[*p]; 
     n += m; 
     p += m; 
     len++; 
    }; 
}