这个函数的时间复杂度是多少

时间:2020-08-13 14:57:48

标签: c++ algorithm time-complexity

如何逐步计算此函数的时间复杂度?

此功能将邻接列表转换为矩阵,处理矩阵,然后将矩阵转换回列表

Graphe *Graphe::grapheInverse( void ){
    
    Graphe *r = new Graphe (_adjacences.size() );
    
    std::vector<vector<int> > matrix(_adjacences.size(), vector<int>( _adjacences.size() ) );
    
    std::vector<vector<int> > liste(matrix.size());

    for (unsigned i = 0; i < _adjacences.size(); i++)
        for (auto j : *_adjacences[i])
            matrix[i][j] = 1;


    for (int i = 0; i < matrix.size(); i++) { 
        for (int j = 0; j < matrix[i].size(); j++) {
            if (matrix[i][j] == 1)
                matrix[i][j] = 0;
            else 
                matrix[i][j] = 1;
            if (i == j)
                matrix[i][j] = 0;
        }
    }


    for (int i = 0; i < matrix.size(); i++){
        for (int j = 0; j < matrix[i].size(); j++){
            if (matrix[i][j] == 1){
                liste[i].push_back(j);
            }
        }
    }


    for (int i = 0; i < liste.size(); i++) { 
        for (int j = 0; j < liste[i].size(); j++) {
            r->ajouterArcs( i, liste[i][j] );        
        }
    }

    return r;
}

1 个答案:

答案 0 :(得分:3)

请注意,以下所有内容均适用于big-O时间复杂度:

计算时间复杂度涉及查看对数据进行迭代的次数。一个for循环是N,因为您触摸每个点一次。嵌套的for循环(对于i表示数据,对于j表示数据)是N ^ 2,因为您为每个点触摸了一次。

一个for循环紧挨一个for循环(对于i在数据中执行X,对于i在数据中执行Y)触摸数据N + N次。这仍然被认为是N的时间复杂度,因为当N接近一个非常大的数字时,2N并没有太大的区别。嵌套循环也是如此,N ^ 2 + N ^ 2 = 2N ^ 2->本质上,您将忽略任何乘数,并根据触摸N的时间进行运算。这意味着2N ^ 2变为 N ^ 2

重申一下,这是专门针对大O时间复杂性