更快地处理这些数据的算法? (排序4.2M大小的堆栈)

时间:2016-05-11 16:07:25

标签: java algorithm performance handler game-engine

情况:在程序生成我的游戏世界的最后,我留下了一块 2048 ^ 2 (~420万)大小的瓷砖堆栈。然后,我需要计算他的处理程序堆栈列表中的位置。这是我的方法:

public static final void addTile(Tile t){
        for(int i = 0; i < sections.length; i++)
            for(int j = 0; j < sections[i].length; j++)
                if(sections[i][j].contains(t.x, t.y)){  //<-- determine which list according to tile's pos
                    world.get(i).get(j).get(TILE_LIST).push(t);
                    return;
                }
    }

有一个Rectangle[][]与“世界”中的每个地点相对应。 arraylist。如您所见,这是一个O(n^2)循环,需要执行 420万次。即使 4个线程同时运行处理所有磁贴需要大约20秒。

这不是一个完全不可行的处理时间,但我认为必须有一个更好的算法。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

如MBo所提到的,r树是任意点/多边形搜索的良好空间索引,但是,由于我们正在寻找矩形(轴对齐的多边形),因此使用四叉树可能会更好(或3维中的八叉树。)

quadtree visualization

https://gamedev.stackexchange.com/questions/63536/how-do-shapes-rectangles-work-in-quad-trees

答案 1 :(得分:1)

您肯定需要一个良好的数据结构来快速搜索包含给定点的矩形。

R-tree旨在快速处理此类查询。

enter image description here