Мне нужно принять проектное решение по некоторой структуре данных для чрезвычайно быстрого доступа. Вот сценарий:
Я должен синхронизировать две переменные с разной скоростью роста. У меня есть данные в следующем формате:
Range (Ai1, Ai2) ~ Range (Bi1, Bi2) То есть, диапазон Ai1 - Ai2 соответствует Bi1 - Bi2 для некоторого i
Теперь, учитывая любой топор во всем диапазоне A, я должен быть в состоянии определить соответствующий диапазон в (Bj1, Bj2) и наоборот. Тип данных мудрый: A является int; в то время как B плавает.
Я не знаю, какой тип данных будет наиболее подходящим для этого перевода? Мое основное требование - скорость. Также была бы полезна любая помощь в том, как эта структура данных может быть реализована в C #.
Проблема гарантированно помещается в памяти. Диапазон A может составлять приблизительно от 0 до 300 000, а размер диапазона Ai1-Ai2 может составлять от 10 до 300; в то время как диапазон значений с плавающей запятой составляет от 0 до 10 000 000 (мы используем только 3 десятичных знака), а размер диапазона Bi1 - Bi2 может быть примерно 0,100 - 10.000
Другим известным фактом является то, что A гарантированно будет непрерывным, а B - нет. Но оба вида увеличиваются одновременно, но с разной скоростью. Также ни один из диапазонов не перекрывается. Оба монотонно растут.
Так что можно ожидать чего-то подобного:
(Ai1, Ai2) ~ (Bi1, Bi2)
(1,78) ~ (13,454, 19,546)
(79,114) ~ (19,712,22,335)
(115, 198) ~ (22,678, 24,101)
запрос: A = 99, ожидаемый ответ: диапазон B = (19,712,22,335)
запрос: B = 16.117, ожидаемый ответ: диапазон = (1,78)
В случае, если B не находится в диапазоне, ожидается округление вперед.
Thnx-Эгон