任何人都可以建议像tree
这样的分层数据结构,其中每个顶点键不是数字,而是字符串或字符串的散列。并且在每个顶点存储有关顶点子节点总数的信息。
像这样的东西
A : {
amount : 10,
child1 : {
amount : 5
},
child2 : {
amount : 5,
child3 : {
amount : 3
},
child4 : {
amount : 2
}
}
}
我搜索算法来计算顶点儿童数量的总和。
答案 0 :(得分:0)
有两种方法可以做到这一点:一种方法是推迟计算amount
的费用,以便阅读amount
代价高昂,另一种方法让所有amounts
保持最新状态更新amount
是昂贵的
第一个解决方案:
abstract class Node {
protected List<Node> children;
public string getKey();
public int getAmount();
}
class ParentNode {
// recursively sum the childrens' amounts
public int getAmount() {
return children.sum(x => x.getAmount());
}
}
class LeafNode {
private int amount;
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
}
第二种解决方案:
class Node {
protected int amount;
protected Node parent;
public int getAmount() {
return amount;
}
// increment the amount, then increment the parent's amount
public void incAmount(int inc) {
amount += inc;
if(parent != null)
parent.incAmount(inc);
}
public string getKey();
}
class LeafNode extends Node {
// eagerly update the parents' amounts
public void setAmount(int amount) {
int inc = amount - this.amount;
this.amount = amount;
if(parent != null) parent.incAmount(inc);
}
}