@JanJarius
Заканчивающий как начинающий

Создал 4096 ветвей дерева из циклов for → for → for ... и т.д.. Как их теперь найти?

Нужна подсказка, благодарю всех.
Осваиваю питон, изучаю возможности.

Я хотел быстро создать двоичное дерево, решил циклом for:

for wood_1 in range(1, 3):
    for wood_2 in range(1, 3):
    #и так 12 раз...


Внутри последнего цикла я собрал все ветки в списки:

for wood_12 in range(1, 3):
    allwood = [wood_1, wood_2, ....., wood_12]
    print(allwood)


И меня получилось 4096 чудесных списков (веток двоичного дерева):

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1]
......

Но вот вопрос... Как мне их идентифицировать? Мои попытки засунуть этот результат в list() ничего не дают. Подскажите, что такое элементарное я упускаю по незнанию?

Благодарю.
  • Вопрос задан
  • 160 просмотров
Решения вопроса 1
@0pauc0
Найдите сами, что такое и с чем едят b-tree,
а также что такое узлы и ребра (это то из чего состоят графы и деревья),
как создать граф (дерево) и совершать обходы по нему.
Поверьте, это гораздо интересней, чем мучать процессор 12-ю вложенными циклами.

Ну а по теме наверное так:
import networkx as nx

G = nx.balanced_tree(2,12)
print (G.edges()) # выведет все дуги дерева
print (G.nodes()) # выведет все узлы дерева


А дальше какой хотите обход делайте по дереву.

Или так:
Вместо print(allwood) сохраняйте путь в список:
all_paths.append(allwood).
Не забудьте до циклов проинициализировать all_paths = [].
Получите матрицу(таблицу), в каждой строке которой один из путей,
столбец указывает на уровень графа (дерева) - готовая адресация.

Если же в каждом узле надо хранить какой-то объект, то тогда используйте
networkx конечно - он позволяет представить узел от простой переменной до хранения инициализированного экземпляра класса любой сложности.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Вычесть 1 из значений, чтобы вместо 1 и 2 стали 0 и 1, и, поздравляю, вы изобрели двоичную систему исчисления и записали ей подряд числа от 0 до 2^12 – 1
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы