Я пытаюсь найти лучший способ решить следующую проблему. Лучше всего я имею в виду менее сложный.
В качестве входных данных список кортежей (начало, длина), например:
[(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)]
.