Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 19.02.2015
Сообщений: 5

Дерево, вычисление максимального пути

26.04.2016, 14:21. Показов 803. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Необходимо, чтобы программа высчитывала длину максимальной цепочки в дереве, при этом проходящий через заданное множество вершин. Дерево бинарное. Код для вычисления максимального пути прилагаю.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(defun glubina(tree)
   (cond ((NULL tree) 
           0)
         ( T 
           (+ 1 (max (glubina (cadr tree)) (glubina(cddr tree))))) 
   
   )
)
 
(defun way(tree spisok)
   (cond ((NULL tree)
            spisok)
         ( ( > (glubina (cadr tree)) (glubina (caddr tree)))
            (way (cadr tree) (append spisok (list(car tree)))))
         ( T
           (way (caddr tree) (append spisok (list(car tree)))))
   )
)
 
 
(defun test ()
 (way '(a (b (d) (e)) (c (g (h (i)) (k)))) '())
)
Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.04.2016, 14:21
Ответы с готовыми решениями:

Иерархическое дерево. Начало пути
Здравствуйте!!! Я перерыл много учебников и форумов и везде пишут о бинарных деревьях. В них я более менее разобрался, а вот как создать...

Бинарное поисковое дерево. Максимальные пути
Помогите пожалуйста! Не знаю как реализовать одну функцию :( Есть задачка: Найти вершины, через которые проходят пути максимальной...

Как по пути строить дерево TreeView?
есть код который создает файл с путями public static void FoldersToFile(string folder, string fileResult) { TextWriter tw =...

7
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
26.04.2016, 16:03
Хочу уточнить: цепочки идут от корня к листьям?
0
0 / 0 / 0
Регистрация: 19.02.2015
Сообщений: 5
26.04.2016, 16:14  [ТС]
да, от корня к листьям
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
26.04.2016, 17:02
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
;; Перечисление всех путей двоичного дерева:
 
(defun all-path (tree &optional (p nil) (r nil))
  (cond ((and (null (car tree)) (null (caddr tree))) (append r (list (append p (list (cadr tree))))))
        (t (let ((rp (if (car tree) (all-path (car tree) (append p (list (cadr tree))) r) nil))
                 (lp (if (caddr tree) (all-path (caddr tree) (append p (list (cadr tree))) r)) nil))
           (append rp lp)))))
 
;; Поиск среди них путей максимальной длины
 
(defun max-len-path (tree)
  (let* ((all-p (all-path tree))
         (max (apply 'max (mapcar 'length all-p))))
    (remove-if (lambda (p) (< (length p) max)) all-p)))
 
(max-len-path '(((nil c nil) a ((nil g nil) d nil)) r ((nil e (nil h nil)) b (nil f nil)))) 
 
==> ((r a d g) (r b e h))
Изображения
 
0
0 / 0 / 0
Регистрация: 19.02.2015
Сообщений: 5
26.04.2016, 17:38  [ТС]
Большое спасибо
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
26.04.2016, 18:25
Цитата Сообщение от Eruc Посмотреть сообщение
Большое спасибо
Вы бы хоть читали, что вам пишут. Где там «заданное множество вершин»?

А вы правда не можете решить эту задачу? Если детей нет, а заданные вершины есть, вернуть nil или какой там будет признак отсутствия пути. Если дети есть, выкинуть корень из множества требуемых вершин, и применить функцию к детям с уменьшенным списком вершин. Если при этом для всех детей будет неудача, вернуть неудачу. Если же для некоторых детей будет возвращена длина цепочки, выбрать самую большую, прибавать 1 и вернуть. По-моему, ясно как день.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
26.04.2016, 18:49
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
;; небольшой довесок:
 
(defun task (tree setv)
  (let ((p (max-len-path tree)))
    (car (remove-if-not (lambda (x) (every (lambda (y) (member y x)) setv)) p))))
 
==> task
 
(task '(((nil c nil) a ((nil g nil) d nil)) r ((nil e (nil h nil)) b (nil f nil))) '(b e)) 
 
==> (r b e h)
 
(task '(((nil c nil) a ((nil g nil) d nil)) r ((nil e (nil h nil)) b (nil f nil))) '(a d)) 
 
==> (r a d g)
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
26.04.2016, 18:54
Цитата Сообщение от helter Посмотреть сообщение
А вы правда не можете решить эту задачу? Если детей нет, а заданные вершины есть, вернуть nil или какой там будет признак отсутствия пути. Если дети есть, выкинуть корень из множества требуемых вершин, и применить функцию к детям с уменьшенным списком вершин. Если при этом для всех детей будет неудача, вернуть неудачу. Если же для некоторых детей будет возвращена длина цепочки, выбрать самую большую, прибавать 1 и вернуть. По-моему, ясно как день.
Бред написан. Или нет? Я засомневался в этом алгоритме.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.04.2016, 18:54
Помогаю со студенческими работами здесь

Бинарное поисковое дерево. Максимальные пути
Помогите пожалуйста! Есть задачка: Найти вершины, через которые проходят пути максимальной длины, и удалить (правым удалением) самую...

Нахождение стоимости максимального пути
в файл вводится двумерный массив (например такой 4 5 6 8 6 4 3 1 8 9 5 3 3 5 6 3 ) и его размерность. программа должна...

Графы. Нахождение максимального пути
Добрый день. Пытаюсь написать программу для помощи в криптоанализе методом двойной перестановки и столкнулся с проблемой. Изложу суть...

Задача о нахождении максимального пути в графе
Помогите пожалуйста, я нашла кратчайший путь, воспользовалась алгоритмом Беллмана — Форда. Взяла соответствующим полукольцом...

Поиск максимального пути с использованием динамики
Дан неориентированный, связный, невзвешенный граф. Дано n вершин графа. Через каждую вершину можно проходить не более 1 раза. Необходимо...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru