gpt4 book ai didi

c++ - 有效地从 n-ary 树中删除节点列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:37:42 25 4
gpt4 key购买 nike

我有游戏对象的 n 叉树。用户随机选择一棵树中的一些对象,想要删除。问题是有些对象是另一个对象的 child 。事实证明,每次删除层次结构中的节点后,我都必须遍历所有选定的节点并将其删除。该算法是否比 O(n^2) 更快?

更新:为了更清楚我需要什么,我写了伪代码:

struct TreeNode
{
vector<TreeNode*> childs;
};

void removeNodeHierarchy(list<TreeNode*>& nodes, TreeNode *n)
{
for(TreeNode *child : n->childs())
removeNodeHierarchy(nodes, child);

nodes.remove(n); // complexity nodes.size()
delete n;
}

// The function I'm trying to write
// Problem: Total complexity = nodes.size() * nodes.size()
void removeNodes(list<TreeNode*>& nodes, TreeNode *root)
{
while (!nodes.empty()) // complexity nodes.size()
{
TreeNode *n = nodes.first();
removeNodeHierarchy(nodes, n);
}
}

void main()
{
TreeNode *tree = ...
list<TreeNode*> nodes = ...

removeNodes(nodes, tree);
}

最佳答案

为了搜索该节点,需要 O(n^d),其中 d 是树的深度。所以如果 d < 2 会更快,我认为对于大型游戏树来说几乎永远不会出现这种情况。你确定 n 元中的 n 和 O(n^2) 是同一个符号吗?

关于c++ - 有效地从 n-ary 树中删除节点列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55209106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com