Дерево (лес) зависимостей -- как выстроить элементы в линию (список) в нужно порядке
Primary tabs
Forums:
Предположим, что:
- у нас есть некоторое множество объектов, которые могут зависеть от других подобных им объектов (а те в свою очередь тоже и т.д.), а могут и не зависеть.
- И есть задача: выстроить все объекты в линию, так, чтобы те, от которых зависят шли раньше, чем зависящие от них (для независимых порядок не важен).
-- такую задачу нужно решать, например, если вам требуется расположить js файлы (теги, их загружающие) в нужном порядке.
Предположим, что о том, от чего зависит данный объект или какие объекты от него зависят узнать просто (т.е. не будем будем учитывать способ описания таких зависимостей).
Решение (возможный алгоритм)
Возможен такой алгоритм:
- Добавляем все объекты в некоторый массив A (проверяем, чтобы они не попали туда дважды)
- Создаём копию массива A -- массив B (в нем-то мы и будем сортировать элементы).
- Далее просматриваем этот массив A
- Перейдя к очередному элементу, смотрим зависят ли от него какой-либо другой из списка, если да -- определяем минимальный номер зависящего (позицию) и переставляем в массиве B наш текущий элемент перед зависимым элементом с минимальным номером (если он итак не стоял раньше), если же от данного элемента ничего не зависит, то просто переходим к следующему
- Повторяем предыдущий пункт пока не просмотрим весь массив A.
В итоге в массиве B мы получим элементы в правильном порядке.
Улучшенный алгоритм
Сортировка из предыдущего описания не понадобится, если при добавлении элементов в единственный массив A, мы будем сначала добавлять те элементы, от которых зависит данный, а потом уже все остальные.
Спасибо за подсказку Е. Ив.
- Log in to post comments
- 2023 reads