二维矩阵的数据结构设计

时间:2011-06-19 03:53:03

标签: java multidimensional-array

我有一个2D矩阵。我的问题要求我在逻辑上将它划分为4个子矩阵。例如,如果我的原始矩阵是4 * 4,那么有4个2 * 2的子矩阵。 一个从(0,0)开始,其他是原始矩阵的(0,2),(2,0)和(2,2)索引。 我在程序期间多次访问和设置值。我想通过像matrix [x] [y] .at(row,col)这样的东西来访问子矩阵元素,其中x,y指定子矩阵号和行,col表示带有该子矩阵的元素(行,列)。 例如 matrix [2] [2] .at [0] [0] - >应该在第4个子矩阵中给出第一个元素。

非常感谢任何帮助。

先谢谢

2 个答案:

答案 0 :(得分:1)

我不确定这里的问题是什么。基本上你只需要一个伪语义api来寻址二维矩阵的元素。您注意(假定随机)读取和写入数组。我们假设您没有处理线程问题。

Foo,Foo [] []类型的2-dim数组当然可以工作。你只需要包装它。

public class Matrix<T> {
    public interface Quadrant<T> {
        T get(int i, int j);
        void set(T v, int i, int j);
    }
    public static final int XDIM = 4;
    public static final int YDIM = 4;
    private final Object[][] matrix = new Object[XDIM][YDIM];
    public Matrix() { /* .. */ }
    public Quadrant<T> quadrant(final int x, final int y) {
        return new Quadrant<T> () {
            @SuppressWarnings("unchecked")
            @Override public final T get(int i, int j) {
                return (T) matrix [x+i][y+j]; // todo: range checks, etc.
            }
            @Override public final void set(T v, int i, int j) {
                matrix [x+i][y+j] = v; // todo: range checks, etc.
            }
        };
    }
    public static void main(String[] args) {
        Matrix<Object> m = new Matrix<Object>();
        m.quadrant(2, 2).set("hi there!", 0, 1);
        System.out.format("{%d, %d}:(%d, %d) => %s\n", 2, 2, 0, 1, m.quadrant(2, 2).get(0, 1));
    }
}

答案 1 :(得分:0)

你想要看空间填充曲线。 sfc将2d复杂度降低到1d复杂度。它可以帮助理解四叉树,也可以像四叉树一样使用它。你想看看尼克的希尔伯特曲线四叉树空间索引博客。