IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Обход иерархического дерева вниз., дерево из QTreeWidgetItem
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 222
Пол: Мужской
Реальное имя: Andrew

Репутация: -  0  +


Как всегда рассчитываю на помощь volvo smile.gif
Есть дерево, в нем возможны 3 элемента
3. Элемент типа 1003 - критерий, у этого элемента есть некоторое значение.
2. Элемент типа 1002 - это подгруппа (т.е. у неё есть род. группа) и она содержит только элементы типа 1003, у неё есть значение(вес).
1. Элемент типа 1001 - Группа верхнего уровня (в неё входят либо только элементы 1002 - подгруппы, либо только элементы 1003 - критерии), у него есть значение(вес).

Глубина/вложенность дерева может быть бесконечно глубокой.

Какой проход необходимо реализовать :
1. Необходимо подсчитать значениях все элементов 1003. (значение_критериев_группы)
2. Умножить значение элементов группы на родительскую группу. (значение_группы или значение_подгруппы)
2.1 Если эта группа вложена в другую группу(т.е. является подгруппой) необходимо умножить её значение на значение родительской группы
3. И так , пока не дойдем до корня.
Вот пример изображения на картинке, как элементы взаимодействуют с собой(это QTreeWidget).
Изображение

Я набрасал логику алгоритма в текстовом блокнотике в виде "псевдокода", хотелось бы что бы мне помогли понять, правильно ли я понял алгоритм
Код
Подсчитать группы, для этого нужен рекурсивный алгоритм обхода дерева групп критерией :
        //Берем список топ-левел айтемов.
        //для каждого айтема этого списка
        //обнулить : значение_группы, значение_критериев_подгруппы, значение_критериев_группы.
        //получаем список его чилдов
          //функция_1(список айтемов) :
            //для каждого из списка
            //если тип айтема 1001(группа, у неё есть подгруппы либо только критерии) получаем количество его чилдов если оно >0 (это исключит пустые группы)
                //получаем список чилдов.
                  //вызываем функция_1 для этого списка.
                //если значение_критериев_подгруппы != 0 (Значит была подсчитана подгруппа)
                    // значение_группы+=вес_группы*значение_подгру
ппы.
                //иначе (значит не было подгрупп)
                    // значение_группы+=вес_группы*значение_критер
иев_группы
            //иначе если тип айтема 1002(подгруппа) получаем количество его чилдов если оно >0 (это исключит пустые группы), все его чилды 100% критерии
                //для каждого критерия(чилда)
                    //если его значение !=0
                        // значение_критериев_группы+=взвешенное_знач
ние_критерия_по_году_рейтинга
                // значение_подгруппы=вес_подгруппы*значение_
ритериев_группы
            //иначе если тип айтема 1003(критерий) то мы нашли критерий и для него (иначе это пустая группа, но этого лучше не допускать)
                //если его значения !=0 (но этого тоже лучше не допускать)
                    // значение_критериев_группы+=взвешенное_знач
ние_критерия_по_году_рейтинга
        //значение верхней группы+=вес_верхней_группы*значение_группы.

Но проблема в том, что в Qt (4.7.1) нельзя просто получить список детей элемента(только итерировать по ним, либо получить, но они удаляться из виджета/айтема). Я попробую написать алгоритм, но прощу помощи здесь, вдруг что-то упустил..

Сообщение отредактировано: Andrewshkovskii -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.04.2024 19:24
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name