Как выглядит доза непрерывного действия ?
Непрерывный интервал представлен кортежем, (start, end)
.
Например, (2, 8)
относится к области, начинающейся с 2 и заканчивающейся 8.
Что означает самый глубокий охват ?
Для списка диапазонов, например, [(0, 4), (2, 8), (5, 10), (6, 9)]
, результат накопления будет:
│ 0......4
│ 2...........8
│ 5.........10
│ 6.....9
└────────────────────────
0 1 2 3 4 5 6 7 8 9 10 ...
Самый глубокий охват диапазона равен (6, 8)
, что составляет 3.
В этом случае ожидаемый доход должен составлять (6,8)
Мое решение
Я не знаю, как представить непрерывный диапазон, таким образом,Я разбиваю каждый непрерывный промежуток на список чисел и пытаюсь найти наиболее распространенный из встречного результата.
from collections import Couter
import numpy as np
density = Counter()
for start, end in SPAN_LIST:
density.update(
np.round(np.arange(start, end, 0.01)), 2)
)
most_dense_site, most_dense_count = density.most_common()[0]
Результат может быть неточным, а скорость очень большая для большого списка (около миллиардов элементов).Я знаю, что если я увеличу точность, результат будет более точным, но он также будет тратить больше памяти.
Я хотел бы знать, как ускорить процесс и сделать результат более точнымв лучшую сторону?