Bloomberg, обычно в ситуациях, когда пригождается определитель
, его находят численными методами как побочный продукт какого-то другого алгоритма. Самое простое и безобразное — решить систему
методом Гаусса, после прямого хода которого произведение элементов на диагонали преобразованной матрицы даст определитель. Сложность этого по времени
.
У вас сложность должна быть
, экспоненциальная, да и реализация не очень. Незачем создавать для вычисления минора новый массив (ладно бы память, но и на времени это тоже сказывается), вычислять целую степень
с помощью
Math.pow — ээ…
-- Вт ноя 26, 2013 23:15:39 --mustitz, простите, что не заметил вашего совета по вычислению сложности и раскрыл карты.
или всё же искать возможности (находить по другой строке/столбцу, приводить к нулям и т.д.
Это может повлиять на численные особенности, о которых не возьмусь говорить, хотя это не менее важно, чем временная сложность. Последняя от этого не уменьшится точно. Одну временную сложность, как вы понимаете, для анализа знать мало. Особенно для алгоритмов, оперирующих floating-point числами.
но потом возникло ощущение, что то, что хорошо человеку (не сложно понять, какую строку на что умножать и к какой прибавлять), может заставить компьютер задуматься.
Не то чтобы задуматься, но, скорее, делать лишнее. Кстати, находить определители матриц выше 3-го порядка не какого-то специального вида человеку вручную не только незачем, но и вообще вредно — это значит, что он делает что-то не то. (Это моё личное мнение.)