Algorithm 组合独立集/汉明距离的算法/逼近

Algorithm 组合独立集/汉明距离的算法/逼近,algorithm,set,np-complete,packing,hamming-distance,Algorithm,Set,Np Complete,Packing,Hamming Distance,输入:图G 输出:多个独立集,因此节点对所有独立集的成员资格是唯一的。因此,一个节点与它自己的集合中的任何节点都没有连接。下面是一个示例路径 因为这里需要澄清,所以需要另一种措辞: 将给定的图形划分为多个集合,以便 我可以通过节点在集合中的成员身份将其与所有其他节点区分开来,例如,如果节点i仅存在于集合a中,则不应仅存在于集合a中 如果集合A和B中存在节点j,则集合A和B中不应仅存在其他节点。如果节点的成员身份由位模式编码,则这些位模式至少有一个汉明距离 如果两个节点在图中相邻,则它们不应存在

输入:图G 输出:多个独立集,因此节点对所有独立集的成员资格是唯一的。因此,一个节点与它自己的集合中的任何节点都没有连接。下面是一个示例路径

因为这里需要澄清,所以需要另一种措辞:

将给定的图形划分为多个集合,以便

  • 我可以通过节点在集合中的成员身份将其与所有其他节点区分开来,例如,如果节点i仅存在于集合a中,则不应仅存在于集合a中

    如果集合A和B中存在节点j,则集合A和B中不应仅存在其他节点。如果节点的成员身份由位模式编码,则这些位模式至少有一个汉明距离

  • 如果两个节点在图中相邻,则它们不应存在于同一集合中,因此是一个独立的集合

  • 例如: B没有相邻的节点 D=>A,A=>D

    解决方案:

  • A B/
  • /B-D
  • A具有位模式10且其集合中没有相邻节点。B有位模式11,没有相邻节点,D有01 因此,所有节点的汉明距离至少为1,无相邻节点=>正确

    错误,因为D和A是连接的:

  • A、D、B
  • /D B
  • A在其集合中有位模式10和D,它们是相邻的。B有位模式11,没有相邻节点,D和B一样有11,因此此解决方案中有两个错误,因此不被接受

    当然,随着图中节点数量的增加,这应该扩展到更多的集合,因为您至少需要
    log(n)
    set

    我已经写了一个到MAX-SAT的转换,使用SAT解算器来解决这个问题。但是条款的数量太多了。更直接的方法会更好。到目前为止,我有一个近似值,但我想要一个精确解,或者至少是一个更好的近似值


    我尝试过一种方法,我使用粒子群从任意的解决方案优化到更好的解决方案。然而,运行时间非常糟糕,结果也远远不是很好。我正在寻找一个动态算法或其他东西,但我无法理解如何划分和解决这个问题。

    这可能不是您可能期望的答案,但我找不到添加注释的地方。所以我直接在这里输入。我不能完全理解你的问题。还是需要特定的知识才能理解?这个独立集是什么?正如我从有向图中知道的,独立集中的一个节点有一条到该集中任何其他节点的双向路径。你的想法是一样的吗

    如果此问题与我假设的类似,则可通过此算法找到独立集: 1.对有向图进行深度优先搜索,记录该节点所根树的遍历时间。 2.然后反转此图中的所有边 3.在修改后的图形上再次执行深度优先搜索。
    这本书精确地解释了algorihtm,但它并不是一个完整的答案,我不知道它对你有多有用。但这里有:

    汉明距离对我来说是一条红鲱鱼。你的问题陈述说它必须至少是1,但可能是1000。可以说每个节点的集合成员身份的位编码是唯一的

    您的问题陈述没有详细说明,但您上面的解决方案建议每个节点必须是至少1个集合的成员。即,任何节点的集合成员身份都不允许对所有0进行位编码

    暂时忽略连接的节点,不相交的节点很容易:只需使用未使用的位编码按顺序对它们进行编号。留到最后

    上面的例子使用了有向边,但我还是觉得这是在转移视线。如果A因为A=>D而不能与D在同一集合中,则无论D=>A,D都不能与A在同一集合中

    您提到至少需要日志(N)集。您最多也将有N组。一个完全连通的图(具有(N^2-N)/2条无向边)需要N个集合,每个集合包含一个节点

    事实上,如果你的图包含一个M维(1..N-1中的M)的完全连通单纯形,有M+1个顶点和(M^2+M)/2条无向边,你至少需要M+1个集合

    在上面的例子中,有一个这样的单纯形(M=1),它有两个顶点{A,D}和一个(无向)边{(A,D)}

    您的问题似乎归结为在图形中查找最大的完全连通单形。换言之,你有一个布线问题:你需要多少尺寸来布线你的边,这样就没有交叉?这听起来不是一个很容易扩展的问题

    第一个大型单纯形很容易找到。每个顶点节点都会获得一个具有自己位的新集合

    不相交的节点很容易。处理连接的节点后,只需按顺序对不相交的节点编号,跳过以前使用的任何位模式。从上面的例子来看,由于A和D取01和10,因此B的下一个可用位模式是11

    然后,棘手的部分变成如何在创建任何具有新位的新集合之前,将任何剩余的simplex尽可能多地折叠到现有范围中。折叠时,每个节点必须使用2个或更多位(集),并且位(集)不得与任何相邻节点的位(集)相交

    考虑一下,当向示例中添加另一个节点C时,上面的示例会发生什么情况:

    如果C直接连接到A和D,那么初始问题就变成了寻找具有3个顶点{A,C,D}和3条边{(A,C),(A,D),(C,D)}的2-单纯形。一旦A、C和D采用位模式001、010和100,不相交B的最低可用位模式为011

    另一方面,如果C直接连接A或D,但不是两者都连接,则图有两个1-单纯形。假设我们找到顶点为{A,D}的1-单纯形,首先给它们位模式01和10,问题就变成了如何将C折叠到这个范围。唯一一个至少有2位的位模式是11,但它与C连接的节点相交,因此我们必须创建一个新的集合,并将C放入其中。