我实现了深度优先搜索具有相同大小边缘的有向图。此搜索会更改图表中节点的状态。因此,如果我想进行新搜索,则所有节点都必须重置为默认值。
我的实施:
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);
答案 0 :(得分:0)
由于您的结构目前只有几乎无法做到 - 您必须访问每个节点才能重置它,以便您坚持使用O(n)
算法。
可能会提高性能的一种可能解决方案是跟踪数组中的所有visitorState
和sumOfDistances
字段。然后,您可以使用int nodeID
(可能在节点构造时生成)来访问状态和总和。此调整的好处是允许您使用Arrays.fill 可能使用特定于cpu的块集指令。
您将无法更改算法的顺序,但您可能会以这种方式加快速度。