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

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

Доброго времени суток! Подскажите, пожалуйста, куда можно сдать пересечение полуплоскостей в 2D.

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

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

    Мне одному не очевидно, как здесь использовать пересечение полуплоскостей?

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

      ну диаграмма вороного. или ты намекаешь, что там всё проще?

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

        Ну, там точно все проще. Нас интересуют центры описанных вокруг каждой тройки окружностей и точки на внешней окружности. Первые просто находятся (или только радиусы), вторые бинпоиском по ответу обрабатываются. Задачу не сдавал. Диаграмма вороного немного нужна, если хочется квадрат. Но откуда пересечение полуплоскостей?

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

          Ага, понял, можно вороного через пересечение полуплоскостей, совсем втупую — O(n4), что долго. Наверно каким нибудь "заворачиванием подарка", можно соптимайзить до O(n3), что уже норм.

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

            Не, казалось бы, хаворачивание подарка дает квадрат, а куб — это просто перебрали тройку точек и узнали радиус описанной вокруг них окружности. Для внешнего круга можно n log ans. Разве нет?

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

              За я умею без всяких вороновых, но немного не так как ты говоришь. Мне интересно как можно пересекая полуплоскости построить вороного за O(n2)? Как это сделать совсем втупую: фиксируем точку, строим O(n) срединных перпендикуляров между нашей точкой и всеми остальными, всех их пересекаем, получаем O(n2) точек, далее за O(n) проверяем каждую точку на принадлежность каждой полуплоскости — профит за O(n3) построили ячейку вороного. Как построить ячейку за O(n)? (P.S. ни диаграмму вороного, ни пересечение полуплоскостей ни разу не писал, мне не понятно как пересечь n полуплоскостей за O(n))

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

                Ну,конкретнов этой задаче не нужно строить ячейку,просто проверяем ключевые точки.Ячейкувороного просто строить за квадрат. Просто каждый серпер пересекаем с остальными и, в зависимости от относительного наклона прямых находим луч пересечения данного серпера с полуплоскостью, образованнойдругим. Пересекли все эти лучи — получили отрезок на внешней границе ячейки. Так за квадрат для каждой ячейки можно построить диаграмму. Про линию для каждой ячейки сходу не расскажу, там что-то в духе алгоритма дляпостроения выпуклой оболочки.

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

                  Если что, то всё что читал (но не писал), это nlogn через skanline, nlogn через bst, и n2logn с помощью сортировки и стека. Даже последний не слишком простой.

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

            Вроде смотря как реализовать, казалось бы за четвёртую, но летает, прошло за 0.031. Пытался в своё время худший случай построить, вообще выходила сложность кажется n^3 или n^4/bigconst.

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

http://acm.timus.ru/problem.aspx?space=1&num=1062

Но тут, на мой взгляд, не совсем тривиально, что к 2D сводится.

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

NEERC 2010, задача J.