【问题标题】:what is the Time complexity of this function这个函数的时间复杂度是多少
【发布时间】:2020-12-03 11:01:15
【问题描述】:

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

此函数将邻接列表转换为矩阵,操作矩阵,然后将矩阵转换回列表

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;
}

【问题讨论】:

  • 你有实验结果吗?它实际上可以回答您的问题,或者至少可以用于验证分析结果
  • 结果是什么意思?以列表为例,会发生什么?
  • 您对精确时间复杂度还是渐近时间复杂度感兴趣?
  • O(N*N),其中N 是矩阵每行的条目数。需要太多的时间来解释为什么会这样 - 这是算法书籍更好地处理的一个大主题。
  • 你熟悉“大O”符号吗?

标签: c++ algorithm time-complexity


【解决方案1】:

请注意,以下都适用于大 O 时间复杂度:

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

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

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

【讨论】:

  • 所以这等于:4*N^2 ?
  • 请考虑编辑强调“big-O”细节的答案:-)
  • @adam 不,答案是N^2,因为常量被忽略了
  • @PeteBecker 你说得对,我的意思是 N^2+N^2,我已经更改了答案以反映这一点。
  • “常量被忽略”的原因是它们退出了。如果将输入数据的大小加倍,算法接触数据 N 次还是 2N 次都没有关系。无论 N 乘以多少,输入数据的大小加倍都会使算法花费的时间加倍。这就是 O(whatever) 的意义所在:它衡量的是当您增加输入的大小时所需的时间如何增加。
猜你喜欢
  • 2017-09-11
  • 2011-08-07
  • 1970-01-01
  • 2015-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多