Учитывая n
числа в массиве (вы не можете предполагать, что они являются целыми числами), я хотел бы вычислить произведение всех подмножеств размера n-1
.
Вы можете сделать это, умножив все числа вместе, а затем разделив их по очереди, пока ни одно из чисел не будет равно нулю. Однако как быстро вы можете сделать это без деления?
Если вы не разрешаете деление, какое минимальное количество арифметических операций (например, умножение и сложение) необходимо для вычисления произведения всех подмножеств размера n-1?
Очевидно, вы можете сделать это в (n-1)*n
умножении.
Для пояснения, выходные данные - это n
разные продукты, и единственными операциями, кроме чтения и записи в память, являются умножение, сложение и вычитание.
пример
Если на входе три числа 2,3,5
, то на выходе три числа 15 = 3*5
, 10 = 2*5
и 6 = 2*3
.
Критерий победы
Ответы должны дать точную формулу для числа арифметических операций, которые их код будет использовать в терминах n
. Чтобы упростить жизнь, я просто подключусь n = 1000
к вашей формуле, чтобы оценить ее результат. Чем ниже, тем лучше.
Если слишком сложно создать точную формулу для вашего кода, вы можете просто запустить ее n = 1000
и подсчитать арифметические операции в коде. Точная формула будет лучше, однако.
Вы должны добавить свою оценку для n=1000
вашего ответа для легкого сравнения.
+
на индексах ? Если это так, учитывается ли индексирование массива? (поскольку это все-таки синтаксический сахар для добавления и разыменования).
(n-1)*n
умножениях Вы имеете в виду (n-2)*n
, не так ли?