c# - 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);
};
}
}
解决方案
推荐阅读
- excel - Excel-VBA 从文本文件导入模块(无需信任中心)
- ssis - SSIS 2008R2 禁用在设计时从运行时存储回来的属性
- angular - Angular - 验证必填字段 - 为什么需要一个带有验证的 div 来包装错误消息 div?
- spring - 在 bootRun 任务中传递 spring.config.location
- vue.js - Vuetife 覆盖组件范围样式
- javascript - Jasmine - 如何模拟全局变量和函数
- sql - 创建一个新列,其中包含来自另一列的子字符串列表
- python-3.x - 如何处理差异音频文件的 MFCC 功能差异
- json - Spring Boot 2 处理表单数据,其中 json 是键的值
- amazon-web-services - 如何对aws codepipeline更改集进行排队