Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2014, 14:27   #21
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

ИМЕННО:
делаем обязательные и часто используемые быстрые операции типа добавления и удаления
при желании добавляем медленные и запускаемые по желанию операции типа сборка мусора/упаковка/сжатие.

НО! после упаковки повторное использование идентификаторов потребует МЕДЛЕННОЙ и частой если удалили много(!) вставки в произвольное место массива.
Либо реализации и использования ОТДЕЛЬНОЙ процедуры сортировки (опять же медленной).
Чтобы можно было обеспечить быстрый поиск.

Цитата:
Чего то мне это не нравится.
Если не боимся замедления работы при добавлении/удалении то сжатие (ТОЧНЕЕ переупорядочивание после сжатия/добавления) можно проводить и постоянно.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 03.10.2014 в 14:33.
evg_m вне форума Ответить с цитированием
Старый 03.10.2014, 15:04   #22
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Опять вопрос - почему именно обязательно массив?
waleri вне форума Ответить с цитированием
Старый 03.10.2014, 17:31   #23
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Товарищи, вы зашли не в ту степь. Для дерева в БД лучше посмотреть какую-либо практическую реализацию иерархических запросов, вроде connect by/start with в Oracle. В этом случае рекурсию выполняет сервер, но данные хранятся в естественном виде. На других СУБД при наличии индекса легко сэмулировать рекурсию с клиента.

Если же БД необязательна, стоит обратить внимание в сторону двоичных деревьев или двоичных деревьев поиска.

В силу своей природы иерархические данные не могут иметь числового индекса, это ведь не массив! Данные в дереве всегда адресуются по ключам -- и в БД, и в двоичных деревьях.
Vapaamies вне форума Ответить с цитированием
Старый 03.10.2014, 22:24   #24
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Опять вопрос - почему именно обязательно массив?
Это вовсе не обязательно. Я просто пытаюсь сначала имитировать работу в программе, отладить все, найти подводные камни и если взлетит, перенести на БДшечку. Что предлагаете Вы?
Цитата:
В силу своей природы иерархические данные не могут иметь числового индекса, это ведь не массив!
Поэтому я и ввел искусственные идентификаторы, чтобы не зависить от реализации.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 04.10.2014, 03:25   #25
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Поэтому я и ввел искусственные идентификаторы, чтобы не зависить от реализации.
Они должны быть уникальны и отсортированы, то есть представлять собой настоящий ключ. В двоичном дереве сортировка выполняется реализацией дерева, в БД -- СУБД, где используется разновидность двоичных деревьев.
Vapaamies вне форума Ответить с цитированием
Старый 13.10.2014, 20:24   #26
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Всем спасибо за участие в теме. Появился другой вопрос смежного характера (решил не плодить темы). Суть в операции перемещения. Итак требуется переместить одну ветвь дерева в другую. Естественно может возникнуть ситуация когда в дочернюю ветвь пытаются перенести предка и это вызовет бесконечное создание ветвей (вот раньше такое можно было наблюдать в первых версиях Norton Commander).
Вопрос:
Могу ли я теоретически, разбирая только путь и не проверяя физически все соответствующие узлы, проверить такую ситуацию. Чисто интуитивно чувствую что да, достаточно проверить что все узлы копируемой ветви полностью повторяют (и/или короче) приемника.
Например:
c:\1 --> c:\1\2
Проводник будет ругаться Чисто бездоказательно я тоже. Так можно ли проводить проверку путей не касаясь самих узлов? Очевидно что символическая проверка путей быстрей и проще в реализации...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 13.10.2014 в 20:27.
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с деревьями Alexey_kor Общие вопросы C/C++ 0 29.04.2012 19:14
Работа с двоичными деревьями. Maksik Фриланс 4 22.06.2010 22:01
Рисонок домика с деревьями!!! Cheerful-mermaid Помощь студентам 5 08.04.2009 22:32
Работа с деревьями и строками Михаил_1987 Помощь студентам 1 27.01.2009 17:12