Алгоритм удаления пересекающихся отрезков

Сама задача не с отрезками, но упростил нужную мне часть для отрезков

Задача: Есть массив отрезков. Нужно найти пересекающиеся отрезки и оставить только те, у которых большая длина.

Пример:

  1. 2 отрезка: (0; 2) (2; 5) пересекаются в пункте 2, (0; 2) нужно удалить, т.к. он меньше.

  2. 3 отрезка (0; 2) (длина 3) (1; 4) (длина 4) (4; 8) (длина 5)

Нужно оставить (0; 2) и (4; 8), т.к. они не пересекаются, (1; 4) удаляется, т.к. пересекается с (4; 8) и (4; 8) длиннее. Но если бы отрезки были (0; 2) (1; 4) и (5; 9) то остались бы (1; 4) и (5; 9)

Вообще сама цель такая (м.б. если не понятно объяснил, что-то тут прояснится): есть dictionary последовательности слов (для замены этой последовательности на другую строку ["1st"...])

"a":
    "b":
        "c": "1st"

На основе этой dictionary строку "a b c d e f g h i" => заменим на "1st d e f g h i"

если к имеющейся dictionary добавим элемент:

"c":
    "d":
        "e":
            "f": "2nd"

то строка "a b c d e f g h i" => заменится уже на "a b 2nd g h i" если к имеющейся элементам добавим еще элемент:


"e":
    "f":
       "g":
          "h":
             "i": "3rd"

то так как "c d e f" меньше чем "d e f h i" , "c d e f" мы удаляем, и хоть "a b c" не нужно удалять теперь, и по итогу получается "a b c d e f g h i" => "1st d 3rd"

P.S. Сорри если что не понятно объяснил


Ответы (0 шт):