Нахождение эффективного алгоритма, чтобы получить линию - PullRequest
0 голосов
/ 10 декабря 2018

Учитывая n горизонтальных сегментов, где диапазон каждого сегмента равен x2 - x1, какой алгоритм я должен применить, чтобы получить прямую линию, которая дает мне самый большой объединенный диапазон (каждое пересечение с сегментом добавляетдиапазон этого сегмента), это все равно что найти линию для бурения, чтобы получить максимальное количество воды (вода, представляющая сегменты с количеством X2-X1). Я выполнил алгоритм грубой силы с удручающим большим O (n ^ 4)

1 Ответ

0 голосов
/ 10 декабря 2018

Я предполагаю, что нет сегмента, который начинается с конца другого, если нет необходимости изменять немного следующее:

  • Для каждого сегмента создайте 2 кортежа: (x1, index) и (x2, index)
  • Сортировка кортежей по первому значению
  • Установка наилучшего = 0
  • Повторение кортежей.Если это начальная точка (индекс не был виден ранее), добавьте его значение (x2 - x1) к наилучшему.Если это конечная точка, вычитается ее значение в лучшую сторону.
  • Ответом на проблему будет наибольшее достижение наилучшего значения.

Сложность: O (n log n)

...