如何计算矩阵元素的相对位置?

时间:2018-04-01 22:47:52

标签: algorithm data-structures graph linear-algebra graph-theory

给定矩阵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的遍历的右侧,则答案应该为真。

要回答这个问题,这是我的思考过程:

  1. 这个问题模糊地类似于找到凸包的问题,​​我们想要找到第三个点是否在右侧(如果是这样,我们回溯到格雷厄姆的扫描中看到)。

  2. 然而,在这种情况下,我们没有点的几何位置,因此我们无法执行简单的算术,可以确定一个点是否在右边的一个点线。

  3. 鉴于上述限制,我们获得的信息是右侧的元素数量。可以尝试从一些元素A_ij到元素A_jk并查看右边是否有元素,并继续跟踪直到我们达到值0(在这种情况下,我们知道元素位于最右侧)。

  4. 但是上面的算法并没有解决三边形闭合时的情况,即3个点形成一个三角形,因为那时A_ij = 1,会导致一些A_jk = 1,然后又导致到A_ki = 1.这可能会导致算法无法终止。

  5. 注:A_ii或A_ij,其中i = j(即A的主对角线)全部为0,因为无法形成一条线。

    我是否应该使用一个概念来解决这个问题,或者我想要的东西?

    我有一丝微弱的直觉,聪明的线性代数技巧可能直接解决问题,但我可能错了。

1 个答案:

答案 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的右边是棘手的部分。

对于凸包的一段不存在的情况,矩阵中需要一个特殊值(可能是负值)。在这种情况下,我的逻辑无效。