【问题标题】:How can I set the coordinates of the Hypercube? What am I doing wrong?如何设置超立方体的坐标?我究竟做错了什么?
【发布时间】:2016-10-13 02:25:38
【问题描述】:

所以,我们有一个家庭作业问题,要求我们创建一个角为 2^n 的超立方体。并且每个角在 x1、x2、x3...xn 的平面上都有一组 n 坐标。因此,一个 n=3 的超立方体具有如下坐标: 000、001、011、010 等在平面 x1、x2、x3 中。

编写这个程序的重点是有一个递归方法和一个迭代方法来“走”过超立方体,并且恰好通过每个角落一次,而不会重叠它的轨迹。教授还要求我们的 Corner 对象是超立方体类中的一个嵌套类。到目前为止,这是我想出的:

公共类超立方体 {

private Corner[] walk;
private int size;
private final int ZERO  = 0;
private int count;

public Hypercube(int n) throws IllegalHypercubeException {
    if (n < 0) {
        throw new IllegalHypercubeException("Please enter a positive integer");
    } else {
        this.size = n;
        this.count = 0;
        this.walk = new Corner[(int) Math.pow(2, n)];
    }
}

public class Corner 
{

    private int[] coordinates;

    public Corner() {
        this.coordinates = new int[size];

    }this.coordinates = coordinates;

}

在我什至可以在 walk 方法中递归排序之前,我发现设置坐标最困难。我的意思是如何设置 2^n 个角的立方体的每个角的所有坐标?

【问题讨论】:

    标签: java arrays data-structures computer-science


    【解决方案1】:

    不会为它编写代码(那是你的工作),但这里有一些东西可以指导你:

    在一维中 - 角为 {0} 和 {1}

    在 2D 中 - 角落将是

    {
      {0,0}, {0,1}, 
      {1,0}, {1,1}
    }
    

    在 3D 中 - 角落将是

    {
       {0,0,0}, {0,0,1}, {0,1,0}, {0,1,1},
       {1,0,0}, {1,0,1}, {1,1,0}, {1,1,1}
    }
    

    如果你还没有啊哈!时刻,这里是剧透:通过在 N-1 维度中的所有角添加前缀 @987654323 来制作 N 维度中的角列表@ 然后通过1

    【讨论】:

      【解决方案2】:

      当您沿着超立方体的边缘穿过超立方体时,每一步都会更改一个坐标。请注意,有一些特殊的二进制序列,其中相邻元素之间恰好翻转了一位。

      查看Gray codes(n 维超立方体的 n 位代码)- 它们描述得很好,存在许多递归和迭代生成序列的方法。

      【讨论】:

      • 有什么问题?正如我所说,只需使用 n-but 格雷码
      猜你喜欢
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 2019-12-23
      • 2014-06-15
      • 1970-01-01
      • 2019-05-26
      相关资源
      最近更新 更多