noo*_*mer 3 python function built-in time-complexity space-complexity
split/strip/open(内置python函数)的时间/空间复杂度是多少?
有谁知道我可以在哪里查看这些函数的时间/空间复杂度?
小智 5
确切的答案将取决于将哪些属性输入到函数中。找出答案的最简单方法可能是检查这些函数的源代码。可以在此处找到 python 源代码。
让我们来看看split的来源。代码根据属性运行不同的循环。这是按空格分割的循环。
while (maxcount-- > 0) {
while (i < str_len && STRINGLIB_ISSPACE(str[i]))
i++;
if (i == str_len) break;
j = i; i++;
while (i < str_len && !STRINGLIB_ISSPACE(str[i]))
i++;
Run Code Online (Sandbox Code Playgroud)
在此代码中,该函数将查看字符串中的每个字符(除非达到 maxcount)。对于大小为 n 的字符串,最内部的循环将运行 n 次。时间复杂度为O(n)
strip 的源遍历字符串中的每个字符。
i = 0;
if (striptype != RIGHTSTRIP) {
while (i < len) {
Py_UCS4 ch = PyUnicode_READ(kind, data, i);
if (!BLOOM(sepmask, ch))
break;
if (PyUnicode_FindChar(sepobj, ch, 0, seplen, 1) < 0)
break;
i++;
}
}
j = len;
if (striptype != LEFTSTRIP) {
j--;
while (j >= i) {
Py_UCS4 ch = PyUnicode_READ(kind, data, j);
if (!BLOOM(sepmask, ch))
break;
if (PyUnicode_FindChar(sepobj, ch, 0, seplen, 1) < 0)
break;
j--;
}
j++;
}
Run Code Online (Sandbox Code Playgroud)
这使 strip 的时间复杂度为O(n)。
open() 的源代码没有显示循环。这是我们所期望的。没有什么可以循环的。
| 归档时间: |
|
| 查看次数: |
6387 次 |
| 最近记录: |