快速更改(相同)多个对象的变量

时间:2016-01-11 14:22:54

标签: java performance graph nodes

我实现了深度优先搜索具有相同大小边缘的有向图。此搜索会更改图表中节点的状态。因此,如果我想进行新搜索,则所有节点都必须重置为默认值

我的实施:

public void resetGraph() {      
    ListItem temp = nodes.getHead();
    while(temp != null){
        DiGraphNode node = temp.key;
        node.visitorState = VISITORS.NONE;      //Set all nodes their initial state 
        node.sumOfDistances = 0;
        temp = temp.next;
    }
}

=>这需要一些时间来处理大图

有没有办法更有效地提高时间? 也许有点像:

DiGraphNode.someStaticMethod(0);

1 个答案:

答案 0 :(得分:0)

由于您的结构目前只有几乎无法做到 - 您必须访问每个节点才能重置它,以便您坚持使用O(n)算法。

可能会提高性能的一种可能解决方案是跟踪数组中的所有visitorStatesumOfDistances字段。然后,您可以使用int nodeID(可能在节点构造时生成)来访问状态和总和。此调整的好处是允许您使用Arrays.fill 可能使用特定于cpu的块集指令。

您将无法更改算法的顺序,但您可能会以这种方式加快速度。