2014-01-19 2 views
0

У меня есть 50 (больших) деревьев решений, которые в настоящее время сериализуются (в предварительном порядке) как отдельные длинные строки. Все строки непосредственно хранятся в файле декларации .cpp, чтобы избежать необходимости читать их из файла во время выполнения. Таким образом, во время выполнения вызывается функция, которая десериализует каждую строку и строит ее соответствующее дерево решений с использованием стандартного рекурсивного процесса. Впоследствии набор признаков (вектор двойников) выпадает из каждого дерева решений и выводится предсказание класса. A la Random Forest, принимается большинство голосов и принимается окончательный класс.Хранить дерево объекта непосредственно в источнике, чтобы избежать роста во время выполнения

Я попытался оптимизировать код и обнаружил, что перестройка этих больших деревьев занимает большинство (~ 98%) моего времени выполнения. Таким образом, я хотел спросить, есть ли какой-либо способ жестко кодировать весь объект дерева в файл декларации .cpp. Таким образом, вместо того, чтобы повторно строить деревья во время выполнения, объекты дерева уже доступны для прохождения во время выполнения.

+0

Я бы с удовольствием отредактировал мое сообщение и предоставил больше кода по запросу, но сам код стал довольно сложным и может выходить за рамки моего вопроса. – slaw

+0

Считаете ли вы Cap'n proto - http://kentonv.github.io/capnproto/ – tumdum

+0

@ TomaszKłak: К сожалению, мой босс хочет, чтобы решение было полностью автономным. Спасибо за предложение. Я буду помнить о других проектах! – slaw

ответ

0

У вас есть доступ к C++ 11, я думаю, что constexpr функции - ваше решение.

Вы можете писать функции для генерации данных деревьев во время компиляции, сохраняя эти данные в массивах во время компиляции.

См. this thread для примера использования.

+0

Извините, нет C++ 11. Любые другие предложения? – slaw

+0

@slaw Ну, вы можете написать какой-то сценарий предварительной компиляции, который вычисляет деревья и вводит данные в исходный код. – Manu343726