2015-09-01 3 views
0

Я ищу эффективный способ сопоставить N целых чисел с [1, N].Карта N целых чисел в [1, N]

N целых чисел - это фактически записи отсортированного массива A без избыточности, и моя цель - просто получить доступ к индексу каждой записи массива.

Пример:

Для заданного массива A целых чисел, отсортированных и без излишеств, но с разрывами и, возможно, очень больших количествах (вы могли бы иметь 1000 целых чисел в диапазоне от 25 до 10^6), мне нужен способ найти индекс каждой записи эффективным образом. Например, если A [15] = 1546, мне нужно иметь возможность делать индекс (1546) = 15. Моя проблема в том, что мне нужно сделать это в Fortran, и, насколько я знаю, нет реальной хеш-таблицы библиотеки.

+0

Для сортированного массива без избыточности (например, A = [2,4,7,23]) я хочу иметь доступ к индексу каждой записи (т. Е. A_inverse (7) = 3.). У меня действительно нет кода для показа, поскольку это скорее общая проблема. Так получилось, что мне нужно сделать это в Фортране. – Dooggy

+0

Эта проблема точно решена хэш-таблицей, если диапазон возможных значений не достаточно мал, чтобы вы могли создать инвертированную таблицу поиска. – rici

ответ

1

Я думаю, вы можете использовать бинарный поиск, чтобы решить вашу проблему. Это просто для кода.

Посмотрите эту страницу [Binary search in array issue using Fortran

Использование двоичного поиска вы получите обратный индекс заданного числа.

Смежные вопросы