2

现在我被困在解决以下“半”数学问题。

我想划分一个 n 维受限空间(准确地说是一个超立方体)

D={(x_1, ...,x_n), x_i \in IR and -limits<=x_i<=limits \forall i<=n} 成更小的立方体。

这意味着我想指定立方体每边的分区数n,limits,m在哪里-将是小立方体的长度,我会得到这样的立方体。m2*limits/mm^n

现在我想返回一个向量向量,其中包含这些小立方体的一些不同坐标。(或者也许可以将立方体表示为以指向“左”外角的向量为特征的对象?)

基本上我不知道这样的事情是否甚至可以使用 C++。为固定的 n 实现这一点不会造成问题。但我想让用户可以自由选择尺寸。

背景:这样的东西在优化中是无价的。将空间划分为更小的空间,并在每个子空间上使用例如遗传算法,然后比较结果。因此,可以避免巨大的初始人口,并大大改善搜索结果。我也只是好奇是否……。这样是可行的:)

我的建议: 使用 B+ 树?

4

1 回答 1

2

令 m 为超立方体 D 的每个维度(即每条边)的分区数。

然后有 m^n 个 D 的不同子空间 S,就像你说的那样。让子空间 S 由整数坐标 S=[y_1,y_2,...,y_n] 唯一表示,其中 y_i 是 1,...,m 范围内的整数。那么,在笛卡尔坐标中,S=(x_1,x_2,...,x_n),其中 Delta*(y_i-1)-limits <= x_i < Delta*y_i-limits,Delta=2*limits/m。

您正在寻找的“左外角”或 S 的原点只是对应于最小 x_i 的点,即点 (Delta*(y_1-1)-limits, ..., Delta*(y_n-1)-限制)。与其在这一点上表示不同的 S,不如使用上面的整数坐标来表示它们更有意义(并且在计算机中会更快)。

于 2013-03-23T04:27:42.783 回答