Skip to content

3 level task #21

Description

@derzhavin3016

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

Предположим у вас есть матрица A размера 10 × 30, B размера 30 × 5 и C размера 5 × 60.

Вычисление их произведения как A(BC) займёт (30×5×60) + (10×30×60) = 27000 операций умножения. В то же время, их произведение как (AB)C даст тот же результат за 4500 операций.

Ваша задача -- написать класс MatrixChain, позволяющий:

  1. Добавить матрицу в цепочку
  2. Распечатать оптимальный порядок перемножения текущей цепочки матриц
  3. Выполнить перемножение в оптимальном порядке для тестов производительности
  4. Показать очевидное превосходство над наивным подходом

Стек матриц может поддерживаться динамически и быть достаточно большим -- тесты на цепочки из 10-20 и более матриц приветствуются.

В выборе оптимальной цепочки должен помочь метод динамического программирования

Входные данные: пары размеров матриц, например

30 35
35 15
15 5
5 10

Выход: оптимальный порядок, например 0 1 2 это порядок по умолчанию

Metadata

Metadata

Labels

enhancementNew feature or request

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions