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

本文关键字:访问 范围 元素 两个 | 更新日期: 2023-09-27 18:27:21

我有这些信息要保存在一个变量中,用于我的基本神经网络模拟

  • 节点(NodeId,State)
  • 关系(SourceNodeId、TargetNodeId、权重、状态)

状态是激活级别,它是模拟过程中唯一变化的值。它是一个无符号浮点。

我想轻松获取当前节点的所有传入和传出关系。我所说的轻松是指非常出色的表现。(我有大约1000000个节点,平均每个节点有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;
     }
}

我希望你能理解我想做什么。如果不能,我会尽力解释得更好。

哪种类型的Object最好通过其SourceNodeId和通过其TargetNodeId快速访问节点

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

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

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

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 ...
}