我有一个执行基转换的算法。输入是一个字符串和两个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
列表中
我的意见正确吗?如果没有,我还缺什么?另外,这个代码在时间和空间复杂性方面是否可以改进
谢谢
目前没有回答
相关问题 更多 >
编程相关推荐