通过两个键快速访问的元素范围

时间:2012-03-09 20:46:27

标签: c# arrays performance coding-style

我有这些信息可以保存在基本神经网络模拟的变量中。

  • 节点(NodeId,State)
  • 关系(SourceNodeId,TargetNodeId,Weight,State)

状态是激活级别,它是模拟期间唯一更改的值。这是一个未签名的浮动。

我想轻松获取当前节点的所有传入和所有传出关系。很容易,我的意思是非常好的表现。 (我有大约1,000,000个节点,平均每50个关系。)

我的程序的主要部分如下所示(伪代码)。

foreach(Node in Nodes)
{
     Inputs[] = all incomeing relationships;
     Node.State = sum of all Inputs[] elements;

     Outputs[] = all outgoing relationships;
     normalize all Outputs[] elements temporarly; // so that the sum of their weights is 1

     foreach(Output in Outputs[])
     {
          Output.State = Node.State * Output.Weight;
     }
}

我希望你明白我想做什么。如果不是,我会尝试更好地解释。

哪种类型的对象最适合其SourceNodeId 通过TargetNodeId快速访问节点?

PS:使用Visual Studio在C#中编程。

1 个答案:

答案 0 :(得分:0)

我认为带有节点+两个同步词典的列表会很快。

List<Node> allNodes;
Dictionary<Node,List<Node>> sourceTarget;
Dictionary<Node,List<Node>> targetSource;

我建议你将它们封装成单个对象...... 双向词典

class TwoWayDictionary<T1,T2>
{
    private Dictionary<T1,List<T2>> sourceTarget;
    private Dictionary<T2,List<T1>> targetSource;

    // Here shold be public methods and accessors ...
}