【发布时间】:2015-03-09 17:31:28
【问题描述】:
我如何迭代所有可能具有指定长度(例如单位长度)的d 维度的向量,其中delta 是步长。
注意delta 可以非常小,例如1e-3 是单位向量。 d 通常在 [0,5] 的范围内,但这不是硬性限制!
愚蠢的方法是使用delta*i 的列表作为i in [0,N) 并生成所有可能的组合,例如n 选择n 并选择总和为1 的组合。但这似乎效率很低,我确信有更好的方法我不知道。
拨片应至少接近均匀分布在表面上。
【问题讨论】:
-
正如我所说,
delta是允许的一维最小变化。这将问题栅格化并从不可数的许多变为有限的范围。 -
在 2D 中,您可以生成一组角度,从中可以计算矢量分量。在 3D(球坐标)中,您需要 2 个角度。我确信这可以推广到 D 维情况。编辑:见上面的@sbabbi
-
如果
delta是沿一维 的最小允许变化,那么您将获得异常浓度的样本。它不会接近均匀分布。那是你要的吗? (换句话说,笛卡尔坐标不能平滑地映射到球体表面) -
@drahnr 我不得不说这个问题似乎并不那么微不足道,而且我猜它根本与 C++ 无关,而是与数学和组合学有关。您也应该尝试将其发布在 mathoverflow 上。您可能需要检查一件事:mathoverflow.net/questions/24688/…
标签: c++ combinatorics