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

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

Всем доброго времени суток!

Недавно я заинтересовался следующей проблемой: пусть у нас есть плоскость, на которой проведено n прямых общего положения — то есть, никакие 2 не параллельны, никакие 3 не пересекаются в одной точке. Ясно, что эти прямые разбивают плоскость на некоторые части — притом, площадь некоторых конечна, а некоторых — бесконечна. Подсчитаем число частей, которые являются треугольниками. Поставим теперь "экстремальную" задачу — обозначим за f(n) минимальное число треугольников, которое может получиться, а за g(n) — максимальное.

Оказывается, что f(n) = n - 2 для любого n ≥ 3. Эта теорема была недоказанной на протяжении больше сотни лет, пока ее не доказали достаточно хитроумным способом, описанным, например, в статье "Треугольники и катастрофы".

К сожалению, найти какие-то оценки на величину g(n) в Интернете у меня не получилось. Можно, однако, получить тривиальную квадратичную оценку с помощью формулы Эйлера: рассмотрим нашу картинку как планарный граф — вершинами будут точки пересечения прямых, ребрами — те отрезки между вершинами, которые более ничем не пересекаются. Обозначим количество вершин за V, ребер — за E, граней (частей с конечной площадью) за F. На приведенном рисунке V = 10, E = 15, F = 6. Вообще, нетрудно перебрать все варианты и обнаружить, что g(5) = 5.

Как известно из формулы Эйлера, V - E + F = 1(мы не учитываем "внешнюю" грань). V и E по несложным соображениям можно высчитать как и n(n - 2), отсюда мы видим, что количество частей с конечной площадью независимо от разбиения равняется — собственно, это и дает тривиальнейшую оценку на количество треугольников как что-то порядка .

В связи с этим возник вопрос — а достигается вообще ли эта оценка? Чтобы показать определенную нетривиальность задачи подмечу, что g(9) ≥ 14:

Update челлендж закрыт, поскольку я ошибочно предполагал, что g(n) имеет порядок не больший, чем nlog(n) и господа Endagorion и Ripatti привели квадратичные примеры. Собственно, с задачей я встретился, пытаясь улучшить константу вот здесь — если есть любители математики, которые захотят порешать:)

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

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

Возьмем n + 1 почти вертикальных и n + 1 почти горизонтальных прямых, они образуют разбиение на n2 клеточек (и какие-то другие области, на которые пофиг). Проведем 2n - 1 прямых, примерно параллельных диагоналям сетки так, чтобы в каждой клеточке был треугольник. Получилось Ω(n2). Где я неправ?

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

    Кажется, вы правы, я даже и не предполагал, что есть квадратичный пример:) Притом, если я правильно нарисовал, получается, что . Интересно — а можно улучшить?

    Вообще, на самом деле это логично, иначе подсчет матожидания вот в этой задаче давал бы гораздо лучшую асимптотику, чем , что сомнительно:)

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

      Ну, одна восьмая — это конструкция, которая сходу в голову пришла. Разумеется, можно и лучше.

      Стало интересно, как выглядят хорошие решения, поэтому быстренько набросал отжиг. Для решений, к которым он сходится, , поэтому это выглядит правдоподобной гипотезой.

      Для n = 9 лучшее решение, которое у меня есть (и оно, скорее всего, наилучшее глобально), это 21:

      Еще значения: g(12) ≥ 37:

      g(16) ≥ 67 (не все треугольники попали на картинку):

      g(20) ≥ 105, g(25) ≥ 153. Дальше пока что отжиг плохо справляется.

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

        Красивые рисунки, только на последнем есть зеленый четырехугольник — так и задумано?:) Вообще, примеры похожи на "звездочку" размера n — то есть, выбирается некие n точек на выпуклой фигуре типа элиппса и после этого 1-я точка соединяется с n / 2-ой, n / 2-я с 2-ой точкой, та с (n / 2 - 1)-ой, и так далее — правда, аналилизировать то, что получается внутри, не очень понятно как.

        А как выглядит отжиг для этой задачи? У меня была идея задать задачу формально как функцию (x1, x2, ..., xn, α1, α2, ..., αn), где x1, ..., xn — точки, в которых прямые пересекают какую-то стороннюю прямую (к примеру, прямую y = 0), притом прямая li пересекает ее в точке xi под углом αi. Собственно, "энергия" — это (минус) количество треугольников. А как вы его реализовали?

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

          Зеленый четырехугольник — баг, конечно.

          Отжиг простой: генерим набор случайных прямых и начинаем их случайно заменять по одной (или больше, в зависимости от метода).

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

This thread is very far from being closed.

Proof that is in fact pretty easy and you can find it here: http://artofproblemsolving.com/community/c6h597095p3557339

I remember that I had once read article about it in Wikipedia and that it's still an open question to determine exact values of g, but it is possible to give very good estimations. I can't recall exact estimations, but it is possible that differences between some of them were 1. And given bound can't be much better, example with large g(n) can be improved much further than

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

Some construction like this

gives (n + 1)2 - 3 triangles for 3n lines where n ≥ 2.

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

    Oops, my fault, it gives only constant instead of I thought earlier...

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

      It seems from Swistakk's comment that bound cannot be reached, but your example is nice anyway:)

      By the way, aren't you an author of "Fragmentation algorithm and van der Waerden numbers" on Habrahabr?

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

        I thought I found a counterexample for his proposition. I should check my results more diligently.

        Yes, that's me.

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

          I like this algorithm and I even added your article to bibliography in my course work in MIPT. It was concerned with question "what is the minimal N such that if we color numbers 1, 2, ..., N in C colors then exist a nontrivial monochromatic solution of equation x + y + z = 3w", and I used that algorithm to find an answer for 4 colors:)

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

      UPD. Seems that this construction won't work.

      Nevertheless looks like I know how to improve it a bit.

      Consider 3 groups of almost parallel lines on the picture above. We can construct similar structure using them, but it will be very stretched on the plane. Like this:

      We will have 3 additional constructions with n / 9 lines. After that we can split (9 groups of lines now) again and build 9 additional structures having n / 27 lines.

      So, for n → ∞ we will have (n / 3)2 + 3(n / 9)2 + 9(n / 27)2 + ... + O(n) = = triangles.

»
10 лет назад, # |
Rev. 4   Проголосовать: нравится +5 Проголосовать: не нравится

Hey folks, can you check this construction?

Blue lines are bundles of k almost paraller lines, red ones are bundles of 2k ones.

Black dots are Endagorion's constructions, green is mine.

We have n = 12k lines total, for any black dot we have triangles and for the green dot. So, total number of triangles is

.

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

Here is described a construction with n2 / 3 + O(n) triangles.