使用嵌套键建议分层数据结构?

时间:2015-05-21 05:59:39

标签: algorithm data-structures

任何人都可以建议像tree这样的分层数据结构,其中每个顶点键不是数字,而是字符串或字符串的散列。并且在每个顶点存储有关顶点子节点总数的信息。

像这样的东西

A : {
    amount : 10,
    child1 : { 
        amount : 5
    },
    child2 : {
        amount : 5,
        child3 : {
            amount : 3

        },
        child4 : {
            amount : 2
        }
    }
}

我搜索算法来计算顶点儿童数量的总和。

1 个答案:

答案 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);
  }
}