Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 用小正方形填充矩形的算法?_Algorithm - Fatal编程技术网

Algorithm 用小正方形填充矩形的算法?

Algorithm 用小正方形填充矩形的算法?,algorithm,Algorithm,给定一个具有宽度和高度的矩形,用n个正方形(n为整数,也给定)填充它,以便正方形尽可能多地覆盖矩形的面积。 应返回单个正方形的大小 想法?假设所有正方形对齐且大小相同,您可以通过对正方形边长进行二进制搜索来找到: import math def best_square(w, h, n): hi, lo = float(max(w, h)), 0.0 while abs(hi - lo) > 0.000001: mid = (lo+hi)/2.0

给定一个具有宽度和高度的矩形,用n个正方形(n为整数,也给定)填充它,以便正方形尽可能多地覆盖矩形的面积。 应返回单个正方形的大小


想法?

假设所有正方形对齐且大小相同,您可以通过对正方形边长进行二进制搜索来找到:

import math

def best_square(w, h, n):
    hi, lo = float(max(w, h)), 0.0
    while abs(hi - lo) > 0.000001:
        mid = (lo+hi)/2.0
        midval = math.floor(w / mid) * math.floor(h / mid)
        if midval >= n:
            lo = mid
        elif midval < n: 
            hi = mid
    return min(w/math.floor(w/lo), h/math.floor(h/lo))
导入数学
def best_square(宽、高、北):
高,低=浮动(最大(宽,高)),0.0
当abs(高-低)>0.000001时:
中=(低+高)/2.0
midval=数学楼层(w/mid)*数学楼层(h/mid)
如果midval>=n:
lo=中
elif midval
假设所有正方形对齐且大小相同,您可以通过对正方形边长进行二进制搜索来找到:

import math

def best_square(w, h, n):
    hi, lo = float(max(w, h)), 0.0
    while abs(hi - lo) > 0.000001:
        mid = (lo+hi)/2.0
        midval = math.floor(w / mid) * math.floor(h / mid)
        if midval >= n:
            lo = mid
        elif midval < n: 
            hi = mid
    return min(w/math.floor(w/lo), h/math.floor(h/lo))
导入数学
def best_square(宽、高、北):
高,低=浮动(最大(宽,高)),0.0
当abs(高-低)>0.000001时:
中=(低+高)/2.0
midval=数学楼层(w/mid)*数学楼层(h/mid)
如果midval>=n:
lo=中
elif midval
正方形的方向不一定与较大的矩形相同。这类问题被称为包装问题,而找到最优解是出了名的困难

对于将
n
正方形填充成较大形状的情况下的极好处理,请参阅Erich Friedman的论文

例如,格德尔是第一个就这一主题发表文章的人。他发现a2+a+3+(a-1)√2个正方形可以装在a+1+1边的正方形中/√2通过以45度角放置一条对角的正方形条带。比如说,


为了好玩,我强烈建议你去看看。

正方形的方向不一定与较大的矩形相同。这类问题被称为包装问题,而找到最优解是出了名的困难

对于将
n
正方形填充成较大形状的情况下的极好处理,请参阅Erich Friedman的论文

例如,格德尔是第一个就这一主题发表文章的人。他发现a2+a+3+(a-1)√2个正方形可以装在a+1+1边的正方形中/√2通过以45度角放置一条对角的正方形条带。比如说,

为了好玩,我强烈建议你去看看。

这是我的解决方案 其思想是进行递归循环 假设u以平方_计数器=0开始

而长度和呼吸: //找到最大的正方形

Count1=长度/呼吸//发言

平方_计数+=计数1

新天平长度=长度-计数1*呼吸

现在与最大尺寸的可能wrt呼吸平方

Count2=呼吸/长度

平方计数+=计数2

呼吸=呼吸-计数*长度这是我的解决方案 其思想是进行递归循环 假设u以平方_计数器=0开始

而长度和呼吸: //找到最大的正方形

Count1=长度/呼吸//发言

平方_计数+=计数1

新天平长度=长度-计数1*呼吸

现在与最大尺寸的可能wrt呼吸平方

Count2=呼吸/长度

平方计数+=计数2


呼吸=呼吸-计数*长度

我知道这个问题很久以前就有了,但我的想法如下:

你有n个正方形 你有一个长方形 您想知道填充矩形的正方形的大小

例如:

rectangle of 1280*720 filled with 100 squares. 
The surface is 1280*720=921600
1 square should have the surface of 921600/100 = 9216
so the square size is sqrt(9216)=96
最终,它将只是一个返回以下结果的函数:

sqrt((width*height)/n)

我知道那个问题是很久以前的事了,但我的想法如下:

你有n个正方形 你有一个长方形 您想知道填充矩形的正方形的大小

例如:

rectangle of 1280*720 filled with 100 squares. 
The surface is 1280*720=921600
1 square should have the surface of 921600/100 = 9216
so the square size is sqrt(9216)=96
最终,它将只是一个返回以下结果的函数:

sqrt((width*height)/n)


这看起来像是家庭作业。。。如果是的话,看看这个,可能会给你一个起点。不,这是一个面试问题。正方形的大小必须相同吗?它们是否必须轴对齐(即,与矩形方向相同)?是的,它们大小相同,方向与矩形方向相同。这听起来像是Dropbox作业难题之一:这看起来像家庭作业。。。如果是的话,看看这个,可能会给你一个起点。不,这是一个面试问题。正方形的大小必须相同吗?它们是否必须轴对齐(即,与矩形方向相同)?是的,它们大小相同,方向与矩形方向相同。这听起来像是Dropbox作业难题之一:您是否假设所有n个正方形的大小相同?问题似乎没有提到这一点。啊!你是对的,我搞砸了,但事实上很明显,正方形的边必须都相等(否则为什么会说返回正方形的边?)。我错的地方是我假设它们都需要与矩形的边对齐,这是不正确的。我将把这个解决方案留在这里,因为它至少解决了这个问题的一个简单版本。我不这么认为。我在一些正方形的盒子上测试了它,它给出了正确的解决方案。应该这样做的原因是,正方形的数量随着边长的增加而减少,而不是相反。我的错,我在问题中没有提到,n个正方形大小相同,你们这些家伙发布解决方案的速度非常快@米科拉:嗯……我想你是对的。我已经删除了我的评论。不过,似乎存在一些浮点错误:使用
print best_square(100100,10)
prints 25.0000007451的代码;也许我们需要一个更小的ε。你是否假设所有n个正方形的大小都相同?问题似乎没有提到这一点。啊!你是对的