扫描线算法 - 一维平面的实现

2024-02-01

问题很简单,平面上有一些给定的一维线。 我们需要找到至少有一行的空间的总大小。

让我用一个示例图像来讨论这个问题 -

这可能是一个案例. Or

这可能是一个案例或类似的东西。

我知道这是一个基本问题扫线算法 https://en.wikipedia.org/wiki/Sweep_line_algorithm.

但互联网上没有合适的文档可以正确理解。

我最好的博客是顶级编码器那就是here https://www.topcoder.com/community/data-science/data-science-tutorials/line-sweep-algorithms/.

但目前尚不清楚如何实现它或如何进行模拟。

如果我愿意,我们可以用 2 个循环在 O(n^2) 内完成它,但我不知道这个过程是怎样的。

或者还有比 O(n log n) 更好的算法吗?

任何人都可以通过分享任何 Sudo 代码或模拟来帮助我吗?

如果 Sudo 代码或示例代码不可用,从我可以实现这一点的地方进行模拟以供理解就足够了。


Re- 计算重叠日期范围时出现问题 https://stackoverflow.com/questions/7468948/problem-calculating-overlapping-date-ranges不是我正在寻找的,因为首先,它是 O(n^2) 所以,这不是我想要的。而且没有像这个问题那样完全描述。


该主题没有太多可用信息。

所以,我正在与您分享我为您创建的算法和模拟,它也是O(n log n) !!!!!

开始吧-

  1. 创建所有操作点的优先级列表(操作点是一条线的起点或终点)。 PQ 的每一项都有 3 个元素(当前点、起点或终点、来自哪一行)。 (O(n log n)操作如果我们使用快速短线 https://en.wikipedia.org/wiki/Quicksort用于排序)。
  2. 初始化一个 Vector 来存储当前活动行。
  3. 初始化一个大小=行数+1的数组(用于存储阴影长度之和)。
  1. 现在从中删除一个项目PQ并对该项目运行特定操作,如下图所示,您就完成了。

1

2

3

4

5

6

7

8

9

10

11

  1. 一直这样做直到PQ为空。

在你的例子中,找到数组从 1 到结尾(索引 1 到 m)的所有元素的总和,这就是你的答案。

但是通过这个算法和数组,您可以轻松地得到许多更复杂的问题答案,例如具有 3 个影子的空间长度是多少 = Arr3 https://i.stack.imgur.com/10eWn.jpg等等。

现在的问题是订单怎么样, right?

所以,排序 = O(n log n) 扫掠 = O(m) [m=没有动作点,所以 m

因此,总阶数 = O(n log n) + O(m) =O(n log n)

认为您可以轻松理解它,并且将对您和其他许多人有很大的帮助。并认为您将能够轻松实现它。

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

扫描线算法 - 一维平面的实现 的相关文章

  • 在 python 中使用 numpy.linalg.eig 后对特征值和关联的特征向量进行排序

    我使用 numpy linalg eig 来获取特征值和特征向量的列表 A someMatrixArray from numpy linalg import eig as eigenValuesAndVectors solution eig
  • 在 O(n) 时间内运行的指数乘法算法?

    我正在读一本算法教科书 我被这个问题难住了 假设我们要计算值 x y 其中 x 和 y 为正数 分别具有 m 和 n 位的整数 解决该问题的一种方法是执行 y 1 乘以 x 你能给出一个仅使用 O n 乘法步骤的更有效的算法吗 这会是一个分
  • 给定与总和匹配的长度的唯一 3 位数字 (-1,0,1) 序列的数量

    假设您有一个长度为 n 即空格数 的垂直游戏板 你有一个三面骰子 有以下选项 前进一 停留和后退 如果您低于或高于棋盘游戏空间的数量 则该游戏无效 一旦到达棋盘末端 唯一有效的动作就是 停留 给定确切的骰子投掷次数 t 是否可以通过算法计算
  • Java:使用indexOf方法根据另一个数组对数组进行排序

    我想根据另一个数组 索引 的排序顺序迭代两个数组 A B 在本例中为 10 34 32 21 String A a b c d String B e f g h int indexes 10 34 32 21 为这里的坏例子道歉 我已经更新
  • 用于插入/删除/排名/选择查询的最佳数据结构/算法

    到目前为止 我知道像AVL树和红黑树这样的自平衡BST可以在O log n 次内完成这些操作 然而 要使用这些结构 我们必须自己实现AVL树或RB树 我听说有一个算法 实现这四个操作而不使用自平衡 BST 有了我们自己定义的结构 我们就需要
  • 如何计算两个ip之间的主机数量? C#

    我有两个ip 1 1 1 1 1 2 4 4 4 4 显然这只是一个例子 这是一个动态计算器 如果子网掩码不相关 我如何计算所述 ip 之间的主机数量 要计算 理论 IP 地址的数量 您需要将每个 IP 地址转换为其 32 位整数格式 这实
  • 合并字符数组中的最小重复次数

    假设我有两个数组 我想合并它们 以便合并后的数组具有最小重复次数 例如 x x 是重复 arr1 x d d m f m arr2 d d x f f m 唯一的条件是在合并数组中 元素来自arr1 and arr2必须出现在各自的订单中a
  • 如何按值降序对哈希进行排序并在 ruby​​ 中输出哈希?

    output sort by k v v reverse 和钥匙 h a gt 1 c gt 3 b gt 2 d gt 4 gt a gt 1 c gt 3 b gt 2 d gt 4 Hash h sort 现在我有这两个 但我试图按值
  • 使用快速排序查找数组中第 k 个最小的项 => 预期运行时间?

    如果我使用快速排序的修改版本来查找数组中第 k 个最小的项目 为什么预期运行时间是 O n 如 Programming Pearls 一书中所述 我正在使用的算法执行以下操作 1 Runs quick sort on the array 2
  • 基于时间的算法评分

    我们希望创建一种评分算法 在更短的时间内获得更高的分数 在更长的时间内获得更少的分数 需要注意的是 没有实际范围 因此时间范围可以从 100 毫秒到长达 10 分钟或更长时间 点范围为 0 到 50 谢谢你的帮助 你可以简单地把它变成一个线
  • 字符串到数组,按第三个字/列排序

    我有一个包含数字 单词和换行符的字符串 我将其拆分为一个数组 如果我跑Array Sort lines 它将按第 1 列对数组进行数字排序 Number 我怎样才能按第 3 列的字母顺序对数组进行排序 Color 注意 它们不是真正的列 只
  • 在 Java 中实现排列算法的技巧

    作为学校项目的一部分 我需要编写一个函数 该函数将接受整数 N 并返回数组 0 1 N 1 的每个排列的二维数组 该声明看起来像 public static int permutations int N 该算法描述于http www usn
  • 32 位数字中 1 的数量

    我正在寻找一种在 32 位数字中包含 1 数量的方法 之间不使用循环 任何人都可以帮助我并向我提供代码或算法吗 这样做 提前致谢 See Integer bitCount int http java sun com javase 6 doc
  • 字符串排序真的是 O(n^2logn) 吗? [复制]

    这个问题在这里已经有答案了 我读了以下内容 排序需要 O NlogN 那么它怎么是 O N 2logN 我们在这里想念的是 两个字符串的比较不是 O 1 在最坏的情况下 需要 在 所以最终的复杂度是O N 2logN 它是否正确 我一直认为
  • 如何查找给定字符串中仅出现一次的第一个字符[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 快速求解子集和

    考虑这种解决子集和问题的方法 def subset summing to zero activities subsets 0 for activity cost in activities iteritems old subsets sub
  • 对 Python 中的嵌套字典进行排序

    我有以下字典 var a Black grams 1906 price 2 05 Blue grams 9526 price 22 88 Gold grams 194 price 8 24 Magenta grams 6035 price
  • 如何使用 SQL Server 查询对“版本号”列进行排序

    我想知道我们当中的 SQL 天才是否可以向我伸出援助之手 我有一个专栏VersionNo在表中Versions包含 版本号 值 例如 VersionNo 1 2 3 1 1 10 3 1 1 4 7 2 etc 我正在寻找对此进行排序 但不
  • 使用主方法求解 T(n) = 2T(n/2) + n/log n 和 T(n) = 4T(n/2) + n/log n 之间的差异

    我最近偶然发现了一个资源 其中 2T n 2 n log ntypeMM 宣布复发无法解决 我接受它作为一个引理 直到今天 另一种资源被证明是矛盾的 在某种意义上 根据资源 下面的链接 其中的 Q7 和 Q18 是建议 分别在问题中的1和2
  • 通过分布式数据库聚合作业优化网络带宽

    我有一个分布式 联合数据库 结构如下 数据库分布在三个地理位置 节点 每个节点集群有多个数据库 关系数据库是 PostgreSQL MySQL Oracle 和 MS SQL Server 的混合体 非关系数据库是 MongoDB 或 Ca

随机推荐

  • 南姜戈迁徙

    我已经做了 python manage py schemamigration TestDBapp1 initial python manage py schemamigration TestDBapp1 auto 成功地 但如果我输入 py
  • 获取表内的方法形式

    我之前问过一个问题 但我认为我没有正确地提出问题 这是我的代码 HTML
  • 最简单的跨浏览器检查协议处理程序是否已注册

    当用户单击带有自定义协议的链接时 例如myapp superlink 我需要启动应用程序或允许用户下载并运行配置应用程序 我正在寻找跨浏览器的方法来检查自定义协议是否已注册 我试图通过检查用户代理服务器端 对于 IE 来确定这一点 HKEY
  • 构建库代码的最佳方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如果我是唯一的用户,可以避免 ROAuth 握手中的 PIN 步骤吗?

    Question 有没有办法避免在进行 OAuth 握手时手动输入 PIN Context 进行 ROAuth 握手时 系统会要求我输入通过以下链接获取的 PIN rm list ls library twitteR library ROA
  • 捕获 ThreadAbortException 时隐藏的 Throw 有何作用?

    我正在阅读一本关于一般 C 开发的书 并且已经读到了线程中止部分 这本书说 当你在另一个线程上调用 Thread Abort 时 该线程将抛出 ThreadAbortException 即使你试图抑制它 它也会自动重新抛出它 除非你做了一些
  • 将组件推送到组件数组 - ReactJS

    我对 React 数组有点迷失了 我想要做的是拥有组件 文章 数组 并且在该数组中我想要拥有标题和内容 我想要对该数组执行的操作是添加 删除并将其显示在我的页面上 那么我做错了什么 另外这个动作到底叫什么 代码来自ReactJS 演示 ht
  • jquery 图像映射调整大小

    我编写此函数是为了重新调整 onLoad 元素的位置以及用户是否调整浏览器窗口的大小 它在加载时工作正常 但在调整窗口大小时无法正确重新计算 我究竟做错了什么 var orig width jQuery imageMaps attr wid
  • React.js:数组和“违反了有关合并函数的关键假设”错误

    http jsfiddle net NV f54Xr http jsfiddle net NV f54Xr jsx React DOM var Dummy React createClass mixins React addons Link
  • 使用Python将ts转换为mp4[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 编辑问题以包括期望的行为 特定问题或错误以及重现
  • 使用 PhantomJS 运行 RequireJS/WireJS 应用程序

    我正在尝试执行一个使用 RequireJS 2 1 8 WireJS 0 10 2 和 PhantomJS 1 9 2 的基本应用程序 当使用 PhantomJS 运行应用程序时 这是我的目标 WireJS 无法加载 请参见下面的错误 使用
  • 中心导航栏链接没有品牌将其推到 Bootstrap 4 的右侧?

    我试图将我的导航栏链接居中 但是当我这样做时 我的品牌徽标将其推到右侧 因此它不居中 这是我的 html
  • AngularJS - 将 $resource.query 与 params 对象一起使用

    我正在尝试接起angular js http angularjs org并致力于找出一些记录较少的事情 考虑一下 我在服务器上有一个搜索方法 它接受查询参数并返回搜索结果的集合 并响应GET search json路线 Rails FWIW
  • Ag-grid:使用 AggFunc 时如何更改定义列标题名称?

    对于给定的列定义 当使用 aggFunc 时 headerName 以 func string 格式显示 我只希望标题显示我定义的字符串 当 AggFunc 为 null 时 此行为不存在 const columnDef any heade
  • 使 Appen 功能在 Google 谷歌表格/[重复]中运行得更快

    这个问题在这里已经有答案了 我有一个代码工作正常但没有优化 我是 Google App 脚本的新手 该代码执行以下操作 从外部URL获取数据 过滤数据 解析文件夹中包含的工作表中的数据 更改列标题 在特定列中附加内容 function my
  • PostgreSQL - 按 UUID 版本 1 时间戳排序

    我在用UUID版本1 https en wikipedia org wiki Universally unique identifier Version 1 date time and MAC address 作为主键 我想按 UUID v
  • 如何在 SwiftUI AttributedString 中渲染 Markdown 标题?

    我一直在尝试使用新的属性字符串 https developer apple com documentation foundation attributedstring随 iOS 15 一起发布 用于渲染存储在变量中的 Markdown 但是
  • 在 MVC 中使用 dotnet core 时如何删除 ErrorViewModel

    如果 ErrorViewModel 从我的项目中删除 它将无法运行 失败于app UseMvc 出现错误 System TypeLoadException 无法加载类型 程序集 DocumentGenerationService 版本 1
  • SED 更改标签之间的值

    我在 UNIX 上有这样的日志文件 start host1 java serv host1 def java es dev L2 1 dev w fr host1 def java es dev L3 0 dev w fr host1 de
  • 扫描线算法 - 一维平面的实现

    问题很简单 平面上有一些给定的一维线 我们需要找到至少有一行的空间的总大小 让我用一个示例图像来讨论这个问题 这可能是一个案例 Or 这可能是一个案例或类似的东西 我知道这是一个基本问题扫线算法 https en wikipedia org