2D в 1D преобразование без размеров - PullRequest
2 голосов
/ 07 мая 2019

Предположим, я хочу отслеживать состояние ячеек в сетке. Предположим, что сетка имеет размеры m x n. Я могу просто создать вектор длиной m*n и отслеживать состояние ячейки, используя вектор. В этом случае каждая точка сетки (которая является 2D) будет отображаться в элемент вектора (1D).

Один метод, который я использовал раньше, выглядит примерно так:

defun 2d->1d (x, y, m, n):
    return m*y + x;

defun 1d->2d (i, m, n):
    return [i%m, i/m];

Моя проблема заключается в следующем:

Есть ли способ иметь 2D-> 1D отображение, как указано выше, когда размеры сетки неизвестны или когда сетка бесконечна?

1 Ответ

2 голосов
/ 07 мая 2019

Да, существуют преобразования от 2D к 1D для натуральных чисел, известные как Функции сопряжения .Например, функция сопряжения Кантора:

defun 2d->1d (x, y):
    return (1 / 2) * (x + y) * (x + y + 1) + y;

Обратную функцию см. По ссылке выше, она немного сложнее.

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