首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c# QuadTree适当屈服

c# QuadTree适当屈服
EN

Code Review用户
提问于 2019-12-31 18:48:55
回答 1查看 58关注 0票数 0

我已经实现了自己的QuadTree,而且我在查询树时恐怕没有正确地使用产率,我担心我会创建O(HN)迭代器。

你能告诉我如何更好地提高以下代码的性能吗?

QuadTree

代码语言:javascript
复制
public IEnumerable<T> Query(string leafId, Circle shape)
    {
        // Gets the relevant parent by a leafId Query (this is O(lg H))
        var startNode = GetParentIntersecting(leafId, shape);

        return startNode.Query(shape);
    }

QuadTreeNode

代码语言:javascript
复制
 public IEnumerable<T> Query(IShape shape)
    {
        var results = new HashSet<T>();

        foreach (var content in _contents)
        {
            if (shape.Contains(content.GetPosition()))
            {
                //Debug.Log(content.GetPosition());
                yield return content;
                //results.Add(content);
            }
        }

        if (IsLeaf)
            yield break;

        foreach (var node in Nodes)
        {
            if (node.IsEmpty && node.IsLeaf)
                continue;

            foreach (var result in node.Query(shape))
            {
                results.Add(result);
            };
        }
    }
EN

回答 1

Code Review用户

回答已采纳

发布于 2020-01-01 22:43:28

如果正确地使用产率,则可以从嵌套循环中生成。但是你的第一个预言背后的所有代码都是无用的,它没有做任何有用的事情。

首先,yield break是无用的,因为后面没有更多的收益,无论IsLeaf是真还是假,都不会产生更多的返回值。无论如何,迭代都会结束。

第二,用某些内容填充results,但是结果的内容丢失了,然后该方法退出。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/234879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档