栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

切出最小正方形的矩形

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

切出最小正方形的矩形

我将其编写为动态(递归)程序。

编写一个试图在某个位置分割矩形的函数。递归调用两个部分的函数。尝试所有可能的分割,并以最小的结果进行分割。

基本情况是当两边相等时,即输入已经是一个正方形,在这种情况下,结果为1。

function min_squares(m, n):    // base case:    if m == n: return 1    // minimum number of squares if you split vertically:    min_ver := min { min_squares(m, i) + min_squares(m, n-i)  |  i ∈ [1, n/2] }    // minimum number of squares if you split horizontally:    min_hor := min { min_squares(i, n) + min_squares(m-i, n)  |  i ∈ [1, m/2] }    return min { min_hor, min_ver }

为了提高性能,您可以 缓存 递归结果:

function min_squares(m, n):    // base case:    if m == n: return 1    // check if we already cached this    if cache contains (m, n):        return cache(m, n)    // minimum number of squares if you split vertically:    min_ver := min { min_squares(m, i) + min_squares(m, n-i)  |  i ∈ [1, n/2] }    // minimum number of squares if you split horizontally:    min_hor := min { min_squares(i, n) + min_squares(m-i, n)  |  i ∈ [1, m/2] }    // put in cache and return    result := min { min_hor, min_ver }    cache(m, n) := result    return result

在具体的C ++实现中,

intcache[100][100]
由于输入大小受到限制,因此可以用于缓存数据结构。将其作为静态局部变量放置,因此它将自动用零初始化。然后将0解释为“未缓存”(因为它不可能是任何输入的结果)。

可能的C ++实现:http :
//ideone.com/HbiFOH



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/569143.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号