我有一个
我还有一个简单的顺序算法,用于删除所有传递性边缘(例如,我有关系 1->2、2->3 和 1->3。我可以删除边缘 1->3,因为我通过 2 有一条从 1 到 3 的路径)。
Dictionary<int, List<int>>
,其中 Key 表示集合中的一个元素(或有向图中的顶点),而 List 是与 Key 有关系的其他元素的集合(因此从 Key 到 Values 是有向边)。该字典被优化用于创建 Hasse 图,所以 Values 总是小于 Key。我还有一个简单的顺序算法,用于删除所有传递性边缘(例如,我有关系 1->2、2->3 和 1->3。我可以删除边缘 1->3,因为我通过 2 有一条从 1 到 3 的路径)。
for(int i = 1; i < dictionary.Count; i++)
{
for(int j = 0; j < i; j++)
{
if(dictionary[i].Contains(j))
dictionary[i].RemoveAll(r => dictionary[j].Contains(r));
}
}
这个算法能否并行化?我可以在内部循环中使用Parallel.For,但是这不被推荐(https://msdn.microsoft.com/zh-cn/library/dd997392(v=vs.110).aspx#Anchor_2),而且速度提升也不会很明显(加上可能存在锁定问题)。我能并行化外部循环吗?