这些四树图书馆中的任何一个都不错吗?

时间:2010-02-19 17:59:46

标签: python performance quadtree

看来我的某个项目需要使用四叉树,这是我以前从未使用过的。从我所看到的,他们应该允许大量的性能增强,而不是蛮力尝试解决问题。这些python模块中的任何一个都不错吗?

编辑1:有没有人知道比pygame wiki中提供的更好的实现?

编辑2:以下是其他人可能会发现Python中的路径查找技术有用的一些资源。

4 个答案:

答案 0 :(得分:11)

this comment中,joferkington引用了当前的问题并说:

  

只是为了它的价值,scipy.spatial.KDTree(和/或scipy.spatial.cKDTree,出于性能原因用C语言编写)是一个比列出的选项更强大的选择。

答案 1 :(得分:4)

另一个要检查的库是PyQuadTree,这是一个纯python四叉树索引,也适用于Python 3x。你需要添加一个项目就是它的边界框作为一个4长度的序列,所以它可以用于各种目的甚至负坐标系。

虽然我是作者,但我真的只是采用了别人的四叉树结构/代码,使其更加用户友好,增加了对矩形四边形的支持,并添加了文档。一个如何使用它的简单示例:

#SETUP
import pyqtree
spindex = pyqtree.Index(bbox=[0,0,1000,500])

#ADD SOME ITEMS
for item in items:
    spindex.insert(item=item, bbox=item.bbox)

#RETRIEVE ITEMS FROM A REGION
result = spindex.intersect(bbox=[233,121,356,242])

答案 2 :(得分:1)

有时,如何在Python中实现像树一样的数据结构并不明显。

例如,

      D 
    /   \
   B     F
  / \   / \
 A   C E   G

是一个简单的二叉树结构。在Python中,您可以这样表示:

[D,B,F]是具有左右子树的节点。要表示您将拥有的完整树:

[D,[[B,A,C],[F,E,G]]] 

这是一个简单的嵌套列表列表,其中任何节点都可以是D或C之类的值,任何节点都可以是一个子树,递归地是一个嵌套列表列表。你可以用字典词典做类似的事情。这些类型的实现有点快速和肮脏,并且在教师期望Node类具有指向其他节点的指针的赋值中可能是不可接受的,但在现实世界中,通常更好地使用Python列表/词典的优化实现第一。只有当结果在某种程度上不合适时,才能将其重写为更像是用C或Java编写它。

除此之外,你需要实现各种算法来操纵你的树,因为四叉树不仅仅是一些数据;它是一组关于如何插入和删除节点的规则。如果这不是一个课程作业问题,那么Quadtree 0.1.2可能是一个好主意。

答案 3 :(得分:1)

在搜索四叉树时,python包索引会生成另外两个库:http://pypi.python.org/pypi?%3Aaction=search&term=quadtree&submit=search

免责声明:从未使用四叉树或任何这些库。