Time complexity 如何评估以下代码';什么是渐近复杂性?

Time complexity 如何评估以下代码';什么是渐近复杂性?,time-complexity,complexity-theory,Time Complexity,Complexity Theory,我试图掌握如何评估给定代码的复杂性。我知道嵌套for循环会导致二次复杂度,线性复杂度的循环和常数复杂度的基本操作。当试图分析下面的代码时,我认为渐近复杂性是二次的,正如我们为循环嵌套的那样,我真的不知道是否也应该考虑if语句,以及复杂性是否可能比二次更糟糕。有人能帮我指导我如何分析复杂性吗 static BST<PathPair, Integer> findSimilarity(BST<Path, Ngram[]> files, BST<Ngram, ArrayLi

我试图掌握如何评估给定代码的复杂性。我知道嵌套for循环会导致二次复杂度,线性复杂度的循环和常数复杂度的基本操作。当试图分析下面的代码时,我认为渐近复杂性是二次的,正如我们为循环嵌套的那样,我真的不知道是否也应该考虑if语句,以及复杂性是否可能比二次更糟糕。有人能帮我指导我如何分析复杂性吗

static BST<PathPair, Integer> findSimilarity(BST<Path, Ngram[]> files, BST<Ngram, ArrayList<Path>> index) {
        // TODO: Use index to make this loop much more efficient.
        // N.B. Path is Java's class for representing filenames.
        // PathPair represents a pair of Paths (see PathPair.java).
        BST<PathPair, Integer> similarity = new BST<PathPair, Integer>();
        for (Path path1: files.keys()) {
            for (Path path2: files.keys()) {
                if (path1.equals(path2))
                    continue;

                Ngram[] ngrams1 = files.get(path1);
                Ngram[] ngrams2 = files.get(path2);
                for (Ngram ngram1: ngrams1) {
                    for (Ngram ngram2: ngrams2) {
                        if (ngram1.equals(ngram2)) {
                            PathPair pair = new PathPair(path1, path2);
                            if (!similarity.contains(pair))
                                similarity.put(pair, 0);
                            similarity.put(pair, similarity.get(pair)+1);
                        }
                    }
                }
            }
        }

        return similarity;
    }
静态BST查找相似性(BST文件、BST索引){
//TODO:使用索引使此循环更加高效。
//N.B.Path是Java用于表示文件名的类。
//PathPair表示一对路径(请参见PathPair.java)。
BST相似性=新BST();
对于(路径路径1:files.keys()){
对于(路径路径2:files.keys()){
如果(路径1.等于(路径2))
继续;
Ngram[]ngrams1=files.get(路径1);
Ngram[]ngrams2=files.get(路径2);
用于(Ngram ngram1:ngrams1){
用于(Ngram ngram2:ngrams2){
if(ngram1.等于(ngram2)){
路径对=新路径对(路径1,路径2);
if(!similarity.contains(pair))
相似性。put(配对,0);
相似性.put(配对,相似性.get(配对)+1);
}
}
}
}
}
返回相似性;
}
提前谢谢

/尼克