Какова временная сложность среза строки? O (k) или O (n) - PullRequest
3 голосов
/ 03 апреля 2020

Является ли временная сложность python str срезом O (k) или O (n)?

Ответы, которые я читаю, предполагают его O (k), но я не понимаю, как.

Например,

my_str = "thisismystringfortesting"

sub_str = my_str[3:10]

Я понимаю, что он извлекает только (k) символов, , но разве операция не должна преобразовывать всю строку в список перед секцией? Мой мыслительный процесс заключается в том, что преобразование всей строки в один только список будет стоить O (n). Если только часть строки не преобразуется в список?

Так может кто-нибудь объяснить, является ли разделение строк на Python O (k) или O (n)?

Большое спасибо!

1 Ответ

4 голосов
/ 03 апреля 2020

Соответствующий код здесь и это O (k), как видно строка 1628

result_buf = PyBytes_AS_STRING(result);
for (cur = start, i = 0; i < slicelength;cur += step, i++) {
        result_buf[i] = source_buf[cur];
}
return result;
...