Блог пользователя kinol

Автор kinol, 9 лет назад, По-русски

Всем добрый день!

Недавно я наткнулся на такую задачу: найти среди данных N точек две, наиболее удалённые друг от друга по сумме разностей абсолютных значений координат в трёхмерном пространстве(N < 10^6). Она решается перебором всех 8 возможных постановок знаков при раскрытии модулей, после чего для каждого случая ищется наибольшее и наименьшее значения в точках, которые потом вычитаются друг из друга, после чего из полученных 8 чисел берётся максимум. Но что делать, если размерность пространства больше 3?

Первый подход к задаче может заключаться в переборе всех пар точек и вычислению манхеттенских расстояний между ними — асимптотика O(K*N^2), где K — размерность пространства. Второй метод(как в решении исходной задачи) — перебрать все 2^K способов раскрытия модулей, для каждого из них найти пару наиболее удалённых точек за 1 проход, после чего из полученных 2^K значений выбрать максимум. Асимптотика — O(K*N*2^K). Однако при K>20 оба этих метода уже не годятся. Собственно меня интересует, есть ли более быстрые способы решить эту задачу? В идеале хотелось бы чего-то вроде O(N*polylog(N)*polynom(K)), но буду рад, если кто-нибудь предложит и что-нибудь промежуточное вроде O(K*N*sqrt(N))

  • Проголосовать: нравится
  • +10
  • Проголосовать: не нравится

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

напомнило задачу Manhattan minimum spanning tree (https://www.topcoder.com/community/data-science/data-science-tutorials/line-sweep-algorithms/)

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Я не уверен, что абсолютно правильно понял то, что написано в статье по ссылке(мой английский не очень хорош), но из того, что я смог понять, у меня возникло 3 вопроса:

    1. Как это расширить на большие размерности:)
    2. Там рассматриваются все октанты, что, если даже придумать какую-то аналогию описанного в статье для R^K, вероятнее всего выльется в что-то экспоненциальное по K
    3. Вроде как там описан поиск ближайшей пары точек, в то время как мне нужна наиболее удалённая

    Как я уже сказал, я мог что-то не так понять и если мне объяснят, как указанное в статье можно применить к моей задаче, буду очень благодарен

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Можно найти центр этого множества (то есть, точку, максимальное из расстояний от которой до этих точек минимально) k вложенными тернарными поисками (поскольку величина "максимум уз расстояний до всех этих точек" выпукла по каждой из координат). По одному из направлении как раз найдутся две точки на расстоянии r (где r — радиус) с обоих сторон.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Тут опять же вылезает что-то в K степени — даже log(чего-то), а не 2:). Но даже если опустить этот факт, я не очень понимаю, что происходит во второй части вашего алгоритма?