Может ли определитель матрицы размера 9 x 9 с элементами из множества {–1, 1} быть равным 31? 32?

Рейтинг: -1Ответов: 1Опубликовано: 27.02.2023

Необходимо как можно эффективнее решить данное задание на Python. Свои размышления начала с простой идеи: с помощью декартова произведения получить и перебрать все возможные варианты элементов матрицы, (которых должно быть 81) состоящих из 1 и -1. Далее полученные списки преобразовать в матрицы размера 9*9 и вычислить определители каждой такой матрицы. Таким образом, перебрав все варианты можно наверняка либо получить результат 31 или 32 или нет. Но возникает проблема в операции декартового произведения, такой подход очень долгий, а смысл заключается в том, чтобы код работал как можно эффективнее, но я не знаю, что с этим делать... Подскажите, пожалуйста, как можно решить это задание быстрее, может параллельное выполнение кода необходимо? Мой код на Python:

from itertools import product
import numpy as np
for tple in product([1, -1], repeat = 81): # декартово произведение
    lst = list(tple) # преобразуем кортеж в список
    print(lst)
    np_lst = np.array(lst) # преобразуем список в массив numpy
    A = np_lst.reshape(9,9) # преобразование в матрицу
    print(A)
    print("Определитель: ", np.linalg.det(A))

Ответы

▲ 1

Пара свойств определителей, можно изучить на первом курсе или посмотреть в википедии:

  • если одну строку добавить к другой, значение определителя не изменится
  • если элементы строки имеют общий множитель, его можно вынести как коэффициент перед определителем

Раз у нас есть такие мощные правила, воспользуемся ими: прибавим первую строку ко всем остальным. Что получается в восьми строках? Чётные числа. Выносим из каждой строки множитель 2, и перемножаем восемь двоек - получается, что определитель такой матрицы всегда кратен 256, т.е. возможные значения: 0, 256, -256, 512, -512, 768... Ясно, что ни 31, ни 32 здесь не встретятся.

32 может быть значением определителя подобной матрицы размером до 6x6

Python даже не пригодился - разве что 2**8 можно вычислить.