- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试解决编程挑战,但只取得了部分成功;我需要优化解决方案 - 这就是你的用武之地。首先,参数:
int x1, y1, x2, y2
.int px, py = INT_MAX
为了你的球。px, py
“掉落”直线向下(较小的 y 值)
px
.所以,我认为:
int xtop, ytop, xbot, ybot
,ybot
对行进行排序.这允许我们跳过球已经通过的线,imin
这样 lines[i].ybot >= py
对于所有 i < imin
,然后直到找不到相交:
yi = kx + m
,px, py = lines[i].{x, y}bot
.问题是这个时间复杂度 ∈ θ(n2) - IOW,对于大输入来说很糟糕。
一个想法是使用类似 k-d tree 的东西,但接下来的问题是计算哪些线进入哪些所谓的半空间是否会非常昂贵。
最佳答案
听起来您似乎对 point location in a planar subdivision 感兴趣.我链接到的 slab 分解方法是更简单的选择之一;简而言之,您从线段的每个端点延伸垂直线,形成 2n + 1 个垂直板。对于每个板,您计算一个二叉树,从上到下指示哪些段穿过板。然后,要找到球击中的位置,确定它在哪个板中,然后确定它击中了哪个部分(如果有的话);两个操作都是 O(log n) 时间。
要首先计算二叉树,请使用扫描线算法。从一个空的二叉树开始,按照 x 坐标的排序顺序处理端点。对于左端点,将线段插入树中。对于右边,将其从树中移除。假设段不交叉,则永远不需要在树内重新排序。天真地,我们必须在每一步后复制树,但是将存储从 O(n^2) 降低到 O(n log n) 的一个简单策略是使用纯功能性红黑树,避免需要副本。
此方法的整体运行时间和空间为 O(n log n)。
关于c - 优化一个简单的 pinball 求解器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21856993/
进程文件: pinball or pinball.exe 进程名称: Microsoft Pinball 进程类别:存在安全风险的进程 英文描述: pinball.exe is a proc
我正在尝试解决编程挑战,但只取得了部分成功;我需要优化解决方案 - 这就是你的用武之地。首先,参数: 给你一些线段int x1, y1, x2, y2 . 给你一个起点int px, py = INT
我正在尝试使用 spritekit 构建弹球游戏。球受重力影响并做出正确 react ,但我想不出一种方法来移动脚蹼以影响球的物理特性。现在我正在使用像这样的 SKAction 围绕 anchor 旋
我正在尝试定义一个 pinbal 损失函数,用于使用 Keras(以 Tensorflow 作为后端)在神经网络中实现“分位数回归”。 定义在这里:pinball loss 很难实现传统的 K.mea
我是一名优秀的程序员,十分优秀!