Jac*_*ale 10 sorting algorithm data-structures
这是一个有趣的练习:
设P是一个简单但不一定是凸的多边形,q是任意一点,不一定是P.
设计一种有效的算法来找到源自q的线段,该线段与P的最大边数相交.
换句话说,如果站在q点,你应该朝着什么方向瞄准枪,这样子弹将穿过最大数量的墙壁?
穿过P顶点的子弹只能获得一面墙的信誉.
O(n log n)算法是可能的.n是顶点或边的数量,因为它是多边形,边数大致等于顶点数.
这是我的想法:
首先在P中连接q与所有顶点(假设有N个顶点).将有N行或N-1对行.
最终的射击线必须在这些对之间.所以我们必须找到包含最多边数的对.
我不认为这个解决方案是O(n log n).
有任何想法吗?
好吧,首先将点坐标转换为以P为中心的极坐标系.
O(nlog(n)).我们按照从最小φ向上的角度(φ)坐标对它们进行排序,确保在φ坐标相等的情况下,头部被认为小于对接(这对于符合问题的最后规则很重要).O(nlog(n)).现在你能告诉我你为什么问这类问题?