как равномерно распределить числа внутри диапазона, в F # - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть некоторый диапазон действительных чисел в двумерном массиве:

[
    [ 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 МБ с плавающей точкой в ​​процессе, который пытается вывести данные как можно быстрее.

Я не знаю, сколько можно сделать параллельно (помимо разделения положительного и отрицательного), но я ищу решение, оптимизированное по скорости. Я не уверен, насколько быстрым может быть поиск по словарю.

Ответ не обязательно должен быть компилируемым кодом, я ищу правильный подход.

...