Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 12.02.2010, 13:25   #1
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

если я правильно понял 3й пункт это некоторое подобие treeview.
памяти жрать будет немеряно..
писалось на коленке..

delphi Код:
Tnode=class   ParentNode : Tnode; //откуда пришли.   CHildNodes : tlist; //куда можем пойти   Prop1:string; //одно из свойств этой вершины.   constructor create(SetParent:Tnode);   destructor destroy; override; end; constructor tnode.create; begin   childnodes := tlist.create;   if ParentNode <> nil then     ParentNode.CHildNodes.add(self); //если есть парент - добавляем себя в список его чайлдов end; destructor tnode.destroy; begin   if ParentNode <> nil then     ParentNode.CHildNodes.remove(self)//убираем себя из списка чайлдов парента   while CHildNodes.count > 0 do     Tnode(childnodes.items[0]).destroy; //уничтожаем все дочерние узлы   childnodes.destroy; end;

использование (конечно же следует делать рекурсией)
delphi Код:
var   TopLevel, CurrentParent: tnode;   i : integer; begin   TopLevel := tnode.create(nil);   toplevel.prop1 := 'Верхний узел';   CurrentParent := tnode.create(toplevel);   CurrentParent.prop1 := 'Узел вложенный в верхний узел'   CurrentParent := tnode.create(toplevel);   CurrentParent.prop1 := 'Второй узел вложенный в верхний узел'   CurrentParent := tnode.create(toplevel);   CurrentParent.prop1 := 'Третий узел вложенный в верхний узел'   CurrentParent := tnode.create(CurrentParent);   CurrentParent.prop1 := 'Узел вложенный в третий узел вложенный в верхний узел';   while i < toplevel.childnodes do   begin     showmessage(Tnode(toplevel.childnodes.items[i]).Prop1); //показываем свойство всех дочерних узлов верхнего узла     inc(i);   end;   TopLevel.destroy; //разрушение топлевела и всех его дочерних уровней с их дочерними уровнями end;

сохранение и загрузку можно делать в tnode.create/tnode.destroy передавая туда скажем файлстим как параметр.
т.е. при создании нода он будет читать с файлстрима а при разрушении писать туда свои свойства и только тогда приступать к разрушению дочерних нодов.
кол-во дочерних узлов в каждом узле не должно превышать maxint (довольно большое значение)

Добавлено через 38 минут
проверил.
у меня макс кол-во вершин в графе составило 52022554. дальше - закончилась память выделяемая приложению ~2гб. сурсы проверялки прикрепил. -)

Добавлено через 13 минут
можно использовать LargeAddressAware (или 4гбпатч) чтобы на 64битных машинах вместо 2гб памяти выделялось 4. что увеличит в 2 раза кол-во овзможных нодов.
Вложения
Тип файла: rar test.rar (1.4 Кб, 21 просмотров)
__________________
L2Ext - project closed.

Последний раз редактировалось alexteam, 12.02.2010 в 13:28. Причина: Добавлено сообщение
alexteam вне форума   Ответить с цитированием
За это сообщение alexteam нажился спасибкой от:
Старый 13.02.2010, 02:01   #2
Местный
 
Аватар для peacefully
 
Регистрация: 21.10.2009
Сообщений: 690
Сказал Спасибо: 125
Имеет 180 спасибок в 68 сообщенях
peacefully пока неопределено
По умолчанию

Мм.. познавательно, надо переварить.. такая топология точнее отражает реальность, а для исследования это важно. Аналогия с тривью действительно прямая, точн, спасибо))

Там вся трабла с тем, что число вершин по времени растет по N^(yt) закону, очень резко. Потому и теоретически, и практически (мои наработки по первым двум пунктам) показывают, что не всегда больше 15к вершин можно достигнуть, прежде чем память забьется. Максимально пока что получилось 67.5 тыщ нащупать. Потому хоть и тяжелее вершины, но зато красивее, чем матрицы и списки.

Цитата:
Сообщение от alexteam Посмотреть сообщение
проверил.
у меня макс кол-во вершин в графе составило 52022554. дальше - закончилась память выделяемая приложению ~2гб. сурсы проверялки прикрепил. -)
Да, кушает неплохо байт на вершину..)
peacefully вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 15:35.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!