基本转换代码的时空复杂度

时间:2019-08-26 06:59:25

标签: python time-complexity space-complexity

我有一个执行基本转换的算法。输入是一个字符串以及两个整数b1和b2。该字符串在b1中表示一个整数,并在b2中将其转换为base。

我的代码是:

def convert_base(num_as_string, b1, b2):
    if num_as_string == '0' or num_as_string == '-0':
        return num_as_string
    base10, degree = 0, 0
    is_neg = False
    if num_as_string[0] == '-':
        is_neg, num_as_string = True, num_as_string[1:]
    if b1 == 10:
        base10 = int(num_as_string)
    else:
        for digit in num_as_string[::-1]:
            base10 += string.hexdigits.index(digit.lower()) * (b1 ** degree)
            degree += 1
    if b2 == 10:
        return '-' + str(base10) if is_neg else str(base10)
    converted = []
    while base10 > 0:
        digit = base10 % b2
        converted.append(digit)
        base10 //= b2
    res = ''
    for i in converted[::-1]:
        res += string.hexdigits[i].upper()
    return '-' + res if is_neg else res

现在,我正在尝试查看是否可以在时间和空间复杂度方面改善这一点。但是我不确定如何分析这段代码的复杂性。

我知道在for digit in num_as_string[::-1]:之前一切都是不变的。在此循环中,它只是`O(n),其中n是输入的位数。

然后在while base10 > 0中,它在base10变为0时运行外观。因此,这类似于O(number of digits in base10)

最后,在for i in converted[::-1]上,该名称也将是O(number of digits in base10)

因此,我假设这段代码的时间复杂度类似于O(n) + 2 * O(number of digits in base10),它是线性的。

对于空间,我假设它是O(number of digits in base10),因为我将其存储在converted列表中。

我的观察正确吗?如果没有,我想念什么?而且,可以在时间和空间复杂度方面改进此代码吗?

谢谢

0 个答案:

没有答案