Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 23.11.2021
Сообщений: 71
1

Вывести список всех элементов древа в лексикографическом порядке

19.06.2022, 18:55. Показов 915. Ответов 16

Author24 — интернет-сервис помощи студентам
В генеалогическом древе у каждого человека, кроме
родоначальника, есть ровно один родитель.
Каждом элементу дерева сопоставляется целое неотрицательное число,
называемое высотой. У родоначальника высота равна 0, у любого другого
элемента высота на 1 больше, чем у его родителя.
Дано генеалогическое древо, определите высоту всех его элементов.
Программа получает на вход число элементов в генеалогическом древе
N. Далее следует N−1 строка, задающие родителя для каждого элемента
древа, кроме родоначальника. Каждая строка имеет вид имя_потомка
имя_родителя.
Программа должна вывести список всех элементов древа в
лексикографическом порядке. После вывода имени каждого элемента
необходимо вывести его высоту.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.06.2022, 18:55
Ответы с готовыми решениями:

Напишите программу, которая выводит список элементов древа в лексикографическом порядке и для каждого имени его высоту
В генеалогическом древе у каждого человека, кроме родоначальника, есть ровно один родитель....

Список элементов древа в лексикографическом порядке
Условие В генеалогическом древе у каждого человека, кроме родоначальника, есть ровно один...

Программа генерирования всех к-элементов сочетаний множества {1,.,n} в лексикографическом порядке
Разработать алгоритм программу решения задачи, которая выполняет генерирование всех k-элементов...

Генерация всех m-размещений из n элементов в лексикографическом порядке(12,13,21,23,31,32). Рекурсивный метод
Есть реализация алгоритма на C++ для данного условия, но не могу перенести некоторые функции в C#....

16
Status 418
Эксперт Python
4581 / 2348 / 602
Регистрация: 26.11.2017
Сообщений: 5,264
Записей в блоге: 3
19.06.2022, 22:03 2
ChaiNZero, и в чем проблема?
0
3743 / 1938 / 612
Регистрация: 21.11.2021
Сообщений: 3,723
20.06.2022, 06:49 3
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def set_and_get_h(name, d_par, d_h):
    if d_par[name] == None:
        d_h[name] = 0
    if d_h[name] == None:
        if d_h[ d_par[name] ] != None:
            d_h[name] = 1 + d_h[ d_par[name] ]
        else:
            d_h[name] = 1 + set_and_get_h( d_par[name], d_par, d_h )
    return d_h[name]
#==============================================================================
d_par  = {}
n = int( input('n = ') )
for _ in range(n):
    c, p = input('потомок, родитель: ').split()
    if not p in d_par:
        d_par[p] = None
    d_par[c] = p
d_par = dict( sorted(d_par.items()) )
d_h   = dict.fromkeys(d_par, None)
for name in d_par:
    print( name, set_and_get_h(name, d_par, d_h) )
0
Status 418
Эксперт Python
4581 / 2348 / 602
Регистрация: 26.11.2017
Сообщений: 5,264
Записей в блоге: 3
20.06.2022, 11:35 4
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def get_h(name):
    if name not in tree:
        return 0
    return get_h(tree[name]) + 1
 
 
tree = {}
names = set()
for _ in range(int(input()) - 1):
    child, parent = input().split()
    tree[child] = parent
    names |= {child, parent}
 
for name in sorted(names):
    print(name, get_h(name))
1
3743 / 1938 / 612
Регистрация: 21.11.2021
Сообщений: 3,723
20.06.2022, 21:43 5
eaa, однако сложность здесь у вас уже нелинейная.
0
Эксперт Python
4304 / 1855 / 331
Регистрация: 18.01.2021
Сообщений: 3,421
20.06.2022, 21:52 6
idealist, а если lru_cache добавить?
0
Status 418
Эксперт Python
4581 / 2348 / 602
Регистрация: 26.11.2017
Сообщений: 5,264
Записей в блоге: 3
20.06.2022, 21:54 7
idealist, и что теперь делать?

Добавлено через 2 минуты
Red white socks, зачем?
0
Эксперт Python
4304 / 1855 / 331
Регистрация: 18.01.2021
Сообщений: 3,421
20.06.2022, 21:57 8
eaa, для линейности. Может у кого-то древо от Адама идет.
0
3743 / 1938 / 612
Регистрация: 21.11.2021
Сообщений: 3,723
20.06.2022, 22:03 9
Цитата Сообщение от eaa Посмотреть сообщение
и что теперь делать?
)) Ну, мы же все время как бы за скорость заморачивались...

Цитата Сообщение от Red white socks Посмотреть сообщение
а если lru_cache добавить?
Ну для себя лично я пока эти фишки стараюсь не использовать, как и регулярку, чтобы в чистом питоне попрактиковаться.
0
Эксперт Python
4304 / 1855 / 331
Регистрация: 18.01.2021
Сообщений: 3,421
20.06.2022, 22:09 10
idealist, functools вроде как встроенная библиотека. А код от eaa гораздо прозрачнее. Да и действительно, деревья, для которых ваш код начнет показывать хоть какую-то разницу по времени, вряд ли в природе существуют.
0
3743 / 1938 / 612
Регистрация: 21.11.2021
Сообщений: 3,723
20.06.2022, 22:43 11
Цитата Сообщение от Red white socks Посмотреть сообщение
деревья, для которых ваш код начнет показывать хоть какую-то разницу по времени, вряд ли в природе существуют.
Ну, в природе олимпиадных задач муливарды муливардов таки везде понапиханы!
0
1 / 1 / 0
Регистрация: 23.11.2021
Сообщений: 71
02.10.2022, 13:20  [ТС] 12
Забыл добавить, надо без функции
0
Status 418
Эксперт Python
4581 / 2348 / 602
Регистрация: 26.11.2017
Сообщений: 5,264
Записей в блоге: 3
02.10.2022, 13:34 13
ChaiNZero, сделай без функций
0
Alexarh
02.10.2022, 13:36
  #14

Не по теме:

Ну, хорошо, что хоть спустя 3 месяца вспомнил.

0
1 / 1 / 0
Регистрация: 23.11.2021
Сообщений: 71
02.10.2022, 13:45  [ТС] 15
Странно тогда что я написал это сюда, если сам мог бы написать код, не правда ли?
0
Эксперт Python
4304 / 1855 / 331
Регистрация: 18.01.2021
Сообщений: 3,421
02.10.2022, 21:13 16
ChaiNZero, вам выдали решения idealist и eaa. Да, они рекурсивные. Однако любую рекурсию можно заменить итеративным решением. Например, https://habr.com/ru/post/440178/ или http://www.codenet.ru/progr/other/prbook/gl8.php
Можете также самостоятельно поискать.
Если не получится, то аккурат после Нового года можно вернуться к этому вопросу.
1
1 / 1 / 0
Регистрация: 23.11.2021
Сообщений: 71
03.10.2022, 01:30  [ТС] 17
Спасибо, вы мне очень помогли, не знал, что можно так
0
03.10.2022, 01:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.10.2022, 01:30
Помогаю со студенческими работами здесь

Вывести список покупателей и купленных ими товаров в лексикографическом порядке (файловый ввод/вывод)
Дана база данных о продажах некоторого интернет-магазина. Каждая строка входного файла...

Привести в лексикографическом порядке (в порядке возрастания) все r-размещения с повторениями из элементов множества {1,2, .. n}
Нужно составить программу с указанными входными данными и результатами. Задано натуральное число...

Выведите фамилии всех кандидатов в лексикографическом порядке
Как известно, в США президент выбирается не прямым голосованием, а путем двухуров- невого...

Строка, разделенная пробелами, список слов, отсортированных в лексикографическом порядке
С клавиатуры вводится строка из разделенных пробелами слов. Выведите на экран в строку, разделенную...

Преобразование строки в список слов, которые упорядочены в лексикографическом порядке
Создайте предикат, выполняющий следующее действие над списками и строками. Преобразование строки в...

Программа генерации всех сочетаний n-элементного множества в лексикографическом порядке
Доброе утро. У меня есть массив a:array of integer; Массив может быт больше. (a:array of...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru