将 n 维"square"空间划分为立方体

Partition an n-dimensional "square" space into cubes

本文关键字:划分 立方体 空间 square      更新时间:2023-10-16

现在我正在解决下面的"半"数学问题。

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

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

意味着我想指定n,limits,m,其中m将是立方体每边的分区数量- 2*limits/m将是小立方体的长度,我将得到m^n这样的立方体。

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

基本上我不知道这样的事情是否可以使用c++。对于固定的n实现这个不会造成问题。但是我想让用户可以自由选择维度。

Background:这样的东西在优化中是无价的。将空间划分为更小的空间,并在每个子空间上使用遗传算法,然后比较结果。因此,可以避免大量的初始种群,并大大改善搜索结果。我也很好奇这样的事情是否可行。

我的建议:用B +树吗?

设m为超立方体d的每个维度(即每个)的分区数。

那么就有m^n个不同的子空间S (D)设子空间S由整数坐标S=[y_1,y_2,…]唯一表示,y_n],其中y_i是1,…在笛卡尔坐标系中,S=(x_1,x_2,…,x_n)其中Delta*(y_i-1)-limits <= x_i <Delta*y_i-limits和Delta>

你正在寻找的S的"左外角"或原点只是对应于最小x_i的点,即点(*(y_1-1)-limits,…δ* (y_n-1)限制)。与其用这个点来表示不同的S,不如用上面的整数坐标来表示它们更有意义(在计算机中也更快)。