Топологическая сортировка? без использования топсорта ⇐ Python
-
Гость
Топологическая сортировка? без использования топсорта
У меня есть список Python под названиемactivity.py
activities = [{'Cost': 10000, 'Duration': 5, 'Name': 'Activity 1', 'Predecessors': None}, {'Стоимость': 8000, 'Продолжительность': 3, 'Имя': 'Действие 2', 'Предшественники': ['Действие 1']}, {'Стоимость': 2000, 'Продолжительность': 15, 'Имя': 'Действие 3', 'Предшественники': ['Действие 2', 'Действие 1']}, {'Стоимость': 7000, 'Продолжительность': 16, 'Имя': 'Действие 4', 'Предшественники': ['Действие 2']}, {'Стоимость': 5000, 'Продолжительность': 20, 'Имя': 'Действие 5', 'Предшественники': ['Действие 4']}, ... Список представляет собой проект, состоящий из действий с заданной продолжительностью, а также ключ «Предшественники», который указывает, какие действия должны быть завершены, прежде чем это действие может начаться. Список доходит до действия 1001, но я включил только первые 5 строк.
Я уже рассчитал общее время для всех занятий, используя:
def get_total_project_duration(activities: list) -> int: total_time = sum(item['Duration'] для элемента в действиях) вернуть общее_время проходить Однако я хочу узнать минимальную возможную «Продолжительность», поскольку в списке есть ключ «Предшественники», который позволяет запускать несколько действий одновременно, чтобы занять как можно меньше времени. Я знаю, что это можно сделать с помощью топологической сортировки, но мне хотелось посмотреть, есть ли способ сделать то же самое, только используя библиотеки по умолчанию.
Я уже пробовал использовать график, но набор данных слишком велик, чтобы это сработало.
У меня есть список Python под названиемactivity.py
activities = [{'Cost': 10000, 'Duration': 5, 'Name': 'Activity 1', 'Predecessors': None}, {'Стоимость': 8000, 'Продолжительность': 3, 'Имя': 'Действие 2', 'Предшественники': ['Действие 1']}, {'Стоимость': 2000, 'Продолжительность': 15, 'Имя': 'Действие 3', 'Предшественники': ['Действие 2', 'Действие 1']}, {'Стоимость': 7000, 'Продолжительность': 16, 'Имя': 'Действие 4', 'Предшественники': ['Действие 2']}, {'Стоимость': 5000, 'Продолжительность': 20, 'Имя': 'Действие 5', 'Предшественники': ['Действие 4']}, ... Список представляет собой проект, состоящий из действий с заданной продолжительностью, а также ключ «Предшественники», который указывает, какие действия должны быть завершены, прежде чем это действие может начаться. Список доходит до действия 1001, но я включил только первые 5 строк.
Я уже рассчитал общее время для всех занятий, используя:
def get_total_project_duration(activities: list) -> int: total_time = sum(item['Duration'] для элемента в действиях) вернуть общее_время проходить Однако я хочу узнать минимальную возможную «Продолжительность», поскольку в списке есть ключ «Предшественники», который позволяет запускать несколько действий одновременно, чтобы занять как можно меньше времени. Я знаю, что это можно сделать с помощью топологической сортировки, но мне хотелось посмотреть, есть ли способ сделать то же самое, только используя библиотеки по умолчанию.
Я уже пробовал использовать график, но набор данных слишком велик, чтобы это сработало.
Мобильная версия