Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我的代码的运行时复杂性是O(a+;b)?_Python - Fatal编程技术网

Python 我的代码的运行时复杂性是O(a+;b)?

Python 我的代码的运行时复杂性是O(a+;b)?,python,Python,我刚刚在LeetCode上解决了这个问题。这很简单,但我不确定代码的运行时复杂性。谁能给我解释一下吗 def addBinary(self, a: str, b: str) -> str: carry = 0 result = '' a = list(a) b = list(b) while a or b or carry: if a: carry +

我刚刚在LeetCode上解决了这个问题。这很简单,但我不确定代码的运行时复杂性。谁能给我解释一下吗

def addBinary(self, a: str, b: str) -> str:
        carry = 0
        result = ''

        a = list(a)
        b = list(b)

        while a or b or carry:
            if a:
                carry += int(a.pop())
            if b:
                carry += int(b.pop())

            result += str(carry %2)
            carry //= 2

        return result[::-1]

循环将一直运行,直到a或b中没有任何内容,进位为0。 每次迭代时,都会将a和b中的条目数减少一个。因此,迭代的总次数是
max(len(a),len(b))+x
,其中
x
是1,如果在末尾还有进位,则为0,否则,因为x基本上由一个常数(常数1)限定,所以对于渐近部分,可以忽略它


请注意,
(len(a)+len(b))/2循环将一直运行,直到a或b中没有任何内容,进位为0。
每次迭代时,都会将a和b中的条目数减少一个。因此,迭代的总次数是
max(len(a),len(b))+x
,其中
x
是1,如果在末尾还有进位,则为0,否则,因为x基本上由一个常数(常数1)限定,所以对于渐近部分,可以忽略它

注意
(len(a)+len(b))/2No,它是
O(max(len(a),len(b))
循环的每次迭代,而
循环处理
a
b
中的一个元素。即使它已经到达较短字符串的末尾,它也必须在每次处理较长字符串的一个元素时,对该字符串执行
if
测试。循环中的最后两条语句以任意一种方式执行

为了计算复杂性,我们忽略了这样一个事实,即当它到达较短字符串的末尾时,每次迭代中执行的语句少了一个。

否,它是
O(max(len(a),len(b))
循环的每次迭代,而
循环处理
a
b
中的一个元素。即使它已经到达较短字符串的末尾,它也必须在每次处理较长字符串的一个元素时,对该字符串执行
if
测试。循环中的最后两条语句以任意一种方式执行


为了计算复杂度,我们忽略了这样一个事实,即当它到达较短字符串的末尾时,在每次迭代中执行的语句较少。

这里最糟糕的时间复杂度可能是
O(max(len(a),len(b))

说明

设a='11111'和b='11'

while循环将迭代,直到列表a和列表b都为空且进位等于0,在我们的示例中,第二次迭代后,列表b将为空,但while循环仍将继续,直到列表a变为空,进行len(max(a,b))次,即len(a)=8次迭代,即使在这之后,它将再迭代一次以添加进位(虽然可能已从循环中移出)


这个解决方案可以是即兴的。提示:将while条件更改为最小循环(len(a),len(b))。我将把它留给您进一步实现

这里最糟糕的时间复杂度可能是
O(max(len(a),len(b))

说明

设a='11111'和b='11'

while循环将迭代,直到列表a和列表b都为空且进位等于0,在我们的示例中,第二次迭代后,列表b将为空,但while循环仍将继续,直到列表a变为空,进行len(max(a,b))次,即len(a)=8次迭代,即使在这之后,它将再迭代一次以添加进位(虽然可能已从循环中移出)


这个解决方案可以是即兴的。提示:将while条件更改为最小循环(len(a),len(b))。我将留待您进一步实现

O(max(len(a),len(b))与O(len(a)+len(b))相同,我想。无论哪种方式,它都是线性的。O(max(len(a),len(b))与O(len(a)+len(b))相同我想。不管怎样,它都是线性的。我被否决了。我知道我只是想知道我的问题是不是不好?比如内容不好还是我问的方式?我不确定,但我猜它有一个“家庭作业”味道。如果你添加上下文可能会有所帮助,例如,解释你在复杂度计算中遇到的困难。哦,我刚开始使用stackoverflow,我对它不太了解。但我只想知道时间复杂度,这与家庭作业无关。就像我说的,我在leetcode上解决了它。但我不知道大OI被否决了。我知道我只是想知道我的问题是不是不好?比如内容不好还是我问的方式不好?我不确定,但我猜是有“家庭作业”味道。如果你添加上下文可能会有所帮助,例如,解释你在复杂度计算中遇到的困难。哦,我刚开始使用stackoverflow,我真的不太了解它。但我只想知道时间复杂度,它与家庭作业无关。就像我说的,我在leetcode上解决了它。但我只是不知道大的O