java - 这个简单算法的复杂性

标签 java algorithm code-analysis code-complexity

我做了一个算法来解决一个问题,但我不知道它的复杂性。 该算法验证图形的所有顶点是否“好”。 “好”顶点是指可以按照自己开始的路径访问图中所有其他顶点的顶点。

public static boolean verify(Graph graph)
{
    for(int i=0; i < graph.getVertex().size(); i++)
    {
        // List of vertexes visited 
        ArrayList<Character> accessibleVertex = new ArrayList<Character>();
        getChildren(graph.getVertex().get(i), graph.getVertex().get(i).getName(), accessibleVertex);    

        // If the count of vertex without father equals a count of the list of vertexes visited, his is a "good" vertex
        if((graph.getVertex().size()-1) == accessibleVertex.size())
            return true;
    }

    return false;
}

private static void getChildren(Vertex vertex, char fatherName, ArrayList<Character> accessibleVertex)
{
    // Ignore the 'father'
    if(vertex.getName() != fatherName)
        addIfUnique(vertex.getName(), accessibleVertex);

    for(int i=0; i < vertex.getEdges().size(); i++)
    {
        getChildren(vertex.getEdges().get(i).otherVertex(), fatherName, accessibleVertex);
    }
}

private static void addIfUnique(char name, ArrayList<Character> accessibleVertex)
{
    boolean uniqueVertex = true;

    for(int i=0; i < accessibleVertex.size(); i++)
    {
        if(accessibleVertex.get(i).equals(name))
            uniqueVertex = false;
    }

    if(uniqueVertex)
        accessibleVertex.add(name);
}

Graph tested

谢谢,对不起我的英语。

最佳答案

我认为复杂度为 O(n^2),因为您通过调用使用嵌套循环:

getChildren(graph.getVertex().get(i), graph.getVertex().get(i).getName(), accessibleVertex);

关于java - 这个简单算法的复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37647045/

相关文章:

algorithm - 一个有趣的迷宫

python - 套路问题 : square-into-squares-protect-trees

java - 无法找到Sonarqube各个版本之间的差异

java - 在liferay中以编程方式创建站点(组)

algorithm - 将一组点分组到最近的对

c - 在 C 中生成跨多个文件的现有函数列表

unit-testing - 为什么代码质量讨论会引起强烈反响?

java - Service s = new ServiceImpl() - 为什么要这样做?

java - 无法删除 InvocableTargetException

java - Spring Boot上传表单数据和文件