有任意点 用最少给定大小的矩形 将其囊括在内。求算法。

MichaelGLX 2020-09-23 10:29:29



如上图,要用给定相同大小的矩形 最少个数,将所有点囊括在内。
...全文
6826 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanta 2020-10-10
  • 打赏
  • 举报
回复
这个算法有点意思。滑动窗口算法能得到解,但我感觉不是最优解。有没有试试贪心算法?
ziqi0716 2020-09-29
  • 打赏
  • 举报
回复
跟滑动窗口算法类似,只不过这个是个二维的. 一维的算法就是定义一个指针和窗口宽度,移动指针(跨度根据业务场景定),统计窗口区间内符合要求的数据量. 二维算法就是扩展下,两个指针,还有对应的宽度和高度,两重滑动循环(滑动跨度这里应该是横向或纵向的下一个点),一层横向滑动,内存纵向移动,移动过程统计记录点数及位置信息. 这个有两个循环,此算法时间复杂度为O(m*n),不算特别高效.暂时没想到别的算法.
zp_feng 2020-09-29
  • 打赏
  • 举报
回复
引用 15 楼 非专业开发Five 的回复:
有任意点 用最少给定大小的矩形 平面上任意点最小数量的矩形囊括在内难道不是1个矩形? 求出x-y轴最大最小值画个矩形不是1个矩形囊括所有点???
注意审题,给定大小的矩形,不是无大小限制的矩形
ziqi0716 2020-09-29
  • 打赏
  • 举报
回复
引用 18 楼 MichaelGLX 的回复:
[quote=引用 17 楼 ziqi0716 的回复:]跟滑动窗口算法类似,只不过这个是个二维的. 一维的算法就是定义一个指针和窗口宽度,移动指针(跨度根据业务场景定),统计窗口区间内符合要求的数据量. 二维算法就是扩展下,两个指针,还有对应的宽度和高度,两重滑动循环(滑动跨度这里应该是横向或纵向的下一个点),一层横向滑动,内存纵向移动,移动过程统计记录点数及位置信息. 这个有两个循环,此算法时间复杂度为O(m*n),不算特别高效.暂时没想到别的算法.
我现在只能这么做,优化有些麻烦,只能尽量筛选。 可能有比较高效的方法。[/quote] 嗯,先解决有无问题
MichaelGLX 2020-09-29
  • 打赏
  • 举报
回复
引用 17 楼 ziqi0716 的回复:
跟滑动窗口算法类似,只不过这个是个二维的. 一维的算法就是定义一个指针和窗口宽度,移动指针(跨度根据业务场景定),统计窗口区间内符合要求的数据量. 二维算法就是扩展下,两个指针,还有对应的宽度和高度,两重滑动循环(滑动跨度这里应该是横向或纵向的下一个点),一层横向滑动,内存纵向移动,移动过程统计记录点数及位置信息. 这个有两个循环,此算法时间复杂度为O(m*n),不算特别高效.暂时没想到别的算法.
我现在只能这么做,优化有些麻烦,只能尽量筛选。 可能有比较高效的方法。
  • 打赏
  • 举报
回复
有任意点 用最少给定大小的矩形 平面上任意点最小数量的矩形囊括在内难道不是1个矩形? 求出x-y轴最大最小值画个矩形不是1个矩形囊括所有点???
ZSZhen 2020-09-27
  • 打赏
  • 举报
回复
看了前面几楼的回复,感觉可以再加一点 第一步:获取外接矩形 第二步:填充矩形A 第三步:消除无效矩形 第四步:获取相邻矩形内的点的外接矩形,判断是否比A小,小则合并
  • 打赏
  • 举报
回复
假设“剩下未包含的点”有n个,其距离上边x、距离左边y已经找到,那么必定有一个矩形距离上边为x,也必定有一个举行距离左边y,先从这2个约束条件入手。
  • 打赏
  • 举报
回复
晨易夕 2020-09-25
  • 打赏
  • 举报
回复
引用 9 楼 MichaelGLX 的回复:
谢谢解答,你这方法 有个缺陷, 如图 比如你找到了蓝色矩形,也是框选最多点,但是遗漏了右下角的点,导致 需要三个矩形才能框选完成。
移除掉蓝色矩形,场中还有未被框选的点吗?显然没有,那么移除生效。
MichaelGLX 2020-09-25
  • 打赏
  • 举报
回复
引用 7 楼 晨易夕 的回复:
由于是使用的启发式方法,不完善则再改进。 再次找到两个相邻的矩形,找出两个矩形内点列的最大边界,如果最大边界适用一个矩形,则合并这两个矩形。
谢谢解答,你这方法 有个缺陷, 如图 比如你找到了蓝色矩形,也是框选最多点,但是遗漏了右下角的点,导致 需要三个矩形才能框选完成。
MichaelGLX 2020-09-23
  • 打赏
  • 举报
回复
求算法 ,只有这么多分了
晨易夕 2020-09-23
  • 打赏
  • 举报
回复
由于是使用的启发式方法,不完善则再改进。 再次找到两个相邻的矩形,找出两个矩形内点列的最大边界,如果最大边界适用一个矩形,则合并这两个矩形。
晨易夕 2020-09-23
  • 打赏
  • 举报
回复
3l说的也对吧。 找出最大边界,填充最大矩形数量,比如你图中应填充的最大矩形数量为4。 再依次移除每个矩形,如果移除矩形之后有点没有被覆盖,则撤销移除。
MichaelGLX 2020-09-23
  • 打赏
  • 举报
回复
引用 3 楼 icoolno1 的回复:
不就是比大小。一次遍历就可以找出最左最右,最上最下。四个点有了,矩形不就出来了。
没你想象这么简单,离散的点,固定大小的矩形,用最少个数的矩形全部 将点囊括。当然囊括的点可以重复。
八爻老骥 2020-09-23
  • 打赏
  • 举报
回复
不就是比大小。一次遍历就可以找出最左最右,最上最下。四个点有了,矩形不就出来了。
MichaelGLX 2020-09-23
  • 打赏
  • 举报
回复
有没有人啊。

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧