Я только начал заниматься диссертацией на степень бакалавра, и сейчас я пытаюсь создать алгоритм, который предоставит персонализированные предложения по выбору курса на основе результатов академической работы c. Я изучаю и использую python, и до сих пор я создал список курсов и список предварительных условий, который выглядит следующим образом:
[['CS101'], ['CS105'], ['CS106', 'CS105'], ['CS107'], ['CS130'], ['CS151', 'CS105', 'MATH101'], ['CS180'], ['CS201', 'CS151'], ['CS205', 'CS105'], ...]
Так, например, для того, чтобы взять CS101
вам не нужно проходить какой-либо другой курс, но для того, чтобы пройти CS106
, вы должны уже пройти CS105
. Теперь я должен выполнить топологическую сортировку, и хотя я нашел код из аналогичной проблемы, которая была предоставлена здесь в Stack Overflow, он не работает. Решение было следующее (я изменил только часть my_lists
для работы с моим кодом):
import networkx as nx
my_lists = data.prerequisites
my_graph = nx.DiGraph()
for path in my_lists:
my_graph.add_nodes_from(path)
my_graph.add_path(path)
ts = nx.topological_sort(my_graph)
print(ts)
, где data.prerequisites - список, созданный в другом файле python (данные .py). Проблема в том, что когда я запускаю это, это выдает мне эту ошибку:
AttributeError: у объекта 'DiGraph' нет атрибута 'add_path'
Я искал документацию networkx 2.4
и ничто не указывает на то, что они заменили add_path()
. Было одно решение для этой ошибки, но оно больше не работает, так как решение было дано в 2011 году, а add_path()
было полностью удалено в 2019 году. Я попытался использовать другие примеры из inte rnet, но не смог найти правильный для списков. Должен ли я попытаться найти совершенно другой подход, или есть небольшое простое решение, подобное этому? Потому что многих из них я не могу понять.