给定矩阵A,其中元素A_ij,其中表示从点i到点j的线段,A_ij的值是线段右手部分的元素数 ,我如何找到,无论是真还是假,某个元素k位于从任何点i到点j的线段的右侧?
例如,如果A_02 = 1并且总共有3个元素(0,1,2),那么这意味着从元素0到元素2的行在其右边有1个元素,这仅在元素1是在元素0和2形成的线段的右侧。如果给出查询元素1是否位于从元素0到2的遍历的右侧,则答案应该为真。
要回答这个问题,这是我的思考过程:
这个问题模糊地类似于找到凸包的问题,我们想要找到第三个点是否在右侧(如果是这样,我们回溯到格雷厄姆的扫描中看到)。
然而,在这种情况下,我们没有点的几何位置,因此我们无法执行简单的算术,可以确定一个点是否在右边的一个点线。
鉴于上述限制,我们获得的信息是右侧的元素数量。可以尝试从一些元素A_ij到元素A_jk并查看右边是否有元素,并继续跟踪直到我们达到值0(在这种情况下,我们知道元素位于最右侧)。
但是上面的算法并没有解决三边形闭合时的情况,即3个点形成一个三角形,因为那时A_ij = 1,会导致一些A_jk = 1,然后又导致到A_ki = 1.这可能会导致算法无法终止。
注:A_ii或A_ij,其中i = j(即A的主对角线)全部为0,因为无法形成一条线。
我是否应该使用一个概念来解决这个问题,或者我想要的东西?
我有一丝微弱的直觉,聪明的线性代数技巧可能直接解决问题,但我可能错了。
答案 0 :(得分:0)
如果元素Aij = 0
带有i != j
,那么段ij
就是凸包之一。换句话说,所有其余点都位于i-j段的左侧。
如果元素Aij = n-2
带有i != j
,那么段ij
就是凸包之一。换句话说,所有其余点都位于i-j段的右侧。
如果Aij = 0
带有i != j
,那么Aji = n-2
。同一段,改变了方向。
因为矩阵包含所有可能的段,包括凸包的那些,对于每个点k
,总有一些段位于它们的右边。也就是说,凸包的所有部分(Aij = 0或Aij = n-2)都不包括k
点,并选择正确的方向。
因此,对于您的问题,任何k
的答案都是 true 。
知道哪个是最接近点k的段,使得该点在i-j的右边是棘手的部分。
对于凸包的一段不存在的情况,矩阵中需要一个特殊值(可能是负值)。在这种情况下,我的逻辑无效。