2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Поисковое дерево
Сообщение14.02.2009, 11:05 
Найти все пути длины h, соединяющие листья дерева (h – высота дерева). Среди корней этих путей выбрать те, которые расположены на максимальной глубине, и удалить (правым удалением) тот из них, который является средним по значению.

Помогите построить алгоритм действия. Вся сложность состоит втом, что путь длины h, а не максимальный или минимальный

 
 
 
 
Сообщение14.02.2009, 12:53 
Аватара пользователя
Я так понимаю, путь не должен проходить дважды через одно и то же ребро?

Тогда здесь поиск в ширину должен помочь. Учитывая, что в дереве путь от любой вершины до любой другой единственен, достаточно найти множество листов, доступных за h шагов.
Перед каждым шагом у нас есть множество текущих вершин, множество посещённых вершин и (оставшиеся) множество непосещённых вершин.
На шаге рассматриваем все непосещённые вершины, делаем их текущими, а текущие делаем посещёнными.
На h-м шаге у нас будет множество вершин, доступных за h шагов (=путей длины h). Выбираем из них листы, дальше простой перебор.

 
 
 
 
Сообщение17.02.2009, 13:48 
Спасибо за ответ, но видимо Вы недопоняли условие. Вообще нужно это сделать за два прохода дерева. Алгоритмы я нашел, но все они порядка
Код:
n^2
. Хотел по меньше сложность найти(n-колличество вершин)

 
 
 [ Сообщений: 3 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group