Учитывая набор чисел и набор бинарных операций, каков самый быстрый способ создания деревьев случайных выражений или исчерпывающей проверки всех возможных комбинаций в системе Mathematica?
Вот что я пытаюсь решить:
numbers={25,50,75,100,3,6} (* each can ONLY be used ONCE *)
operators={Plus,Subtract,Times,Divide} (* each can be used repeatedly *)
target=99
найти деревья выражений, которые будут оцениваться как нацеленные.
У меня есть два решения, характеристики которых я привожу для случая, когда деревья выражений содержат ровно 4 числа и 3 оператора:
(рассчитано на ноутбуке с: Intel (R) Core (TM) 2 Duo CPU T9300 @ 2,50 ГГц, оперативная память 3 ГБ, распараллеливание еще не использовалось, но будет приветствоваться в ответах)
Мои ноутбуки немного беспорядочно на данный момент. Поэтому я сначала хотел бы задать вопрос и надеяться на оригинальные идеи и ответы, пока я очищаю свой код для совместного использования.
Наибольший возможный случай - это когда каждое дерево выражений использует все (6) числа и операторы «Длина [числа] -1» (5).
Производительность методов в самом большом случае:
Также я использую Mathematica 8.0.1, так что я больше всех слышу, если есть какие-либо способы сделать это в OpenCL или с использованием скомпилированных функций с CompilationTarget -> "C" и т. Д.