System.nanoTime() 被多次调用时,无法正常工作

问题描述

我有 DurationTime 来计算具有不同 numVertices 的不同图形的 DIjkstra 算法的时间。 当我第一次调用 DurationTime 时,持续时间为:1.5+ 秒,下一次调用的持续时间约为 0.1-0.3 秒。

public static double DurationTime(Graph graph){
        double start,end,duration;
        if(graph.isArray()){
            start=System.nanoTime();
            graph.DijkstraArray(0,false);
            end=System.nanoTime();
        }else {
            start=System.nanoTime();
            graph.DijkstraList(0,false);
            end=System.nanoTime();
        }
        duration=(end-start)/1000000.000;
        return duration;
    }

如果我第一次调用 DurationTime() 和 NumVertices N=10 的图形,则持续时间为 1.5+,但如果我第二次调用它,则持续时间将在 0.1-0.3 左右,例如 N=20 的图形将有 1.5+ 秒。

System.out.println("\n--------------------------------------------------------------------------------------");
System.out.println("N=10");
System.out.println("Dijkstra(adjacency list) duration: "+DurationTime(graph10));
System.out.println("Dijkstra(adjacency array) duration: "+DurationTime(graph10Arr));
System.out.println("\n--------------------------------------------------------------------------------------");
System.out.println("N=20");
System.out.println("Dijkstra(adjacency list) duration: "+DurationTime(graph20));
System.out.println("Dijkstra(adjacency array) duration: "+DurationTime(graph20Arr));
System.out.println("\n--------------------------------------------------------------------------------------");
System.out.println("N=30");
System.out.println("Dijkstra(adjacency list) duration: "+DurationTime(graph30));
System.out.println("Dijkstra(adjacency array) duration: "+DurationTime(graph30Arr));
System.out.println("\n--------------------------------------------------------------------------------------");
System.out.println("N=40");System.out.println("Dijkstra(adjacency list) duration: "+DurationTime(graph40));
System.out.println("Dijkstra(adjacency array) duration: "+DurationTime(graph40Arr));
System.out.println("\n--------------------------------------------------------------------------------------");
System.out.println("N=50");
System.out.println("Dijkstra(adjacency list) duration: "+DurationTime(graph50));
System.out.println("Dijkstra(adjacency array) duration: "+DurationTime(graph50Arr));

一些结果: 正常顺序:

N=10:Dijkstra(邻接表)持续时间:1.9511 || Dijkstra(邻接数组)持续时间:1.3817

N=20:Dijkstra(邻接表)持续时间:0.1411 || Dijkstra(邻接数组)持续时间:0.1783

N=30:Dijkstra(邻接表)持续时间:0.2351 || Dijkstra(邻接数组)持续时间:0.2029

N=40:Dijkstra(邻接表)持续时间:0.2995 || Dijkstra(邻接数组)持续时间:0.1992

N=20 先:

N=20:Dijkstra(邻接表)持续时间:1.6951 || Dijkstra(邻接数组)持续时间:1.2283

N=10:Dijkstra(邻接表)持续时间:0.0608 || Dijkstra(邻接数组)持续时间:0.0575

N=30:Dijkstra(邻接表)持续时间:0.1933 || Dijkstra(邻接数组)持续时间:0.1555

我不明白为什么会这样..

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)