问题描述
下图中是我显示的整个图形的子图。我有三种不同类型的节点,绿色、蓝色和紫色。
绿色和紫色通过蓝色节点间接连接。
蓝色节点通过加权的有向边相互连接。蓝色边缘被加权,但绿色或紫色边缘没有加权。
我要解决的问题如下:我想找到最适合绿色节点的紫色节点。,例如我想说对于绿色节点GA来说,三个最合适的紫色节点是V1、V4、V42.
什么使节点适合?
完美匹配是当绿色节点连接到紫色节点连接的所有蓝色节点时。但是,绿色节点可以连接到更多蓝色节点。这仍然是紫色节点的最佳分数。
如果绿色和紫色不连接到同一个蓝色节点,而是连接到相互连接的蓝色节点,则算法需要考虑蓝色节点之间边的权重。这不能导致完美匹配,但仍然是一个很好的匹配。
是什么让它更适合或更不适合?
连接蓝色节点所需的蓝色节点之间的跳数越多,连接绿色和紫色节点的紫色节点的分数越小。另外如果蓝色节点之间的权重越小,紫色节点的得分越小,这里考虑的是从绿色到紫色的方向。
如果绿色没有连接到一些蓝色节点,那将是一个惩罚,紫色节点的分数会更小。
你能想到哪些图算法来解决这个问题?
我打算使用 neo4j 数据库。
解决方法
完美匹配是当绿色节点连接到所有蓝色节点时 紫色节点连接到的节点。
我认为这意味着有一条从绿色节点到紫色节点的路径,只通过一个蓝色节点。如果有多个紫色节点且距离绿色节点仅一个蓝色节点,那么您需要所有此类紫色节点。请确认这一点。
如果我对您的要求的猜测是正确的,那么 Dijsktra 算法会给您答案。该算法会告诉您每个紫色节点与每个绿色节点的距离 - 因此您可以过滤掉恰好相距两跳的那些。
你有样本数据集吗?