Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
А нельзя ли перенести данные на какое-нибудь пространственное дерево и свести задачу к сложности меньшей чем N^2?
Бешаные триллионы вычислений расстояния и сравнений с пороговой константой.Добавлю, что эта задача известна в других областях как collision detection, имеет несколько эффективных решений. Вы предлагаете брутфорсить задачу, что не всегда оправданно, если датасеты имеют средний размер, как в примере. Альтернативные (более эффективные) решения — это quad trees, grid-based, sweep and prune, range trees, streaming segment tree и прочие. Эти альтернативы дают асимптотику примерно N*log(N) с разной константой, вместо N^2 или N*M (что то же самое) из вашего примера. В результате никаких «триллионов» вычислений не требуется и не нужен не то что Hadoop, а даже смартфона хватит.
к ни партиционируй по геометрии (хоть по Вороному, хоть quadtree), всё равно будут полигоны, где количество сравнений превышает разумные рамкичувствительность к плотности — это слабость grid-based. Деревья как раз и предназначены для того, что бы обходить эту проблему, ведь глубина веток автоматически подстраивается под плотность.
если партиционировать оба, это даст декартово произведение уже в количестве партов.Почему декартово? В худшем случае же O((N+M)*log(N+M))?
отдельную статью с картинками по этому вопросунаверное так проще :), было бы здорово!
N 000 000 000 000 расстоянийПонятно, просто из мотивационной части и выделенного жирным примера расчётов «в лоб» у меня сложилось впечатление, что именно эта часть и есть основная причина всех этих наворотов с Hadoop и Spark. В то же время, если я правильно понял по вашему примеру с умной разбивкой, расчёт «не в лоб» снижает число необходимых вычислений на много порядков и тогда становится неясно, зачем Spark.
собственной алгоритмики, ограничивающей радиус, и раскладывающей пары по подклассам удалённостиА алгоритмы collision detection тут не подходят? По описанию звучит так, будто это одинаковые задачи.
есть ещё одна сетка, уже самой тепловой карты, и мы смогли использовать прямо её уже на этом уровне.Есть такое типовое решение: строится 2d гистограмма (heatmap), затем на основе этой гистограммы склеивают несколько сеток с разным шагом либо делают вложенные сетки для пиков. Для некоторых частных случаев можно получить около-линейную асимптотику. Правда «вложенные сетки для пиков» — это и есть пространственные деревья…
[кейс Locomizer] Как за два с половиной года ускорить расчёт тепловой карты в 20 000 раз