当前位置: 首页 > 编程语言 > C#

最高效的从邻接表创建树的方法分享

时间:2023-04-11 01:04:28 C#

),我需要用它来构建一棵无序树。它保证没有循环。这花费的时间太长(大约5分钟内处理了870K个节点中的~3K)。在我的工作站Core2Duo上运行,内存充足。关于如何加速的任何想法?publicclassStampHierarchy{privateStampNode_root;私有排序列表_keyNodeIndex;//获取节点列表并构建一棵树//从_root开始privatevoidBuildHierarchy(Listnodes){Stackprocessor=newStack();_keyNodeIndex=newSortedList(nodes.Count);//找到根_root=nodes.Find(n=>n.Parent==0);//找到孩子...processor.Push(_root);while(processor.Count!=0){StampNodecurrent=processor.Pop();//通过键保持到节点的直接链接_keyNodeIndex.Add(current.Key,current);//添加孩子current.Children.AddRange(nodes.Where(n=>n.Parent==current.Key));//将孩子排队foreach(StampNodechildincurrent.Children){processor.Push(child);节点。删除(子);//thoughtthismighthelptheWhereabove}}}}publicclassStampNode{//properties:intKey,intParent,stringName,ListChildren}将节点放入顺序列表或字典中。扫描列表,挑选每个节点,在同一个列表中找到它的父节点(二进制搜索或字典查找),将其添加到父节点的Children集合中。不需要把Stack放到树中。SortedList不是在此上下文中使用的好容器。对于插入操作(重复调用Add()),它是O(n),因为它在内部表示为平面列表。使用Dictionary而不是SortedList将是一个很大的改进,因为它是O(1)分摊插入时间。以上就是C#学习教程分享的全部内容:从邻接表创建树的最有效方法。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: