Шахматную доску ???? × ???? нужно разрезать на ????·???? единичных квадратов. На каждом шаге вы можете сделать либо один горизонтальный, либо один вертикальный разрез. Первый разрез разделит плату на две части; после этого каждый разрез разделяет одну оставшуюся доску на две. Стоимость разреза равна количеству единичных квадратов, оставшихся на меньшей из двух получившихся поддосок. Например, горизонтальный разрез на доске 2 × 3 приводит к получению двух поддосок 1 × 3 и стоит 3, тогда как вертикальный разрез приводит к получению поддосок размером 2 × 1 и 2 × 2 и стоит 2. Затраты складываются. : стоимость последовательности разрезов равна сумме их индивидуальных затрат. Опишите алгоритм для вычисления минимальной общей стоимости сокращения доски ???? × ???? на ее единичные квадраты. Докажите его правильность и продемонстрируйте свой анализ временной сложности.
Мое решение выглядит следующим образом: 1. Я следую жадному подходу, проверяя наибольшее значение между m (строка) и n (столбец) и делая разрез. 2. Если m больше, я делаю вертикальный разрез, а другой - горизонтальный. 3. Это дает мне самую низкую стоимость сокращения на каждом этапе. 4. Я следую принципу «разделяй и властвуй» и рекурсивно следую подходу, пока не получу m x n = 1 x 1.
Кажется, это работает, но я борюсь с тем, чтобы вывести временную сложность и доказать правильность моего алгоритма.
Мое выражение временной сложности: T(mn) = 2 T(mn/2) + theta(n).
Может ли кто-нибудь посоветовать мне, как я могу это сделать?