Создайте деревья выражений из заданных наборов чисел и операций и найдите те, которые вычисляют целевое число в системе Mathematica 8 или выше.

Учитывая набор чисел и набор бинарных операций, каков самый быстрый способ создания деревьев случайных выражений или исчерпывающей проверки всех возможных комбинаций в системе 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 оператора:

  1. случайная выборка и выбор: ~ 25 тыс. Деревьев в секунду
  2. полное сканирование: 806400 деревьев в ~ 2,15 секунды

(рассчитано на ноутбуке с: Intel (R) Core (TM) 2 Duo CPU T9300 @ 2,50 ГГц, оперативная память 3 ГБ, распараллеливание еще не использовалось, но будет приветствоваться в ответах)

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

Наибольший возможный случай - это когда каждое дерево выражений использует все (6) числа и операторы «Длина [числа] -1» (5).

Производительность методов в самом большом случае:

  1. случайная выборка и выбор: ~ 21K деревьев в секунду
  2. полное сканирование: 23224320 деревьев за ~ 100 секунд

Также я использую Mathematica 8.0.1, так что я больше всех слышу, если есть какие-либо способы сделать это в OpenCL или с использованием скомпилированных функций с CompilationTarget -> "C" и т. Д.

5
задан Cetin Sert 31 October 2011 в 11:32
поделиться