0
strlen
сложность O (1), потому что строковая структура сохраняет длину строки, но как насчет mb_strlen
? И, пожалуйста, объясните мне, почему?Какая сложность mb_strlen?
strlen
сложность O (1), потому что строковая структура сохраняет длину строки, но как насчет mb_strlen
? И, пожалуйста, объясните мне, почему?Какая сложность mb_strlen?
Глядя на 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++;
};
}
Как я узнал, скорость зависит от используемой кодировки. В общем, он работает больше, чем 'strlen'. Он должен не только подсчитывать байты, но и должен предварительно анализироваться как char. Это все, что я узнал. –
Поскольку строка должна обрабатываться последовательно, чтобы подсчитывать каждую кодовую точку, справедливо полагать, что это O (n) – Federkun
* сложность strlen - O (1) * - где вы получаете эту информацию? – apokryfos