C#多对多关系
作者:互联网
所以,我需要一些方法来实现C#中的无向网络(我认为这是正确的术语)
假设我有以下数据:
Foo1 <-> Bar1
Foo2 <-> Bar1
Foo2 <-> Bar2
Foo2 <-> Bar3
Foo3 <-> Bar2
Foo3 <-> Bar3
我如何实现可以支持这一点的东西?
一种方法是创建一个包含Foo和Bar的类,对于我的例子,我有6个这样的,每个可能的组合,但是这会使数据翻倍.
有了这些数据,我需要能够根据它指向的Bar的数量来执行Foo1的计算,以及有多少Foo的Bar的点等等.
我不是在寻找答案,我宁愿在如何实现这个方面做一些指导,甚至可能是一些链接.
解决方法:
你基本上概述了一个图形模型,传统上被认为是“节点”和“边缘”.但证券/贷款有效.
这类事情有两个经典的答案.
这取决于您希望能够询问数据的问题,您希望存储数据的效率以及数据的密集程度.
例如,如果证券和贷款之间可能存在30%的关系,那么密集的数据结构肯定会得到回报.只需保留一个大矩阵:X上的证券.Y(X,Y)上的贷款意味着贷款存在.
如果集合不是很密集,那么您就开始使用“稀疏边缘数据结构”.根据您的应用程序,您可能:
>任何S对象都有一个Ls的列表.
{S-> L,L,L; S-→1; S-> L,L,L}.很容易找到S的邻居,但很难找到L’s
> S对象具有Ls的列表,Ls具有S的列表:(S-> L,L,L和L-> S,S,S).使用更多空间,但为您提供双向查询.
>存储一组刚刚(S,L)对.非常糟糕,除非你最需要问的是“这是否与L相关?”
>存储S,L和L,S的列表并以某种方式对其进行索引.这就是我们所说的“让您的数据库完成工作”.
另见Data structure for relationships
标签:c,algorithm,bipartite 来源: https://codeday.me/bug/20190701/1344397.html