Упорядочить объекты в иерархических списках в соответствии с их взаимозависимостью
У меня есть несколько объектов с взаимозависимостью.
- B (зависит от A)
- C (зависит от B)
- D
- E (зависит от B и F)
- F (зависит от C)
- г
- H (зависит от B)
Я хочу создать иерархический список этих объектов, где объект помещен в список, который находится после списка, содержащего его зависимости.
Предыдущий список объектов будет размещен так:
- A, D, G (эти объекты не имеют зависимостей)
- B (B зависит от A)
- C, H (C и H зависит от B)
- F (F зависит от C)
- E (E зависит от B и F)
Какой алгоритм может решить эту проблему?
1 ответ
Если у вас нет вспомогательной структуры, вам следует использовать грубую силу.
Я хотел бы использовать список, который будет расширяться вертикально в схеме и один для каждого узла вертикального списка.
Итак, в вашем примере у меня будет 5 узлов в вертикальном списке, а для первого узла у меня будет список из 3 узлов (первый узел будет содержать A, второй D и третий G). Второй узел вертикального списка будет иметь список с одним узлом, который будет содержать B и так далее.
Таким образом, алгоритм будет выглядеть примерно так:
1.For every item
2. if item.dependency in list
3. append item in the correct node
4. else // item not in list
5. create node in list with the dependency of the item
6. append item in the created node
Итак, в приведенном выше псевдокоде, когда я говорю "список", я имею в виду вертикальный код.
На шаге 1 мы проверяем все предметы, которые у вас есть.
На шаге 2 вы проверяете, существует ли элемент, который вы сейчас обрабатываете, в списке (просматривая весь список и возвращая найденную позицию или что-то более умное).
На шаге 3 вы переходите в позицию, найденную на шаге 2, и вставляете в конец списка, расположенного в узле, положение позиции вашего элемента (вам не нужно снова сохранять зависимость). Обратите внимание, что если узел в позиции не имеет записей в своем списке, то вам также необходимо создать его список.
На шаге 4 мы имеем дело с тем, что наш элемент не найден в списке.
На шаге 5 мы создаем новый узел в списке, который будет иметь в качестве значения зависимость элемента.
На шаге 6 мы вставляем элемент в узел, созданный на шаге 5.
Надеюсь это поможет!