Как лучше хранить квадратные матрицы и находить в них подматрицы? - Lisp

Узнай цену своей работы

Формулировка задачи:

Как лучше хранить квадратную матрицу, если в ней нужно будет находить подматрицы по координатам и суммы элементов этих матриц? У меня вариант такой
;; Изначально хранить матрицу вот так пр. 4х4
( (0 0 0 0)
  (0 0 0 0)
  (0 0 0 0)
  (0 0 0 0) )
А для подматриц создать структуру
(defstruct abstract matrix sum)
Не знаю правда как найти подматрицу. Должно быть как-то так Координаты 0 0 2 1 (

0 0

0 0) (

0 0

0 0) (

0 0

0 0) (0 0 0 0)

Решение задачи: «Как лучше хранить квадратные матрицы и находить в них подматрицы?»

textual
Листинг программы
(defun sub-matrix (w n m j k)
  (apply #'vector
         (loop for a across w for b from 0
               when (<= n b m)
               nconc (loop for d across a for e from 0
                           when (<= j e k) collect d))))
 
> (sub-matrix #(#(0 1 2 3) #(4 5 6 7) #(8 9 10 11) #(12 13 14 15)) 1 3 2 3)
#(6 7 10 11 14 15)

Объяснение кода листинга программы

В коде определён функцией sub-matrix с тремя позиционными аргументами w, n и m. Первый аргумент w — это список списков, представляющий собой квадратную матрицу. Два других аргумента n и m задают число строк и столбцов подматрицы, которую необходимо получить. Функция sub-matrix возвращает подматрицу, которая вызывается с помощью функции apply и передаёт в неё один аргумент — функцию vector, которая создаёт вектор из элементов подматрицы. Далее в коде с помощью цикла loop происходит перебор всех элементов матрицы w. Для каждой строки a и каждого столбца b из этой строки проверяется, что b меньше или равно m, и если это так, то для каждого элемента d из строки a и каждого столбца e из этой строки также проверяется, что e меньше или равно k, и если это так, то элемент d добавляется в вектор, передаваемый функции apply. В конце кода вызывается функция sub-matrix с заданными значениями аргументов (1 3 2 3), которые соответствуют строке 1, столбцам 3x3 и 2, и 3, и результат выводится на экран. Список выводимых элементов подматрицы: [6 7 10 11 14 15].

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы