Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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
Time complexity O(n^3)带有if/elif/else语句的函数的复杂性_Time Complexity - Fatal编程技术网

Time complexity 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:

考虑以下伪代码。它有一个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:
                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
    元素,则每个