【发布时间】: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