计算随机放在桌子上的卡片所覆盖的面积

2023-12-20

这是一道面试题,面试已经做过了。

给定一副矩形卡片,将它们随机放在一张长方形桌子上,桌子的尺寸远大于卡片尺寸的总和。有些卡片可能会随机重叠。设计一个算法,可以计算所有卡片覆盖桌子的面积,并分析算法的时间复杂度。所有卡片每个顶点的所有坐标都是已知的。卡片可以以任何图案重叠。

My idea:

按垂直坐标降序对卡片进行排序。

从上到下垂直扫描卡片,到达卡片的一个边缘或顶点后,用另一条扫描线继续扫描,直到到达另一个边缘,找到位于两条线之间的区域。最后,将两条线之间的所有面积相加并得到结果。

但是,如果两条线之间的面积不规则,如何计算该面积是一个问题。

任何帮助表示赞赏。谢谢 !


这可以使用以下方法轻松完成并交公式 https://web.archive.org/web/20171214094328/http://mathforum.org/library/drmath/view/52438.html (A 联合 B 联合 C 的大小 = A + B + C - AB - AC - BC + ABC 等),但这会导致O(n!)算法。还有另一种更复杂的方式会导致O(n^2 (log n)^2).


将每张卡片存储为多边形+其面积在列表中。将列表中的每个多边形与其他每个多边形进行比较。如果它们相交,请将它们从列表中删除,并将它们的并集添加到列表中。继续直到没有多边形相交。将它们的面积相加即可得出总面积。

多边形可能是凹的并且有孔,因此计算它们的交集并不容易。然而,有算法 ftp://ftp.geoinfo.tuwien.ac.at/frank/4756_Intersection_Nonconvex_Polygons_Using_Alternate_Hierarchical_Decomposition.pdf (and 图书馆 http://www.cs.man.ac.uk/%7Etoby/gpc/)可用于计算它O(k log k), where k是顶点数。由于顶点的数量可以是n,这意味着计算交集是O(n log n).

将每个多边形与其他每个多边形进行比较是O(n^2)。然而,我们可以使用一个O(n log n) 扫描算法 https://en.wikipedia.org/wiki/Sweep_line_algorithm而是找到最近的多边形,使整体算法O((n log n)^2) = O(n^2 (log n)^2).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算随机放在桌子上的卡片所覆盖的面积 的相关文章

  • 将 0 更改为 1 或反之亦然的最优雅的方式

    做接下来的事情最优雅的方式是什么 int i oneOrZero if i 0 i 1 else i 0 你可以假设i只能有 1 或 0 值 i 1 XOR https en wikipedia org wiki Exclusive or值
  • 协作投票算法的用户分布

    我的应用程序 实际上是一个游戏 的用户回答问题即可获得积分 问题由其他用户提供 由于数量有限 我无法亲自检查所有内容 因此我决定将过滤过程众包给用户 玩家 规则很简单 每个用户都会看到一个问题来评价好 坏 不确定 当问题被评为 差 5 次时
  • 埃拉托色尼筛法的 Java 实现可以超过 n = 2^32?

    目前我有这个质数生成器 其限制为 n Sieve public class Main public static void main String args long N 2000000000 initially assume all in
  • 滑动窗口最小算法

    这是一个家庭作业问题 设 A 是一个整数数组和整数 K 窗口大小 当窗口滑过 A 时 生成在窗口中看到的最小值的数组 M 我发现一篇文章 http home tiac net cri 2001 slidingmin html有这个问题的解决
  • ASM 中从小端到大端的快速转换

    我在 C 中有一个 uint 类型数组 在检查程序是否在小端机器上运行后 我想将数据转换为大端类型 因为数据量可能会变得非常大 但总是均匀的 所以我想考虑将两个 uint 类型作为 ulong 类型 以获得更好的性能并在 ASM 中对其进行
  • Lamport 的 Paxos 中的矛盾做了简单的论文

    阶段 2 a 如果提议者收到大多数接受者对其准备请求 编号为 n 的响应 则它向每个接受者发送一个接受请求 以获取编号为 n 且值为 v 的提案 其中 v 是响应中编号最高的提案的值 或者如果响应未报告任何提案 则为任意值 正如论文中提到的
  • 如果我在计算强连通分量时不使用 G 转置会怎样?

    我正在阅读算法导论 在 22 5 强连通分量中 算法 STRONGLY CONNECTED COMPONENT G 定义为 调用 DFS G 计算每个顶点 u 的完成时间 u f 计算 G 转置 调用 DFS G transpose 但在
  • 将曲线图案与图像边缘匹配

    我有一个要搜索沿其边缘的曲线的目标图像和一个包含该曲线的模板图像 我需要实现的是在目标图像中找到模板图像中的曲线的最佳匹配 并根据分数来判断是否匹配 这还包括曲线的旋转和大小调整 目标图像可以是 Canny Edge 检测器的输出 如果这能
  • 单链表的时间复杂度

    我正在研究数据结构 单链表 该网站称单链表的插入和删除时间复杂度为O 1 我错过了什么吗 网站链接 http bigocheatsheet com 我用 C 做这个 而且我只有一个root pointer 如果我想插入到最后 那么我必须一直
  • 在 R 中使用两个 for 循环创建矩阵/数据框

    这是我在 SO 上的第一篇文章 所以请友善 我的问题与这个问题隐约相关 R中的双for循环创建矩阵 https stackoverflow com questions 44376020 double for loop in r creati
  • Python 中定义了黄金比例吗?

    有没有办法得到黄金比例phi 在标准Python模块中 我知道e and pi in the math模块 但我可能错过了phi某处定义 scipy constants http docs scipy org doc scipy refer
  • Welzl 算法的迭代版本

    我正在使用 Welzl 算法来查找点云的最小外接圆 2d 或最小外接球体 3d 不幸的是 该算法具有非常高的递归深度 即输入点数 这个算法有迭代版本吗 我找不到任何并且不知道如何将递归更改为循环 我发现了一些迭代的最小包围圆 球算法 但它们
  • n维匹配算法

    在这里寻求一些建议 有谁知道在 n 维空间中开始研究匹配算法的好地方 例如 任何约会网站都必须使用某种算法来匹配 2 个人 我读到的是 我们可以将一个人的特征映射到一个 n 维数组中 每个特征都有一个点系统 一旦我们拥有一个人的所有 可用
  • 我想知道像tineye.com这样的反向图像搜索服务是如何工作的......?

    像 TinEye 这样的反向图像搜索引擎如何工作 我的意思是进行图像搜索需要哪些参数 不知道 TinEye 是否使用这个 但是SURF http en wikipedia org wiki SURF是用于此目的的常用算法 在这里您可以看到一
  • 将 diff 转换为带有删除线的 Markdown?

    我想转换输出diff 在 Markdown 文件上 降价与
  • 高效编写航空公司路由算法

    Given 航班数据库 出发城市 到达城市 出发时间 到达时间 问题 如果出发时间不重要 那么在两个城市之间列出服务的最有效算法是什么 考虑到我们想要最小化中途停留时间 但仍高于标称最小值 即 20 分钟 并最小化中途停留次数 如果有直达航
  • 带提示的二分查找

    我有一个简单的std vector包含一些已排序的数字 按升序 我想查找一个元素 到目前为止我使用 return std lower bound vec begin vec end needle Where needle是我寻找的元素 然而
  • 这些加密算法有什么区别?

    两者有什么区别MCRYPT RIJNDAEL 128 MCRYPT RIJNDAEL 256 MCRYPT BLOWFISH等等 哪一种最适合网络数据传输 Rijandel 是 AES 的另一个名称 AES 是当前的 一个好的标准 算法 数
  • 拉伸数组

    我有一个形成曲线的样本向量 假设其中有 1000 个点 如果我想将其拉伸到填充 1500 个点 给出不错结果的最简单算法是什么 我正在寻找一些只有几行 C C 的东西 我总是想增加向量的大小 并且新向量可以是当前向量大小的 1 1 倍到 5
  • 如何反转音量滑块的音量数学?

    我正在构建一个视频播放器 但有点卡在音量滑块部分 这是一个 YouTube 风格的垂直滑块 这意味着如果滑块位于顶部位置 音量应该为 100 如果滑块拖动到底部位置 声音应该为 0 目前它的做法与我想要的相反 向下拖动滑块将使声音变大 向上

随机推荐

  • 如何在odoo中弹出成功消息?

    我通过单击按钮发送邀请 在单击按钮并成功发送邀请后 会弹出邀请发送成功的消息 但问题是弹出消息的主标题是Odoo Server Error 那是因为我正在使用 raise osv except osv Success Invitation
  • SCNScene 和 SceneKit 编辑器的子类化

    我有带有相机设置的 SCNScene 子类 我想在所有子类中使用它 let scene01 TheSubclassScene let scene02 TheSubclassScene named art scnassets testScen
  • 点击交换课程

    我有一个包含 6 个项目的列表 这些项目位于全局 div navigationaence 中 现在我可以在单击时添加一个类 但现在它们会加起来 这意味着一旦我的六个项目被单击 它们最终都会成为当前代理类 我希望能够删除向单击的项目添加一个类
  • 在 Typescript 中使用 async/await 时未定义 __awaiter

    我在 Typescript 中有以下代码片段 nsp on connection async function socket await this emitInitialPackage nsp currentLine currentCell
  • 当 url 导致临时重定向 (http 302) 时,什么会被索引?

    我正在努力使我们的 很大程度上基于 AJAX 的 网站对搜索引擎更加友好 我们有一个系统 在设置会话变量以更改主页的行为后 某些网址会重定向到主页 这是使用 Controller Redirect 方法创建 ActionResult 来实现
  • 通过 Gremlin 计算大图中的节点/边数?

    通过 Gremlin 计算大图中的节点 边数的最简单且最有效的方法是什么 我发现最好的方法是使用 V 迭代器 gremlin gt g V gather it size 然而 对于大图来说 这不是一个可行的选择V 的文档 http grem
  • numpy 中的加权协方差矩阵

    我想计算协方差C of n的测量p数量 其中每个单独的数量测量都有自己的权重 也就是我的权重数组W与我的数量数组具有相同的形状Q n by p 当地人np cov 函数仅支持赋予各个测量值的权重 即长度向量n 我可以初始化一个p by p矩
  • EF core、Any 无法翻译,将在本地评估

    我有一个程序可以返回我需要的实体 ID 我决定创建此过程 因为应返回给最终用户的实体由相关实体过滤 但 EF Core 不支持相关实体过滤 然后我想使用这个 id 来获取我需要的实体及其相关实体 我正在使用Any operator In m
  • Cleave.js 电话 CA

    我正在尝试使用格式化电话号码字段Cleave js https nosir github io cleave js 它不起作用 但我似乎不明白为什么 我是这样开始的 import Cleave from cleave js var clea
  • 如何在android中的string.xml中添加多段落的长文本

    当我在之间添加许多段落时
  • 组播中的环回

    这个问题是关于在同一主机内发送和接收多播 同时将其发送到其他主机 即使经过几个小时的谷歌搜索 我仍然无法弄清楚多播数据报是如何在同一主机内路由的 下面是问题的详细描述 Linux 盒子 A 通过电缆连接到交换机 路由器 我们将交换机 路由器
  • PHP 转义用户输入的文件名

    我有一个用户可以上传文件的表单 我想将该文件命名为 id lastname firstname pdf 该名称是由用户输入的 我担心他们输入的内容中带有斜杠 否则 类似的事情 path dir filename可能会导致 path uplo
  • 返回 PagedResources 的单元测试 Spring MVC 控制器

    我正在使用 Spring Boot 1 4 1 Spring Data Jpa 和 Spring Data Test 构建一个应用程序 我有以下控制器 我想用它返回分页帐户 RequestMapping method RequestMeth
  • 稠密对称矩阵的特征有效类型

    Does Eigen http eigen tuxfamily org index php title Main Page有存储密集 固定大小 对称矩阵的有效类型吗 嘿 它们无处不在 IE 对于 N 9 它应该只存储 1 9 9 2 45
  • 决定何时使用 XmlDocument 与 XmlReader

    我正在优化自定义对象 gt XML 序列化实用程序 一切都已完成并正常工作 这不是问题 它的工作原理是将文件加载到XmlDocument对象 然后递归地遍历所有子节点 我想也许使用XmlReader而不是有XmlDocument加载 解析整
  • Objective-C UIViewImage 动画

    现在我可以使用下面的代码制作一个简单的动画 但是 下面的解决方案需要我预先定义图像名称 我怎样才能做类似 NSArray push image1 png 的事情例如 然后将动态数组指定为animationImages 谢谢你 球座 UIIm
  • 如何在 Node.js 和 TypeScript 项目中使用 URLSearchParams [重复]

    这个问题在这里已经有答案了 我有一个使用 TypeScript 构建的 Node js 项目 我正在尝试使用URLSearchParams https developer mozilla org en US docs Web API URL
  • Google Apps / App Engine:https 版本的裸域不会重定向

    我有以下场景 网站托管在 AppEngine 中 我们希望强制它始终以 https 加载 我们在 app yaml 中使用 secure always 域在 Google Apps 中进行管理 我们已经上传了 SNI 证书 一切看起来都很好
  • 如何让 SQL Server Management Studio 在出现错误时停止处理?

    这似乎是一个非常愚蠢的问题 但如何让 SQL Server Management Studio 在遇到错误时停止处理 SQL 脚本 我有一个很长的脚本 如果开始时出现错误 SSMS 会报告它 然后盲目地继续 把事情搞砸得更多 我无法使用事务
  • 计算随机放在桌子上的卡片所覆盖的面积

    这是一道面试题 面试已经做过了 给定一副矩形卡片 将它们随机放在一张长方形桌子上 桌子的尺寸远大于卡片尺寸的总和 有些卡片可能会随机重叠 设计一个算法 可以计算所有卡片覆盖桌子的面积 并分析算法的时间复杂度 所有卡片每个顶点的所有坐标都是已