![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
Andrewshkovskii |
![]() ![]()
Сообщение
#1
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 222 Пол: Мужской Реальное имя: Andrew Репутация: ![]() ![]() ![]() |
Как всегда рассчитываю на помощь volvo
![]() Есть дерево, в нем возможны 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 - 27.12.2010 1:25 |
![]() ![]() |
![]() |
Текстовая версия | 28.07.2025 9:15 |