【问题标题】:How to find the rectangle that leaves the most free space on both sides of a smaller rectangle?如何找到在较小矩形的两侧留下最多可用空间的矩形?
【发布时间】:2020-10-23 16:39:30
【问题描述】:

我正在尝试为我的软件找出合适的算法,但找不到任何相关的“教科书解决方案”。我将任务简化为以下核心问题。

鉴于矩形区域的选择,我需要找到一个已知适合所有区域的较小矩形同时在所有边上留下最多空间的区域。

鉴于: 长方形: 长度=100,宽度=200

区域(将始终预先选择为大于矩形):

  1. 长度=100,宽度=200
  2. 长度=101,宽度=500
  3. 长度=101,宽度=201
  4. length=300, width=300
  5. 长度=200,宽度=1000
  6. 长度=1000,宽度=200

找到最适合的 4) 选择的算法应该是什么?

将感谢任何类 C 语言或 Python 中的伪代码或代码,或指向某些知名算法的指针。

这些数字仅用于本测试示例。在现实生活中,所有数字都可以是用户输入的任意数字。

【问题讨论】:

  • 似乎您需要简单地找到较小矩形适合的矩形,然后简单地确定哪些矩形的面积最大(因为这意味着它在较小矩形周围的面积最大,因为较小的具有固定区域)。请尝试以这种方式接近它并生成一些代码。一个提示是,您需要在候选矩形上进行循环,并且在循环中您要检查尺寸是否允许较小的尺寸,并且您要跟踪面积最大的尺寸。
  • 您对大多数空间的定义有点不精确。你想让 min(length_diff, width_diff) 尽可能大吗?
  • 目前还不太清楚“同时在两个维度上”究竟是什么意思。
  • @AndrewAllaire 不幸的是,这并不是那么简单。例如,100x1000 将提供比 300x300 更大的区域,但 300x300 仍然更适合,因为 100x1000 在长度上根本没有可用空间。
  • @n.'pronouns'm。对不起,我的英语不是很好。我的意思是 - 它应该找到在长度和宽度上的间距最平衡的候选人。想象一下,就像您正在尝试将一个细节安装到一个平面上,知道平面应该在所有侧面都有尽可能多的空间,但还要选择空间分布最均匀的选项。也就是说 - 给定一架具有 10 长度储备和 100 宽度储备的飞机以及一架具有 50 长度储备和 50 宽度储备的飞机,您应该选择第二个。

标签: algorithm math


【解决方案1】:

如果我正确理解了您的问题,这将是一个解决方案 (c++),但没有对其进行测试:

struct Rectangle
{
    size_t x, y;
};

//returns first index which fits your condition
int alg(Rectangle a, Rectangle *others, size_t othersLen)
{
    unsigned int biggestIndex = 0;
    size_t biggest = 0;
    for (int i = 0; i < othersLen; i++)
    {
        size_t diffX = others[i].x - a.x;
        size_t diffY = others[i].y - a.y;
        size_t size = diffX > diffY ? diffY : diffX;
        if (size > biggest)
        {
            biggest = size;
            biggestIndex = i;
        }
    }
    return biggestIndex;
}

编辑:仅当其他矩形大于给定矩形时才有效,因为它不会产生负差异。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 2012-09-23
    • 2011-06-02
    相关资源
    最近更新 更多