Требуется формула для вычисления идентификатора точки в 2-м пространстве

В основном я пытаюсь выяснить формулу, которая вычисляет уникальный идентификационный номер для точки в двухмерном пространстве. Условия: если f (x, y) = c, то других X1, Y1 не существует, так что f (X1, Y1) = c оба x и y являются целыми числами, а c также должно быть целым числом (double может не подходить, так как его точность сомнительна, и я не уверен, подходит ли она для использования в качестве ключа в хеш-таблице).


person Erich Jagomägis    schedule 25.06.2012    source источник
comment
Это может быть что угодно - от простого до невозможного. Являются ли x и y целыми числами и имеют определенный диапазон?   -  person Anders Forsgren    schedule 25.06.2012
comment
Лучше подходит для math.stackexchange.com   -  person Burhan Khalid    schedule 25.06.2012
comment
если у вас есть верхний и нижний пределы для x, y, тогда я бы попробовал что-нибудь вроде этого, например 0 ‹x‹ 100, 0 ‹y‹ 100, затем c = 100 * x + y. это означает 0 ‹c‹ 10000.   -  person Sudar Nimalan    schedule 25.06.2012


Ответы (1)


Это, конечно, довольно тривиально. Позвольте мне обрисовать алгоритм, я оставлю кодирование в качестве упражнения для всех, кто хочет это сделать.

Возьмите лист бумаги, лучше сделайте его большим, и начертите на нем сетку из квадратов. Обозначьте столбцы числами от min до max, чтобы для целых чисел это было от 1 до большого числа. Обозначьте строки таким же образом. Я предполагаю, что вы начали маркировать строки и столбцы с 1, тогда верхняя левая ячейка этой сетки будет в (1,1).

В ячейке (1,1) напишите число 1. В ячейке (2,1) напишите 2, в (1,2) напишите 3, в (1,3) напишите 4, в (2,2) напишите 5 , ....

Теперь у вас есть обратимое отображение двумерного целочисленного «пространства» в одномерное целочисленное пространство.

Спасибо Cantor за его помощь с этим.

person High Performance Mark    schedule 25.06.2012
comment
Подобно перечислению положительных рациональных чисел, за исключением того, что он также считает приводимые дроби. - person wberry; 25.06.2012
comment
Декодирование немного сложнее, учитывая, что вам нужно вычислить, на какой диагонали вы находитесь, возможно, определив следующее наименьшее треугольное число T на входе, а затем решив n(n + 1)/2 = T. - person wberry; 25.06.2012