小编Jon*_*Jon的帖子

(Set)从与列表组对应的图表中的集合(笛卡尔积)的列表

列表集(A):

{[a,b,d,f],
 [a,c,d,f],
 [a,b,e,f],
 [a,c,e,f]}
Run Code Online (Sandbox Code Playgroud)

其中a,b,c,d,e和f是项目(不一定是单词中的字符),可以作为有向非循环图(DAG,B,所有边缘从左边指向 - >到右边):

  b-->d
 / \ / \
a   X   f
 \ / \ /
  c-->e
Run Code Online (Sandbox Code Playgroud)

或作为4组项目的笛卡尔积(C,称为轴):

{a} * {b,c} * {d, e} * {f}
Run Code Online (Sandbox Code Playgroud)

Guava有一个从集合列表(C)生成一组列表(A)的好方法.

我正在尝试接受像B这样的图形的算法,并返回像C这样的轴列表(实际上是一个或多个,见下面的例子),它可以与上面的方法一起使用来生成一组像A这样的列表.

但是,不能保证列表集是笛卡尔积.例如:

{[a,b,d,f],
 -missing-
 [a,b,e,f],
 [a,c,e,f]}
Run Code Online (Sandbox Code Playgroud)

对应DAG:

  b-->d
 / \   \
a   \   f
 \   \ /
  c-->e
Run Code Online (Sandbox Code Playgroud)

不能表示为1笛卡尔积,但可以表示为2:

{a}*{b}*{d,e}*{f}    and    {a}*{c}*{e}*{f}
Run Code Online (Sandbox Code Playgroud)

对应图表:

      d
     / \
a-->b   f            and     a-->c-->e-->f 
     \ /
      e
Run Code Online (Sandbox Code Playgroud)

列表应该有一定程度的相关性(想想:一个非常大的笛卡尔积的随机样本).

注意:不同长度的列表不能共享同一组轴.

有没有一个算法可以做到这一点,我只是没有用Google搜索正确的术语?如果没有,我们可以创建吗?

算法的复杂性可能是一个问题,因为该集合可能具有10 ^ 2个列表,并且每个列表可以具有10 ^ 2个项目,即相当大的图形.我可以保证输入图表具有可能代表列表集的最小节点数...,并且连接的非分支节点(a-> c-> e-> f)可以汇总为单个对象(acef).

PS.我不认为这与 …

algorithm graph set

10
推荐指数
1
解决办法
486
查看次数

标签 统计

algorithm ×1

graph ×1

set ×1