рекурсивный разбор деревьев в matlab - PullRequest
0 голосов
/ 22 октября 2018

У меня есть карта, где мои ключи - родители, а соответствующие значения - дети указанных родителей.Эта карта может расширяться на n-глубину, если это необходимо.Карта выглядит так:

K>> obj.hierarchy

ans = 

  Map with properties:

        Count: 3
      KeyType: char
    ValueType: any

K>> obj.hierarchy.keys

ans =

  1×3 cell array

    'Alpha'    'Bravo'    'Charlie'

K>> obj.hierarchy('Charlie')

ans = 

  1×1 string array

    'Alpha'

K>> obj.hierarchy('Alpha')

ans = 

  1×2 string array

    'Delta'    'Echo'

В этом случае Альфа - дитя Чарли, а Альфа имеет двухлистных детей Дельта и Эхо.У меня есть следующий рекурсивный код, который анализирует это дерево и печатает дерево последовательно:

    %recursively parse hierarchy
    function data = parseHierarchy(obj, parentName, name)
        map = obj.hierarchy;
        disp(name)
        %we are at a portfoio with no children
        if ~any(strcmp(map.keys,name))
           return
        else
            positions = map(name);
            for i=1:numel(positions)
                positionName = positions{i};
                obj.parseHierarchy(name, positionName);
            end  
        end
    end

Моя цель - вызвать эту функцию для любого данного узла в этом дереве и агрегировать значение листьев для корневого узла.Например, Delta имеет ассоциированное значение 10. Я хочу довести это значение до его родительского элемента Alpha, умножить его на некоторый скалярный вес и повторять этот процесс, пока я не смогу идти дальше.Этот процесс позволит мне получить взвешенный вклад Дельты в корневой узел, Чарли.

У меня проблемы с разработкой изменений в моей рекурсивной логике.Я хочу хранить это в идеальной структуре структур, но я не уверен, возможно ли это.Любая помощь приветствуется!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...