将数组拆分成混乱的子数组?

时间:2014-06-18 10:59:13

标签: random arrays

需要将包含 n 行和 m 列的数据数组拆分为 s 非交叉部分(近似)大小相等。

现实 n * m 不一定能被 s 整除,所以我们必须处理大小 floor(n * m)的块小区(N * M)。但目前这是我最不关心的问题。

必要的必要属性是,在某种意义上,每个块在结构上都与数据的整体性断开,因为全局相邻元素的大块都不属于同一块,也不是棋盘式分裂。

你会建议什么?我应该简单地转向随机性还是有一些适合这种情况的整洁结构?

1 个答案:

答案 0 :(得分:1)

我发现自己在匆忙的停工期间无所事事地考虑过这个问题,似乎应该有几种方法可以做到这一点;这在某种程度上取决于你想要达到的目标。这就是我梦寐以求的,万一它有用。

据我了解,您希望将 nxm 阵列分成 i 大致相等的块,其中 n 并且 m 未知,并且没有任何相邻元素共享集合。

首先,Four Colour theorem告诉我们你可以用四组来做到这一点;可能值得一看的是,是否有现成的算法来为阵列工作。在比例的另一端,您可以通过为每个元素分配它自己的单例集,轻松地为 n x m 组执行此操作。

如何处理此问题取决于您希望最小化的内容 - 例如,您是否需要最少数量的 i 组。如果这不是问题,您可以尝试以下内容:

单独查看 n ,如果n为偶数,则将数组划分为大小为 n / 2 的组,然后创建 n / 2 集合 - 一个包含每个组的第一个元素,一个包含第二个元素等。这些只包含非连续元素。如果 n 是奇数,则创建一个由 nth 元素组成的单例集,然后按照上面的步骤继续。

在一维情况下,这将为您提供大小为2的 n / 2 组,其中可能有额外的大小为1.它也适用于2个维度,除以< em> n 和 m 如上所述。

如上所述,这可能不是您正在寻找的答案,但我希望它可能有助于促进进一步调查 - 您可以替换奇数/偶数检查一个用于最高公因数或素数分解,例。在Math Overflow上也可能值得问这个问题。

我可以编写一些伪代码(或一些python)来说明如何实现,如果有用的话。