点差分

时间:2014-09-15 12:00:08

标签: algorithm grouping

这是一个算法而不是一个开发问题 我在一个国家/地区有许多地点(由地理坐标表示),并希望对它们进行分组,以便每个组覆盖相同的区域(不同区域的数量是固定的),并且每个组大致包含相同数量的位置。 / p>

达到此目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

好的,让我们定义一些东西(伪代码):

location: (double x-coord, double y-coord)

也就是说,每个位置只有两个数字。我们假设您有M个位置。

group: array of (array of locations)

这样group[i]是一个包含第i组位置的数组。 现在,你事先知道你最终会得到一定数量的团体(如果我正确地理解了你的要求),我们称之为N.所以每个团体都会有大约M/N个位置。 现在,你的主要问题是你不能订购数字对(即复数不是通常的),但这就是我要做的:

  1. 构造一个矩阵matrix[i][j],以便每个单元格包含一个 地点。为了我的工作想法你必须做到(让我们借钱 一些OO符号):

    • matrix[i][j].x <= matrix[i+1][j].x
    • matrix[i][j].y <= matrix[i][j+1].y

    为了使其工作,某些单元格可能为空。只需在下一阶段丢弃它们。

  2. 然后,您将一个组定义为一个子矩阵,该子矩阵仅包含相邻位置(或者您只能在相邻位置上行进的位置)。所以你开始一个for循环(java / c表示法)for(int i=0; i<N; i++)并在里面添加元素到group[i],直到group[i].length到达M/N;然后你去下一个i。我会用(0,0),(0,1),(1,0),(1,1),(0,2),(2,0),(2,1)之类的东西迭代矩阵, (1,2),(2,2)......但你可以用不同的方式实现它(例如考虑到坐标之间的差异,这样你只能组合在一起&#34;关闭&#34;位置但是那个取决于你需要什么。
  3. 你的问题并不容易,但如果你只需要粗略的分组,就可以轻松完成。