TL; DR
Сравните сумму каждого триплета, произведение каждого триплета и сумму произведений всех возможных комбинаций каждого триплета.
Нитти Гритти
Согласно основной теореме алгебры , для многочлена степени N мы должны иметь N корней.
Используя этот факт, мы позволяем нашим нулям быть a1, a2, and a3
. Теперь мы найдем коэффициенты этого многочлена.
(x - a1) * (x - a2) * (x - a3)
(x^2 - (a1 + a2) * x + a1a2) * (x - a3)
x^3 - (a1 + a2) * x^2 + (a1a2) * x - a3 * x^2 + (a1a3 + a2a3) * x - a1a2a3
x^3 + (-1 * (a1 + a2 + a3)) * x^2 + (a1a2 + a1a3 + a2a3) * x + (-1 * a1a2a3)
Если два полинома эквивалентны, они должны иметь одинаковые корни (опять-таки в FTA). Таким образом, все, что нам нужно сделать, это сравнить коэффициенты сгенерированных полиномов.
Так что если,
(-1 * (a1 + a2 + a3) == (-1 * (b1 + b2 + b3))
---equivalently---
a1 + a2 + a3 == b1 + b2 + b3
А также
(a1a2 + a1a3 + a2a3) == (b1b2 + b1b3 + b2b3)
А также
-1 * a1a2a3 == -1 * b1b2b3
---equivalently---
a1a2a3 == b1b2b3
Тогда мы можем заключить триплеты a1, a2, a3
и b1, b2, b3
эквивалентны.
Стоит ли оно того?
С практической точки зрения, давайте посмотрим, действительно ли это более эффективно, чем проверка методом грубой силы, как показано на OP.
Первая проверка: сумма и сравнение. Для этого требуется 4 полных дополнения и 1 проверка на равенство.
Общая сумма проверки = 5; Промежуточный итог = 5
Вторая проверка: продукт, сумма и сравнение. Для этого требуется 6 полных умножений, 4 полных сложения и 1 проверка на равенство.
Общее количество проверок = 11; Промежуточный итог = 16
Третья проверка: продукт и сравнение. Для этого требуется 4 полных умножения и 1 проверка на равенство.
Общая сумма проверки = 5; Промежуточный итог = 21
При добавлении двух логических операций И общее число двоичных операций для «коэффициентов сгенерированного полиномиального подхода» требует только:
23 бинарных операции
Проверка грубой силы требует 18 проверок на полное равенство, 12 логических сравнений И и 5 логических сравнений ИЛИ в общей сложности:
35 бинарных операций
Так что, строго говоря , ответ - да, «коэффициенты порожденного полиномиального подхода» действительно более эффективны. Однако, как указывает @WJS, метод грубой силы имеет гораздо больше возможностей для короткого замыкания и, следовательно, выполняется как / более эффективно, чем математический подход.
Для полной тщательности
Мы не можем пропустить проверку суммы произведений всех возможных комбинаций каждого триплета. Если мы оставим это, есть бесчисленное множество примеров, когда это не удается. Рассмотрим (23, 32, 45)
и (24, 30, 46)
* :
23 + 32 + 45 = 100
24 + 30 + 46 = 100
23 * 32 * 45 = 33120
24 * 30 * 46 = 33120
Они не эквивалентны, но дают одинаковую сумму и произведение. Однако они не дают одинаковую сумму произведений всех возможных комбинаций:
23 * 32 + 23 * 45 + 32 * 45 = 3211
24 * 30 + 24 * 46 + 30 * 46 = 3204
* Если вам интересно, как получить пример, аналогичный приведенному выше, сначала сгенерируйте все целочисленные разбиения целого числа M длины 3, возьмите их произведение, найдите дубликаты и выберите пару.