Time complexity O(n^3)带有if/elif/else语句的函数的复杂性
考虑以下伪代码。它有一个if/else/if语句。在每个条件分支中,都有一个嵌套的三重for循环。该语句的复杂性是O(n^3),因为函数只能采用一条路径(即if、elif或else),还是比这更复杂Time complexity O(n^3)带有if/elif/else语句的函数的复杂性,time-complexity,Time Complexity,考虑以下伪代码。它有一个if/else/if语句。在每个条件分支中,都有一个嵌套的三重for循环。该语句的复杂性是O(n^3),因为函数只能采用一条路径(即if、elif或else),还是比这更复杂 def myFunction(myVariable, myList): if myList == conditionOne: for sublist in myList: for element in sublist:
def myFunction(myVariable, myList):
if myList == conditionOne:
for sublist in myList:
for element in sublist:
for char in element:
print(char)
elif myList == conditionTwo:
for sublist in myList:
for element in sublist:
for char in element:
print(char)
else:
for sublist in myList:
for element in sublist:
for char in element:
print(char)
我假设
n
是列表myList
的长度(子列表的数量),那么函数的时间复杂度不仅取决于列表myList
的长度,还取决于:
- 每个子列表的最大长度(每个子列表中的最大元素数-每个分支条件的循环的第二个
)
- 每个元素的最大长度(每个元素中的字符数-循环的第三个
)
确切地说,如果
n
、m
、p
分别是列表的长度、每个子列表的最大长度和每个元素的最大长度,那么在最坏的情况下,算法的时间复杂度是O(n*m*p)。我假设n
是列表的长度myList
(子列表的数量),那么函数的时间复杂度不仅取决于列表的长度myList
,还取决于:
- 每个子列表的最大长度(每个子列表中的最大元素数-每个分支条件的循环的第二个
)
- 每个元素的最大长度(每个元素中的字符数-循环的第三个
)
准确地说,如果
n
、m
、p
分别是列表的长度、每个子列表的最大长度和每个元素的最大长度,则算法的时间复杂度为O(n*m*p)在最坏的情况下。它比这更复杂,但不一定是因为条件。您当前的代码在每个分支中都是相同的,虽然您的真实代码可能与此不完全相同,但它可能是一个很好的近似值。在这种情况下,困难完全来自其他地方
当前代码的复杂度是所有子列表中所有元素的长度之和。如果n
是myList
长度的上限,则每个子列表和每个元素的复杂度为O(n³),否则可能会变得复杂
另一个简单的特殊情况是:
myList
具有长度n
- 每个
子列表
的长度最多为m
- 每个
元素
的长度最多为k
那么您的复杂性将是O(nmk),假设n
,m
和k
为正。比这更复杂,但不一定是因为条件。当前代码在每个分支中都是相同的,虽然真实代码可能看起来不完全一样,但可能是一个很好的近似值。在这种情况下,困难在于我是从别处来的
当前代码的复杂度是所有子列表中所有元素的长度之和。如果n
是myList
长度的上限,则每个子列表和每个元素的复杂度为O(n³),否则可能会变得复杂
另一个简单的特殊情况是:
myList
具有长度n
- 每个
子列表
的长度最多为m
- 每个
元素
的长度最多为k
然后您的复杂度将是O(nmk),假设n
,m
和k
为正。此代码的复杂度实际上是O(1)
。关于哪个条件是真的,以及列表、子列表和元素的长度是多少,您在读取第一个字符后立即返回
如果这是一个错误,并且您实际上正在迭代所有字符,这将取决于什么是n
,有两种常见的方法来定义它:
通常在讨论时间复杂度时,我们根据输入定义它。在这里,您的算法(假设迭代所有元素)在输入大小上是线性的,因此复杂度实际上是O(n)
.From:运行时分析是一种理论分类,它估计并预测随着**输入大小(通常表示为n)的增加**算法的运行时(或运行时)的增加……
如果您将n
称为mylist
中的子列表数,而不是输入的大小,并且每个子列表都有m
元素,每个元素的长度k
(均为平均值)。那么,复杂性为O(n*m*k)
这段代码的复杂性实际上是O(1)
。关于哪一个条件为真,以及列表、子列表和元素的长度-您在读取第一个字符后立即返回
如果这是一个错误,并且您实际上正在迭代所有字符,这将取决于什么是n
,有两种常见的方法来定义它:
通常在讨论时间复杂度时,我们根据输入定义它。在这里,您的算法(假设迭代所有元素)在输入大小上是线性的,因此复杂度实际上是O(n)
.From:运行时分析是一种理论分类,它估计并预测随着**输入大小(通常表示为n)的增加**算法的运行时(或运行时)的增加……
如果将n
称为mylist
中的子列表数,而不是输入的大小,并且每个子列表都有m
元素,则每个