查找链接元素
再会!
我有一个字典 Dictionary
其中 List 的值可以是字典的键。
我想要做的是分离这个字典的键和值来设置表示链接元素。因此,如果我有,
dict[1] = new List<long>() { 12, 4, 2 };
dict[2] = new List<long>() { 7 };
dict[3] = new List<long>() { 25, 19, 27 };
我想得到两个集合 { 1, 12, 4, 2, 7 } 和 { 3, 25, 19 27 } 作为输出;
我找到了一个解决方案,但它看起来不够快。
List<HashSet<long>> graphs = new List<HashSet<long>>();
foreach (var kv in dict)
{
HashSet<long> maybeNewGraph = new HashSet<long>(kv.Value);
maybeNewGraph.Add(kv.Key);
bool success = false;
foreach (var hashSet in graphs)
{
if (hashSet.Overlaps(maybeNewGraph))
{
hashSet.UnionWith(maybeNewGraph);
success = true;
break;
}
}
if (!success)
{
graphs.Add(maybeNewGraph);
}
}
对于这样的问题有更好的解决方案吗? 谢谢。
UPD:更正示例。谢谢斯维克
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在我看来,您正在尝试实现一种算法来解决不相交集。幸运的是,网络上有现有技术。现在我已经向您提供了正确的搜索词,维基百科是一个很好的起点。
这是一个 c# 实现。我不能保证它的效率。
Looks to me like you're trying to implement an algorithm for solving disjoint sets. Luckily for you, there's prior art on the web. Now I've handed you the correct search term, Wikipedia is a good place to start.
Here's a c# implementation. I can't vouch for its efficiency.