所以我有一个基本上是这样的问题:我有一堆字符串,我想构造一个 DAG,使得每条路径都对应一个字符串,反之亦然。但是,我可以自由地任意排列我的字符串。字符的顺序无关紧要。我生成的 DAG 具有与之相关的成本。基本上,DAG 中一个分支的成本与其子路径的长度成正比。
例如,假设我有字符串 BAAA、CAAA、DAAA,并且我构造了一个 DAG 来表示它们而不对它们进行置换。我得到:
() -> (B, C, D) -> A -> A -> A
其中元组表示分支。
就我的目的而言,更便宜的表示是:
() -> A -> A -> A -> (B, C, D)
问题是:给定 n 个字符串,对字符串进行置换,使得对应的 DAG 成本最低,其中成本函数为:如果我们从源头开始深度遍历图,从左到右顺序,我们的节点总数访问,具有多样性。
所以第一个例子的成本是12,因为我们必须在遍历中多次访问A。第二个示例的成本是 6,因为在处理分支之前我们只访问 A 一次。
我感觉这个问题是NP Hard。这似乎是一个关于形式语言的问题,我对这些算法还不够熟悉,无法弄清楚我应该如何进行缩减。我本身不需要完整的答案,但如果有人能指出一类似乎相关的众所周知的问题,我将不胜感激。