![]() |
|
|
![]()
|
|
| gesper |
|
|||
![]() "Shарфик" ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 23.2.2005 Репутация: нет Всего: 2 |
Если глупый вопрос, не судите строго, программы пишу для собственных нужд, а не по работе, и 5 лет на программиста не учился.
Задача вроде простая, но алгоритм тормозной получается. Есть класс с данными, в котором хранятся записи о продукции, название производителя, серия, марка, изделие, и прочие данные по изделию. Т.е. это все идет как таблица с полями. Циклично обходя списко его загружаю в интерфейс пользователя в древовидной форме(treeview). Программа проверяет есть ли производитель среди узлов дерева, если нет, то создает его, есть ли серия продукции в потомках узла, если нет создает его и добавляет туда все изделия. В итоге получается что то типа: -Проект -- --Завод ОАО Печеньки ----Печеньки круглые ----Печеньки квадратные -------Печенька 60х40 -------Печенька 80х80 сладкая и. т.д. Проблема в том, что чтобы обработать записи, когда их уже за 100 это дело весьма заметно долго создается. Добавил в алгоритм запоминание узлов Производитель и Серии, чтобы заново их не искать, если идут подряд записи от одного производителя, но все равно хочется быстрее. Есть какое то оптимальное решение для таких фильтраций списков? Или надо разбивать список на части и в потоки разные запускать? Это сообщение отредактировал(а) gesper - 11.12.2012, 10:30 --------------------
...И приколется обломившийся и oбломится приколовшийся... |
|||
|
||||
| Pavia |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
Нарушены правила построения БД.
http://ru.wikipedia.org/wiki/Нормальная_форма Во-вторых тормозить при 100 не должно. Вот при 100 000 ещё поверю. Как решение отсортировать. Но правильно будет переделать БД. |
|||
|
||||
| gesper |
|
|||
![]() "Shарфик" ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 23.2.2005 Репутация: нет Всего: 2 |
1) Если чесно, то что написано в Wiki, это набор умных слов без характеристики что и как выглядеть должно, а главное почему так. Примеров нет, слова на дело перевести сложно очень. 2) Посмотрел сейчас, 150 записей обрабатываются 3 секунды, визуально это долго выглядит, если убрать построение дерева, и просто все под один узел загонять, списком, то обрабатывается в миг, а как начинаешь структурировать по каталогам, то тормоза. Отказаться от списка общего нельзя, структурировать в дереве данные тоже обязательно нужно. Ладно, буду искать... 3)Но правильно будет переделать БД. Это вобще по факту не БД, а Класс языка программирования (ObjectList). От использования БД отказался сразу из-за некоторых особенностей их применения. Это сообщение отредактировал(а) gesper - 11.12.2012, 11:13 --------------------
...И приколется обломившийся и oбломится приколовшийся... |
|||
|
||||
| DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: нет Всего: 19 |
Хм... как бы попроще объяснить. Есть два способа построения дерева - обходом в глубину и в ширину.
В глубину - идём по одной ветке до конца пока не дойдём, в ширину - строим по уровням(сначала 1-й, потом 2-й и т.д.). Что лучше зависит от задачи. Алгоритмы построения дерева по сути рекурсивные, то что делаете вы будет действительно медленно работать. Лучше всего нормально организовать систему классов, чтобы можно было как-то строить узлы без проблем, т.е. по сути классы должны отражать дерево. Тогда можно будет делать обход дерева. P.S. У меня в дереве строится наверное 1000 узлов и где-то около того же компонентов на форме в зависимости от дерева итого 4 секунды на всё про всё уходит со всеми перестройками и алгоритмами вычисления. -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
|||
|
||||
| DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: нет Всего: 19 |
//что за странный дубль затесался
Это сообщение отредактировал(а) DarkProg - 11.12.2012, 19:06 -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
|||
|
||||
| Pavia |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
Вы отказались не от БД, а от СУБД. И начале городить свою на классах. Об этом и речь. Структур надо было придумывать сразу при конструирование БД. На данный момент вы решаете проблему структурирования. При этом вы её выполняете каждый раз при загрузке программы. А должны были сделать это один раз при вводе данных в БД. И более того вы используете довольно не оптимальный способ структурировать. Каждый раз выполняя обход дерева при добавления новой записи. Но даже при этом у вас где-то косяк, так как эта операция должна выполняться раз в 100-1000 быстрее. Сделайте сортировку и вы за один проход по списку сможете добавить свои записи в дерево не бегая по всему дереву а добавляя их в порядке обхода.
Просто убрать дублирование данных и убрать лишние связи. Организовать упорядоченные данные для быстрого обращения к ним. |
||||
|
|||||
| gesper |
|
|||
![]() "Shарфик" ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 23.2.2005 Репутация: нет Всего: 2 |
Очень понятно обьяснил Я понял. Правда организацией структуры я как раз и занимался, поскольку имеющийся вариант был для меня оптимальным, чтобы программа выполняла расчеты с использованием данных из списка изделий и подбора изделий. Списком быстрее, чем дерево лопатить с отдельными классами, но вот при создании менеджера управления самой БД, где то ошибся, буду искать. Pavia, DarkProg, за теорию спасибо --------------------
...И приколется обломившийся и oбломится приколовшийся... |
|||
|
||||
| DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: нет Всего: 19 |
Не за что, главное чтобы в конечном итоге вышел толк. -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |