内置python函数的时间/空间复杂度

时间:2019-03-12 03:30:33

标签: python function time-complexity built-in space-complexity

split / strip / open(内置python函数)的时间/空间复杂度是多少?

有人知道我可以在哪里查询这些功能的时间/空间复杂性吗?

1 个答案:

答案 0 :(得分:0)

确切的答案将取决于将哪些属性输入到函数中。最简单的查找方法可能是检查这些功能的源代码。 The python source code can be found here.

让我们看一下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++;

在此代码中,该函数将查看字符串中的每个字符(除非达到了最大计数)。对于大小为n的字符串,最里面的循环将运行n次。时间复杂度为 O(n)

The source for 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++;
}

这使剥离的时间复杂度为 O(n)

The Source for open() shows no loops.这就是我们所期望的。没有什么可以循环的。