Найти минимальное количество точек, которое охватывает весь набор интервалов?

учитывая набор интервалов [x,y] where 0 <= x,y <= 2000 Как найти минимальное количество точек, которые могут охватывать (т. е. каждый интервал должен содержать хотя бы одну точку в результирующем наборе точек) все интервалы?

пример:

Given Set of intervals:
    [2,5]
    [3,7]
    [7,10]

тогда ответ должен быть 2 (минимальное количество баллов, необходимых для покрытия всех интервалов) в качестве пунктов x=3,x=7 это одно из решений.

1 ответов


вы можете использовать жадный алгоритм:

  1. сортировка всех интервалов по их конечным точкам (в порядке возрастания).

  2. итерация по отсортированному массиву интервалов. Когда интервал заканчивается, есть два варианта:

    1. он уже охвачен какой-то точкой. В этом случае ничего нельзя делать.
    2. Это еще не охвачено. Затем конечная точка этого интервала должна быть вставлена в результирующий набор.

результирующее множество, генерируемое этим алгоритмом, является оптимальным.