алгоритм для поиска самых длинных неперекрывающихся последовательностей

Я пытаюсь найти лучший способ решить следующую проблему. Лучше всего я имею в виду менее сложный.

В качестве входных данных список кортежей (начало, длина), например:

[(0,5),(0,1),(1,9),(5,5),(5,7),(10,1)]

Каждый элемент представляет последовательность своими началом и длиной , например (5,7) эквивалентно последовательности (5,6,7,8,9,10,11) - списку из 7 элементов, начинающихся с 5. Можно предположить, что кортежи сортируются по элементу start .

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

Например, для данного ввода решение:

[(0,5), (5,7)] эквивалентно (0,1,2,3,4,5,6,7,8,9,10, 11)

это лучший подход к решению этой проблемы?

Меня интересуют любые другие подходы, которые люди могут предложить.

Также, если кто-нибудь знает формальную ссылку на эту или другую проблему, аналогично Я хотел бы получить ссылки.

Кстати, это не домашнее задание.

Правка

Чтобы избежать некоторых ошибок, это еще один пример ожидаемого поведения

для ввода типа [( 0,1), (1,7), (3,20), (8,5)] правильный ответ [(3,20)] эквивалентен (3,4, 5, .., 22) длиной 20. В некоторых полученных ответах [(0,1), (1,7), (8,5)] будет эквивалентно (0,1, 2, ..., 11,12) как правильный ответ. Но этот последний ответ неверен, потому что он короче, чем [(3,20)] .

17
задан Dan Nissenbaum 3 June 2014 в 21:52
поделиться