Я пытаюсь решить интересную задачу (я запрограммирую ее на JavaScript, но это не имеет особого значения):
Допустим, есть несколько видео в виде сегментов по несколько секунд на разных уровнях y . Если видео перекрываются во времени, то тот, который находится в верхнем слое, будет виден при воспроизведении всех из них одновременно.
Теперь у меня много этих слоев (это проблема). Я хочу чтобы объединить несколько слоев, когда это возможно, так что в конце у меня будет такое же количество видео, визуально отображаемых таким же образом, но меньше слоев.
Я покажу вам изображение, которое даст лучшее понимание
На этом изображении я взял пример из 11 видео на 11 начальных слоях.
Например, мы видим, что 2 и 1 могут быть поместите на один и тот же слой, поскольку они не перекрываются, и визуально видео будут отображаться одинаково, но, например, 1 и 9 не могут быть объединены рядом ни на 9-м слое, ни на 1-м слое, так как 7 перекрывают и теряют порядок отображения (z -index)
Если я хочу изобразить это в коде:
const orderedSegments = [
[15, 18], // 1
[0.3, 9], // 2
[4, 13], // 3
[8, 14], // 4
[1, 3], // 5
[16, 19.5], // 6
[4.1, 17.5], // 7
[0, 2.9], // 8
[2.9, 11], // 9
[12.5, 19.4], // 10
[11.3, 12] // 11
]
А вот как может выглядеть один из возможных результатов, который будет иметь только 5 слоев, но с таким же отображением: * 1 021 *
const expectedLayers = [
[[0.3, 9], [15, 18]], // 2, 1
[[1, 3], [4, 13]], // 5, 3
[[8, 14], [16, 19.5]], // 4, 6
[[0, 2.9], [4.1, 17.5]], // 8, 7
[[2.9, 11], [11.3, 12], [12.5, 19.4]] // 9, 11, 10
]
Я подумал отсортировать сегменты по длительности начала, а затем создать 1 слой и попытаться вставить в него как можно больше, а когда больше невозможно создать новый слой ... но я Я не уверен, как правильно сохранить порядок.
Вот почему я прошу посмотреть, есть ли какие-нибудь известные алгоритмы для таких вещей, как слияние сегментов при сохранении порядка.
Спасибо за идеи.