Разработка структуры данных для 2D матрицы - PullRequest
1 голос
/ 19 июня 2011

У меня есть одна 2D матрица. Моя проблема требует, чтобы я логически разделил ее на 4 субматрицы. например, если моя исходная матрица 4 * 4, то есть 4 подматрицы 2 * 2. один начинается с (0,0), другие - (0,2), (2,0) и (2,2) - индекс исходной матрицы. Я получаю доступ и устанавливаю значения много раз во время программы. Я хочу получить доступ к элементу подматрицы с помощью чего-то вроде matrix [x] [y] .at (row, col), где x, y указывает номер подматрицы и строку, col обозначает элемент с этой подматрицей в (row, цв). например matrix [2] [2] .at [0] [0] -> должен дать первый элемент в 4-й подматрице.

Любая помощь очень ценится.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 19 июня 2011

Я не уверен, что проблема здесь. По сути, вам просто нужен псевдосемантический API для адресации элементов двумерной матрицы. Вы заметили (предположительно случайное) чтение и запись в массив. Мы предполагаем, что вы не имеете дела с потоками.

2-мерный массив типа Foo, Foo [] [], безусловно, может работать. Вам просто нужно обернуть его.

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));
    }
}
0 голосов
/ 19 июня 2011

Вы хотите посмотреть в кривых заполнения пространства.Sfc уменьшает 2d сложность до 1d сложности.Это может помочь понять quadtree, а также его можно использовать как quadtree.Вы хотите заглянуть в блог Ника по пространственному индексу кривой гильбертовых кривых.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...