У меня есть некоторый диапазон действительных чисел в двумерном массиве:
[
[ 100; 200; -50 ]
[ 200; 800; 200 ]
[ 80; -150; 300 ]
]
и константа:
100
Я хотел бы взять все числа и сопоставьте их в двумерном массиве с [0 .. константой - 1], где:
- нижняя половина для отрицательных чисел
- верхняя половина для положительных числа
Теперь вот трюк: я не хочу, чтобы они были разнесены в зависимости от их значения, но исходя из количества уникальных значений:
Например, давайте сосредоточиться на положительном диапазоне. У нас есть:
[ 100; 200; 200; 800; 200; 80; 300 ]
Мы можем превратить это в отсортированный набор:
[ 80; 100; 200; 300; 800 ]
Таким образом, отображение будет:
[ 50; 62; 74; 86; 99 ]
Оно начинается с 50, так как это положительный диапазон, который расширяется за счет доступных чисел (50), чтобы заполнить целевой диапазон.
Таким образом, я могу вычислить словарь, который становится таблицей сопоставления, из исходного 2D-массива, а затем выполнить сопоставление с 2D-массив назначения выполняет поиск.
Но здесь есть одна загвоздка:
Я должен сделать это на 700 МБ с плавающей точкой в процессе, который пытается вывести данные как можно быстрее.
Я не знаю, сколько можно сделать параллельно (помимо разделения положительного и отрицательного), но я ищу решение, оптимизированное по скорости. Я не уверен, насколько быстрым может быть поиск по словарю.
Ответ не обязательно должен быть компилируемым кодом, я ищу правильный подход.