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 に対してこれを実装しても問題はありません。しかし、ユーザーが次元を自由に選択できるようにしたいと考えています。

背景:そのようなものは、最適化において非常に貴重です。空間をより小さなものに分割し、たとえば各部分空間で遺伝的アルゴリズムを使用し、後で結果を比較します。したがって、巨大な初期集団を回避でき、検索結果が大幅に改善されました。また、私は sth かどうかに興味があります。そのように実行可能です:)

私の提案: B+ ツリーを使用しますか?

4

1 に答える 1

2

超立方体 D の次元ごと、つまりエッジごとの分割数を m とします。

次に、あなたが言うように、D の m^n 個の異なる部分空間 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 に答える