Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Форум .::NoWa.cc::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Моделирование программ

Уважаемые пользователи nowa.cc. Мы работаем для вас более 20 лет и сейчас вынуждены просить о финансовой помощи по оплате за сервер.
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: Z021474945171 Webmoney WME: E159284508897 Webmoney WMUSDT: T206853643180
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!

Ответ
 
Опции темы Опции просмотра Language
Старый 18.11.2008, 11:21   #1
Постоялец
 
Пол:Мужской
Регистрация: 27.02.2008
Сообщений: 215
Репутация: 51
По умолчанию Хранение промежуточных данных при обходе дерева

Есть задача обойти ветки дерева, начальные данные хранятся в виде таблицы из двух колонок (узел1 - Узел2).
Вопрос заключается в том, как лучше хранить данные по каждой ветки в процессе обхода всего дерева. Так что б можно было оперативно получить информацию о узлах и их количестве.

Добавлено через 1 минуту
п.с. если что, реализовыватся будет на делфи.

Последний раз редактировалось sashulyT; 18.11.2008 в 11:22.. Причина: Добавлено сообщение
sashulyT вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама: asus prime b650m aку москвич - RedKassa.ruруки вверх бар концерты - redkassa.ruМебельный магазин: кресло кентукки - Переходи на сайт!vk discord


Старый 08.12.2008, 05:35   #2
stcherny
Неактивный пользователь
 
Регистрация: 08.12.2008
Сообщений: 5
Репутация: 2
По умолчанию Re: Хранение промежуточных данных при обходе дерева

Посмотри:
http://algolist.ru/ds/walk.php
stcherny вне форума
 
Ответить с цитированием Вверх
Старый 08.12.2008, 20:57   #3
minimus
Неактивный пользователь
 
Аватар для minimus
 
Пол:Мужской
Регистрация: 08.05.2008
Адрес: Брест
Сообщений: 45
Репутация: 14
По умолчанию Re: Хранение промежуточных данных при обходе дерева

Цитата:
Сообщение от sashulyT Посмотреть сообщение
Есть задача обойти ветки дерева, начальные данные хранятся в виде таблицы из двух колонок (узел1 - Узел2).
Вопрос заключается в том, как лучше хранить данные по каждой ветки в процессе обхода всего дерева. Так что б можно было оперативно получить информацию о узлах и их количестве.

Если ты имеешь дело с базой данных, то хранить промежуточные результаты нет необходимости. Вот реально работающий код для SQL Server (полный файл):
Код:
USE [MainBase]
GO
/****** Объект:  UserDefinedFunction [dbo].[EvalUnitsLevels]    Дата сценария: 23/11/2007 18:12:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:	      Константин Леонов
-- Create date: 23.11.2007
-- Description:  Сканирование входящих узлов на всех уровнях.
-- =============================================
CREATE FUNCTION [dbo].[EvalUnitsLevels](@Drawing [varchar](100), @Name [varchar](200))
RETURNS 
 @retUnits TABLE 
(
	Drawing [varchar](100), 
	[Name] [varchar](200),
    Usage int
)
AS
BEGIN
	WITH MasterUnits(Drawing, [Name], Usage) AS
    (
       SELECT lst.Drawing, lst.[Name], 1 as Usage
       FROM [Production].[List] lst
       WHERE (lst.Drawing = @Drawing) AND (lst.[Name] = @Name)
       UNION ALL
       SELECT pl.SlaveDrawing as Drawing, pl.SlaveName AS [Name], (pl.[Usage] * mu.Usage)
       FROM [Production].[ListSlave] pl
         INNER JOIN MasterUnits mu
         ON (pl.Drawing = mu.Drawing) AND (pl.[Name] = mu.[Name])
    )
    INSERT @retUnits
    SELECT Drawing, [Name], SUM(Usage) AS UUsage
    FROM MasterUnits
    GROUP BY Drawing, [Name]
    ORDER BY Drawing, [Name]
	RETURN 
END
Примечание:
1. Каждый узел задаётся парой полей ("Чертёжный номер", "Наименование"), соответственно связка - двумя парами полей. Надеюсь тебе не составит труда переделать под свою задачу;
2. Количество узлов - Usage. Понятно, что для корня Usage = 1;
3. Код работает для любого уровня вложенности узлов (если узел С входит в узел А, а также ещё один узел С входит в узел В, а узел В входит в узел А, то на выходе мы получим А=1, В=1, С=2);
4. Параметры функции (возвращающей таблицу) нужны для привязки к "родительскому" узлу через параметры SQL в Delphi или Visual Studio
5. По условиям задачи (моей) все узлы равноправны и хранятся в одной куче (таблице (List)), т.к. могут поставляться как самостоятельно, так и в составе других узлов. Во вспомогательной таблице (ListSlave) хранятся связи с "дочерними" узлами первого уровня. Узлы всех уровней расчитываются с помощью вышеуказанной функции.

Картинки:


Связка List->ListSlave


Связка List->EvalUnitsLevels

Добавлено через 19 минут
Если интересно, можем поговорить о том, как не дать юзеру создать циклическую ссылку при таком раскладе ...
__________________
Денег, информации и патронов не бывает слишком много!

Последний раз редактировалось minimus; 08.12.2008 в 21:16.. Причина: Добавлено сообщение
minimus вне форума
 
Ответить с цитированием Вверх
Старый 09.12.2008, 08:15   #4
sashulyT
Постоялец
 
Пол:Мужской
Регистрация: 27.02.2008
Сообщений: 215
Репутация: 51
По умолчанию Re: Хранение промежуточных данных при обходе дерева

minimus, картинки не отображаются
sashulyT вне форума
 
Ответить с цитированием Вверх
Старый 09.12.2008, 14:12   #5
minimus
Неактивный пользователь
 
Аватар для minimus
 
Пол:Мужской
Регистрация: 08.05.2008
Адрес: Брест
Сообщений: 45
Репутация: 14
По умолчанию Re: Хранение промежуточных данных при обходе дерева

Цитата:
Сообщение от sashulyT Посмотреть сообщение
minimus, картинки не отображаются

Странно! У меня отображаются ...
Если интересно посмотреть на картинки, а в данном контексте это действительно должно быть интересно , то вот тебе прямые ссылки на картинки:

List->ListSlave: http://i279.photobucket.com/albums/k...nitsLevels.jpg

List->EvalUnitsLevels: http://i279.photobucket.com/albums/k.../ListSlave.jpg

P.S. Извини, что перепутал названия картинок, когда сохранял ...
__________________
Денег, информации и патронов не бывает слишком много!
minimus вне форума
 
Ответить с цитированием Вверх
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компьютерный корпус из дерева ВадимАчка Домашний умелец 19 07.01.2017 19:26
проблемы с открытием дерева каталогов xennm Windows XP 4 04.02.2010 21:19
как представить информацию, кроме как в виде бинарного дерева? Tuco Скорая помощь 2 16.03.2009 15:05

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

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

Быстрый переход


Текущее время: 07:26. Часовой пояс GMT +3.


Copyright ©2004 - 2026 NoWa.cc

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.04744 секунды с 13 запросами