基转换cod的时空复杂度

2024-09-30 18:26:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我的代码是:

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]:之前一切都是不变的。在这个循环中,n是输入的位数

然后在while base10 > 0中,当base10变为0时,它运行look

最后,在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列表中

我的意见正确吗?如果没有,我还缺什么?另外,这个代码在时间和空间复杂性方面是否可以改进

谢谢


Tags: 代码inforstringifisasb2