首页 > 解决方案 > c# QuadTree 正确产生

问题描述

我已经实现了自己的 QuadTree,我担心在查询树时没有正确使用 yield,我担心我创建了 O(HN) 迭代器。

您能否指导我如何更好地提高以下代码的性能?

四叉树

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);
    }

四叉树节点

 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);
            };
        }
    }

标签: c#iteratorquadtreeyield-return

解决方案


推荐阅读