簡體   English   中英

這個 function 的時間復雜度是多少

[英]what is the Time complexity of this function

如何逐步計算這個 function 的時間復雜度?

這個 function 將鄰接列表轉換為矩陣,操作矩陣,然后將矩陣轉換回列表

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 時間復雜度:

計算時間復雜度涉及查看您迭代數據的次數。 一個 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 -> 本質上,您將忽略任何乘數,並且 go 基於您觸摸 N 的次數。這意味着 2N^2 更改為N^2

重申一下,這是專門針對大 O 時間復雜度的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM