у меня есть дерево из нескольких тысяч узлов, украшено логических атрибутов, что-то вроде этого (атрибуты в скобках):Сокращение дерева атрибутов
Root (x=true, y=true, z=false)
Interior 1
Leaf 1 (x=false, z=false)
Leaf 2 (x=false, y=false, z=false)
Interior 2
Leaf 3
etc.
То, что я хотел бы сделать, это найти наименьшее количество украшений необходимо сохранять значения атрибутов, учитывая следующие ограничения/Информация:
- атрибуты наследуются дочерними узлами
- только результирующие атрибуты узлов листа являются важными (включая унаследованные атрибуты). Поэтому, если установка атрибута «по умолчанию» на внутреннем узле позволяет мне сбросить кучу атрибутов на своих дочерних элементах, это нормально.
- В нашей модели есть стенография для установки всех атрибутов как истинных, так и ложных. Например,
(x=false,y=false,z=false)
может быть представлен одним декоратором, тогда как(x=false,y=false,z=true)
займет три. - Число дочерних узлов будет значительно превышать внутренние узлы (не менее 25 до 1)
- Исходное состояние дерева будет иметь много избыточности.
- Я использую Java и добавление внешнего lib для решения этой проблемы не имеет большого значения.
Эти ограничения не являются гибкими, поскольку я работаю над уровнем интеграции с большой корпоративной системой, поэтому все, что я могу сделать, это попытаться свести к минимуму количество значений атрибутов, которые мы должны хранить и передавать.
Я думаю, что ограничение №3 бросает меня за цикл, потому что без него я могу просто разобраться с каждым атрибутом индивидуально, что просто (и я уже реализовал решение этого, прежде чем я понял, что пришло больше атрибутов).
Надеюсь, это достаточно описательно, чтобы дать общую картину проблемы. При необходимости я могу привести больше примеров или информации. Спасибо!
В чем вопрос? –
Вам не нужен абсолютно * самый маленький * номер, не так ли? –
@MelNicholson: Вопрос в том, какой алгоритм приведет к наименьшему количеству украшений. Я надеялся, что это было сведено к известной проблеме, которую я не видел, или что это на самом деле очень просто, и я просто плотный :) –