一张 × 的棋盘要被切成单位正方形。在每一步,你可以进行横向或纵向的切割。第一个切割将把棋盘分成两个子棋盘;之后,每一次切割都会把一个剩余的子棋盘分成两个。每次切割的代价等于生成的两个子棋盘中较小的那个的单位正方形数量。例如,在一个 2×3 的棋盘上进行横向切割会得到两个 1×3 的子棋盘,代价为 3,而纵向切割会得到大小分别为 2×1 和 2×2 的子棋盘,代价为 2。切割的总代价是可累加的:一系列切割的总代价等于它们各自代价的总和。请描述一个算法来计算将棋盘切割成单位正方形的最小总代价。证明其正确性并分析其时间复杂度。
我的解决方案如下: 1. 我遵循贪心策略,检查行数 m 和列数 n 中的最大值,并进行一次切割。 2. 如果 m 更高,则进行纵向切割,否则进行横向切割。 3. 这给出了每一步最低的切割代价。 4. 我采用分治方法,递归遵循这种方法,直到得到 1x1 的单位正方形。
这似乎可以工作,但我遇到的困难是推导出我的算法的时间复杂度和证明其正确性。
我的时间复杂度表达式为 T(mn) = 2 T(mn/2) + theta(n)。
有人能告诉我如何做到这一点吗?
我的解决方案如下: 1. 我遵循贪心策略,检查行数 m 和列数 n 中的最大值,并进行一次切割。 2. 如果 m 更高,则进行纵向切割,否则进行横向切割。 3. 这给出了每一步最低的切割代价。 4. 我采用分治方法,递归遵循这种方法,直到得到 1x1 的单位正方形。
这似乎可以工作,但我遇到的困难是推导出我的算法的时间复杂度和证明其正确性。
我的时间复杂度表达式为 T(mn) = 2 T(mn/2) + theta(n)。
有人能告诉我如何做到这一点吗?