Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];

Вниз

Есть дерево. Но не бинарное. :)   Найти похожие ветки 

 
Sat7   (2002-04-12 11:59) [0]

Кто предложит оптимальную древовидную структуру для хранения (извиняюсь за каламбур) структуры директорий на винте и их поиска?
Задачка сводится к следующему: спроектировать класс, который хранит в себе структуру каталогов винта и функции их поиска. Единственное условие - поиск нужной директории в структуре должен идти рекурсивно. Я все-таки склоняюсь к связному списку, но здесь есть некоторые трудности. У бинарного дерева две ветки - правая и левая, по нему легко пройтись рекурсией. А обход дерева каталогов...
Подскажите, если кто-то имел с этим дело.


 
Anatoly Podgoretsky   (2002-04-12 12:09) [1]

Используй двухсвязный список, поля prev, next можешь назвать right, left


 
Alx2   (2002-04-12 12:12) [2]

Связный список веток в глубину. мультидерево такое вот.


 
Виктор Щербаков   (2002-04-12 12:12) [3]

Может поможет:
http://algolist.manual.ru/ds/index.php


 
vovochka   (2002-04-12 12:17) [4]

TNode = record
Parent:TNode;
prev,next:TNode;
FirstChild,LastChild:TNode;

......

end;
У?


 
Бурундук   (2002-04-12 12:17) [5]

А почему всё-таки не бинарное? (firstchild, nextbrother)


 
Sat7   (2002-04-12 12:29) [6]

vovochka © (12.04.02 12:17)

примерно то же самое я и делал.
Работает медленно, а именно в данном случае скорость очень важна...


 
vovochka   (2002-04-12 12:36) [7]

А где были тормоза?
HASH пробывал?


 
Sat7   (2002-04-12 12:45) [8]

vovochka © (12.04.02 12:36)

Проблема в том, что поля parent, FirstChild и LastChild- чуть-чуть не то. Я ведь не знаю заранее сколько поддиректорий будет в директории, т.е. чтобы узнать это мне нужно их все перебрать и посмотреть, parent нужный или нет. Вот здесь тормоза и есть.


 
Игорь Шевченко   (2002-04-12 12:58) [9]

День добрый,

А TStringList не подходит, у которого в Objects для каждого каталога находится аналогичный TStringList с подкаталогами и так далее... ?

С уважением,


 
vovochka   (2002-04-12 13:28) [10]

2Sat7

Чёто я тебя совсем непонимаю.
По-моему это один из самых лучших вариантов. Что-то типа однонаправленного графа.
Где будут тормоза: при создании, поиске или где?


 
Sat7   (2002-04-12 14:01) [11]

vovochka © (12.04.02 13:28)

Давай более общий случай рассмотрим. Представь, что тебе нужно сначала заполнить дерево, а потом посчитать сумму в узлах дерева, обойти все эти узлы. Но не обычного дерева - "Радость первокурсника", а дерева, у которого из одного узла отходит не две ветки, а заранее неизвестно сколько. Получается, что у нас есть: деревце, в узлах которого находятся значения, общую сумму которых нужно посчитать, и, собственно, узлы, из которых отходит несколько веток. Сколько веток будет - до заполнения не знаешь. Как ты станешь делать заполнение и обход узлов (подсчет суммы)?


 
vovochka   (2002-04-12 14:19) [12]

Ля, это просто список типа "радост первокурсника"! Обходишь все узлы по рекурсии и всё!

будет что-то типа:

function Calc(n:TNode):integer;
var
pc:TNode;
begin
result:=0;
pc:=n.FirstChild;
while pc<>nil do
begin
result:=result+pc.value;
if pc.FirstChild<>nil then result:=result+Calc(pc);
pc:=pc.next;
end;
//По моему всё должно работать.
end;

Так надо или мы друг друга непонимаем?


 
Бурундук   (2002-04-12 14:21) [13]

Любое дерево можно преобразовать в бинарное.
Собственно, в таком виде, как это предлагает vovochka ©
оно уже бинарное
(От каждого узла дерева отходят две ветки - FirstChild и Next).



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
1-80902
Кулюкин Олег
2002-04-15 09:12
2002.04.25
ручная отрисовка ListView, проблемма при изменении ширины столбца


1-80944
budhha
2002-04-10 22:56
2002.04.25
Поле record


1-80840
Jaxtor
2002-04-11 11:35
2002.04.25
Закрытие формы MDIChild программным методом


7-81091
CAHEK
2001-10-19 20:52
2002.04.25
Войти в Win2k под определённым юзером


14-81051
lipskiy
2002-03-19 19:16
2002.04.25
Как точно отследить сумму времени, проведенную в инете?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский