【问题标题】:Efficient way to allow for an n-dimensional coordinate?允许n维坐标的有效方法?
【发布时间】:2013-11-13 14:34:15
【问题描述】:

我目前正在构建一个程序,该程序将计算 n 维中的自动回避行走。 该程序必须有一个它以前访问过的坐标列表。 对于已知的最大维数,我将简单地制作一个位置结构的向量:

struct Position
{
    long int x;
    long int y;
    long int z;
    long int w;
    etc...
}

std::vector<Position> history;
Position currentSite;

但是在为 n 维位置编程时,如果不创建一个大小为 n*walk_length 的数组,我不确定如何做到这一点。

有没有更“正确”的方法呢?

注意:我正在使用 C++ 编程。

【问题讨论】:

  • 数组有什么问题?
  • n 值的向量,其中每个条目代表例如分别是xy等?
  • 至第一条评论:它仅限于我在结构中包含的最大维数。 @JoachimPileborg,那么我如何跟踪职位历史?一个向量的一个向量?

标签: c++ arrays vector struct random-walk


【解决方案1】:

如果n 在编译时已知,您可以使用std::array&lt;long,n&gt; 来表示位置。

如果 n 直到运行时才知道,std::vector&lt;long&gt; 将是一个不错的选择。

【讨论】:

  • n 维,而不是 n 变量。这将是 n^walk_length 变量。
  • @NictraSavios:我所描述的将用于代表一个位置。要表示一系列位置,您可以使用这些位置的向量,就像您已经在做的那样。
【解决方案2】:

我会使用向量作为坐标,并设置位置:

typedef std:vector<long> Position;
typedef std::set<Position> VisitedPositions;

这样你就可以动态选择n,更快地搜索位置。

【讨论】:

  • 如果我的结构中没有变量,我如何能够动态选择 n?我需要一个创建新对象的结构。
  • @NictraSavios - 据我了解,您需要一个无需更改即可与任何 n 一起使用的程序,对吧?在这种情况下,它可以交互地向您请求 n 值并将所有坐标保留在向量中。这种情况我称之为“动态”。如果您事先知道 n 并且它不是太大,您可以使用所有坐标对结构进行硬编码 - 这将是“静态”情况。
  • 是的,我想要一个动态案例,那么如何创建一个动态维度向量呢?会不会像 vector 这样按值、步长和值生成轴的“表”,例如 3,3,-10 ,这意味着 w 轴(4d),第 3 步步行到 w=-10。
  • @NictraSavios - 不,我的意思是您使用 push_back 函数将所有坐标一一保存到向量中。因此,pos[0] 将包含 x 坐标、pos[1] - y 坐标等等。向量的长度将等于您的维度 n。这与 NPE 所说的方法相同。
猜你喜欢
  • 1970-01-01
  • 2015-06-18
  • 2016-04-10
  • 2022-01-19
  • 1970-01-01
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多