如何有效地存储占用/未占用的2D空间(带插入)

时间:2011-12-29 14:47:07

标签: algorithm data-structures python-3.x python

我有一个X乘Y空间,其中X和Y由给我的矩形大小决定。我将一定大小的定向矩形插入空间,一次一个。每次插入尽可能远,然后尽可能远(尽可能接近(0,0))。代表这个的最佳方式是什么?我在Python中实现它。 this问题的最佳答案是有帮助的,但我希望提供一些特定于Python的建议,因为我对语言本身也很陌生。

谢谢!

3 个答案:

答案 0 :(得分:4)

如果您正在尝试有效地打包矩形,则有一些已建立的算法。这是一个特定algorithm的Python实现。还有一篇关于打包光照贴here的文章,我有一个Python version(老实说,我不记得我是自己移植过它,还是从其他地方获取过它)。

答案 1 :(得分:0)

在这样的二维空间中,您有两种选择。

  1. 列表清单。 [ [0, 0, ..., 0], [0, 0, ..., 0], ... [0, 0, ..., 0] ]外部列表是“X”访问,内部列表是“Y”访问。每个点都是space[x][y]。您使用space = list( list( EMPTY for j in range(Y_size) ) for i in range(X_size) )或类似的东西构建它。

    使用一些填充算法屏蔽矩形,该算法将值设置为矩形空间块。

    for x in range( low, high ):
        for y in range ( low, high ):
            space[x][y]= FILLED # or whatever object you're putting there.
    
  2. 映射。 { (0,0): 0, (0,1): 0, ... (X,Y): 0 }。每个点都是space[x,y]。您使用space = dict( ( (x,y), EMPTY ) for x in range(X_size) for y in range(Y_size) )构建它。

    使用几乎相同的填充算法屏蔽矩形。只需稍微更改语法。

答案 2 :(得分:0)

Quadtrees通常用于此类事情。听起来你想要一个区域四叉树。