寻找与多边形相交尽可能多次的射线

2023-11-25

这是一个有趣的练习:

设 P 是一个简单但不一定是凸多边形,q 是不一定在 P 中的任意点。

设计一种有效的算法来找到一条源自 q 且与 P 的最大边数相交的线段。

换句话说,如果站在q点,你应该把枪瞄准什么方向,这样子弹才能穿过最多数量的墙壁?

穿过 P 顶点的子弹仅获得一堵墙的功劳。

O(n log n) 算法是可能的。 n是顶点或边的数量,因为它是多边形,边的数量大致等于顶点的数量。

这是我的想法:

首先将 q 与 P 中的所有顶点(假设有 N 个顶点)连接起来。将有 N 条线,或 N-1 对线。

最终的射击线必须位于这两对之间。所以我们必须找到包含最多边数的对。

我认为这个解决方案不是 O(n log n)。

有任何想法吗?


好吧,首先将点坐标转换为以 P 为中心的极坐标系。

  • 不失一般性,我们选择顺时针方向作为相对于角坐标的特殊方向。
  • 现在,让我们沿着多边形的所有边依次进行循环行走,并注意这些边的起点和终点,即相对于 P 沿顺时针方向行走。
  • 我们将这种边缘的终点称为“屁股”,将起点称为“头部”。这一切都应该在 O(n) 内完成。现在我们必须对这些头和屁股进行排序,所以使用快速排序可能是O(nlog(n))。我们按照角度 (φ) 坐标从最小的 φ 向上对它们进行排序,确保在 φ 坐标相等的情况下,头部被认为小于屁股(这对于遵守问题的最后一个规则很重要)。
  • 完成后,我们将从最小的 φ 开始遍历它们,每当遇到屁股时递增运行总和,每当遇到头部时递减,注意全局最大值,这将是 φ 坐标上的一个区间。这也应该在 O(n) 内完成,因此总体复杂度为O(nlog(n)).

现在你能告诉我你为什么问这样的问题吗?

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

寻找与多边形相交尽可能多次的射线 的相关文章

  • 如何对 HTML 表格进行排序?

    我根本不是 HTML 专家 我对微控制器进行编程并开始切线 我创建了一个 html 文档来显示微控制器寄存器 寄存器地址和寄存器描述的表 我创建了一个包含 3 列和大约 120 行的表 某些寄存器地址是可位寻址的 如果它们的地址以 0 或
  • 逐字遍历句子

    如何逐字遍历任何给定的句子 java中有内置函数吗 我不知道如何开始 像这样的事情 String sentence Your sentence here String words sentence split s splits by whi
  • 对 java ConcurrentHashMap 中的值进行排序

    我有以下用于对 ConcurrentHashMap 进行排序的代码 ConcurrentHashMap
  • 为什么我们需要检测链表中的循环

    我看到很多关于如何检测链表中的循环的问答 但我想了解的是我们为什么要这样做 换句话说 检测链表中的循环的实际用例是什么 在现实生活中 您可能永远不需要检测链表中的循环 但是执行此操作的算法很重要 我在现实生活中多次使用它们 例如 我经常会递
  • stl 集的 C# 等效项是什么?

    我想使用 C 将一些值存储在平衡二叉搜索树中 我查看了泛型命名空间中的集合 但没有找到与 stl 集合等效的集合 我可以使用什么通用集合 我不想存储键 值对 只是值 你可以使用HashSet http msdn microsoft com
  • 将数字 n 拆分为 k 个不同数字的总和

    我有一个数字 n 我必须将它分成 k 个数字 使得所有 k 个数字都是不同的 k 个数字的总和等于 n 并且 k 最大 例如 如果 n 为 9 则答案应为 1 2 6 如果 n 为 15 则答案应为 1 2 3 4 5 这就是我尝试过的 v
  • 没有重复项的可排序 Java 集合

    我正在寻找可排序 我的意思是在初始化后排序并多次使用比较器 Java 类集合 没有重复项 有没有比编写不透明的代码更纯粹的解决方案 例如防止某些 ArrayList 添加另一个具有与已存在的值相同的值的对象 编辑1 我应该添加一些关于排序的
  • Spring Redis 排序键

    我在 Redis Spring Data Redis 中有以下键 localhost gt Keys 1 id 1 Name C5796 Site DRG1 2 id 2 Name CX1XE Site DG1 3 id 3 Name C5
  • 如何在 Mongoose 中定义排序函数

    我正在开发一个小型 NodeJS Web 应用程序 使用 Mongoose 访问我的 MongoDB 数据库 我的收藏的简化架构如下 var MySchema mongoose Schema content type String loca
  • DataGridView小数不排序

    好吧 我有一个 DataGridView 它的数据绑定如下 dataGridViewChartOre AutoGenerateColumns false dataGridViewChartOre DataSource xml GetOreC
  • 如何计算一组字符串的最短唯一前缀?

    这是一个非常常见的算法命令行解析 给定一组预定义的长选项名称 计算唯一标识这些选项之一的最短前缀 例如 对于以下选项 help hostname portnumber name polymorphic 这将是输出 he ho por n p
  • Django Admin:引用用户的ForeignKey和ManyToManyField关系的排序

    我有一个使用 Django 的应用程序UserProfile扩展内置的 DjangoUser模型 看起来有点像 class UserProfile models Model user models ForeignKey User uniqu
  • 打印从 1 到 100 的质数

    此 C 代码打印出以下素数 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 但我不认为这就是我的书所希望的写作方式 它提到了一些关于数字的平方根的内容
  • 埃拉托斯特尼筛法是生成 1 到 N 素数的最佳算法吗?

    我在一次采访中被问到这个问题 我使用埃拉托色尼筛子概念和数组实现了一种算法 有没有更好的方法来解决这个问题 对于不知道筛子的人 请点击以下链接 http en wikipedia org wiki Sieve of Eratosthenes
  • 按共同关联的数量排序 (Rails)

    背景 我有帖子和用户 并且都有很多社区 客观的 对于任何给定的用户 我想返回一个帖子集合 按该帖子与该用户有共同社区的数量排序 具有更多共同社区的帖子位于更高的位置 我当前的尝试 使用排序方法 有效 Post includes commun
  • python数据结构(类似设置)在添加重复项时抛出异常

    我正在寻找一种在添加重复元素时会引发异常的数据结构 我发现的最接近的是collections Counter gt gt gt from collections import Counter as counter gt gt gt c co
  • 计算总和等于 k ​​的子集数量

    给定一个数组 我们需要找出总和恰好等于给定整数 k 的子集的数量 请针对这个问题提出一个最佳算法 这里不需要实际的子集 只需计数即可 该数组由整数组成 可以是负数也可以是非负数 例子 数组 gt 1 4 1 10 5 绝对值总和 gt 9
  • 仅使用两个变量交换两个数字

    它如何执行交换 a a b b a b a b a 我不同意把它换成书 书中的选项包括 a和b的值的补集 否定和b 希望这些选项也不能满足它 正确的算法应该是 a a b b a b a a b
  • 读取4个点的坐标。他们做一个正方形吗?

    我计算点之间的距离 如果距离相等 则点构成一个正方形 否则不 仅当我按以下顺序读取坐标 A x y B x y C x y D x y 或相反时 我的代码才有效 但是如果我这样读 例如 A x y B x y D x y C x y 它将不
  • 递归:n项级数之和

    需要递归函数 系列是 1 2 3 3 4 5 4 5 6 7 递归求 n 的级数之和 我无法想到应该在函数中传递哪些参数 我的方法 我认为我应该传递 n 要相乘的项数 但我无法想到的是我应该如何在同一个函数中 和 以及我的 return 语

随机推荐

  • Hashmap 会自动排序吗?

    这是我的哈希图 HashMap
  • Android:PSS(比例集大小)计算

    我试图弄清楚 Android 中 PSS 是如何计算的 我找到了一个article其内容如下 进程的 比例集大小 PSS 是页数 它在内存中 其中每个页面除以页数 共享它的进程 因此 如果一个进程有 1000 个页面 全部属于它自己 与另一
  • 如何为列中的每个单元格执行函数并循环遍历所有工作簿?

    这是我到目前为止所拥有的 Sub TrimColumnD Dim ws As Worksheet For Each ws In ThisWorkbook Worksheets Dim c As Range For Each c In Act
  • 生成器角度模块没有创建新项目

    我是自耕农工具集的新手 我在 Ubuntu 12 中运行以下命令 npm install g yo npm install g generator webapp yo webapp 我能够创建一个网络应用程序项目 之后我尝试创建一个有角度的
  • 使用 WMI ManagementObjectSearcher 缺少指令或程序集引用?

    我找到了这个链接 使用 C 检测 Windows 上的防病毒软件 然而 当我在 Visual C Express Edition 2008 中尝试此代码时 它显示 Error 1 The type or namespace name Man
  • Git hook:启用回显命令

    有没有办法在 git hook 中启用 echo var git repositories project git hooks post update bin bash unset GIT DIR echo post update hook
  • Parse.com 出现奇怪问题,未包含密钥

    我遇到了与此非常相似的问题one 基本上我使用 Parse com 加载一些具有 PFUser 指针的对象 然后我还使用 includeKey 来包含这些 PFUsers 这是代码 PFQuery query PFQuery queryWi
  • G++ 4.6 -std=gnu++0x:静态局部变量构造函数调用时序和线程安全

    void a void b struct X X b void f a static X x 假设在进入 main 之后 f 被不同的线程 可能存在竞争 多次调用 当然 对 a 和 b 的唯一调用就是上面看到的那些 当上面的代码被编译时海湾
  • 用于没有模型的对象的石墨烯解析器

    我正在尝试编写一个解析器 它返回由函数创建的对象 它从memcached获取数据 所以没有实际的model我可以把它绑起来 我认为我的主要问题是我不知道什么type使用以及如何设置它 我将其与 Django 结合使用 但我不认为这是 dja
  • 在 ggplot2 中使用 grconvertX/grconvertY

    我想弄清楚如何在 ggplot 中使用 grconvertX grconvertX 我的最终目标是向ggplot2图 也可能是lattice with grid text and grid lines从用户坐标到设备坐标 我知道可以用 gr
  • 在响应式布局中隐藏元素?

    通过引导程序查看 它们似乎支持折叠较小屏幕的菜单栏项目 页面上的其他项目是否有类似的内容 例如 我有一个带有导航药丸的浮动右侧 在小屏幕上这会导致问题 我很乐意至少将其放入类似的点击显示更多下拉列表中 这在现有的 Bootstrap 框架中
  • 改变图像标签的原型?

    我正在尝试编写一个可以执行以下操作的库 当该库包含在 head 中时 它会更改 HTMLImageElement 原型 以便用户在 HTML 中碰巧使用的或在 javascript 中动态创建的任何图像标记都将具有由我的库定义的默认 one
  • 如何在 WPF 列表框中排序?

    C 4 0 WPF 应用程序 请参阅下面的代码 在启动时显示 单击 abd 后Sort按钮与btnSort Click 单击事件处理程序 如何按 aaa bbb ccc 顺序排序 C 代码 public MainWindow Initial
  • 保存更高分辨率的图表而不弄乱外观

    你们都必须原谅我的无知 因为我最近才开始使用 C 我只是有一个关于 Windows 图表控件的问题 因为我遇到了一个相当愚蠢的问题 我有一个程序 其中有一些报告 其中包括漂亮的窗口图表来表示一些数据 但是 我一直将这些图表保存到文件中以供各
  • Python 多处理中的子级与父级通信

    我正在编写一个 python 脚本 它将通过将行发送到不同的进程来处理来快速解析文件 最后 我希望父进程接收每个子进程的结果 然后能够对其进行操作 这是代码 usr bin env python import os import re fr
  • 在 Windows 上将 Anaconda 的根 Python 更新到更新的次要版本没有任何作用

    我在 Windows 上安装了 Anaconda 不是 miniconda Python 2 7 我想将安装的 Python 版本更新到最新的次要版本 2 7 9 我看到该版本可以在以下渠道中找到 conda配置为使用 然而 输入conda
  • 修改 NSEvent 以发送与按下的键不同的键

    我正在尝试创建一个 OS X 键盘挂钩用于辅助技术目的 即不用担心 不是键盘记录器 当用户按下某个键时 我想要prevent真正的按键和send而是一个假按键 我选择的角色 我有以下代码 void hookTheKeyboard CGEve
  • 在 C# 项目中包含 FSharp.Core:解决类型冲突

    我正在使用一些 F 类型 Matrix等 来自 C 因此我需要在我的 C 项目中引用 FSharp Core 程序集 到目前为止 一切都很好 但是 显然 mscorlib dll v4 中定义的某些类型在 FSharp Core v2 中
  • 自定义列表排序顺序

    我有一些清单 例如 mylist1 alpha green mylist2 blue alpha red 我想通过这个自定义排序列表对这两个列表进行排序 red blue green alpha so that mylist1 green
  • 寻找与多边形相交尽可能多次的射线

    这是一个有趣的练习 设 P 是一个简单但不一定是凸多边形 q 是不一定在 P 中的任意点 设计一种有效的算法来找到一条源自 q 且与 P 的最大边数相交的线段 换句话说 如果站在q点 你应该把枪瞄准什么方向 这样子弹才能穿过最多数量的墙壁