所有组合树算法

时间:2010-12-17 08:19:28

标签: algorithm path tree combinations

我有一个与树有关的问题。关于像“汽车”这样的话题,我有大约100个句子。这些句子基本上都是关于汽车的。如果用户提交查询:“查找单词”engine“和”oil“之间的所有单词链接组合。”我想找到所有可能的单词链接,以便“引擎”和“油”通过句子中的任意数量的单词连接。

例如。

  1. 发动机运行时很热。
  2. 汽车有发动机。
  3. 汽车用油。
  4. 在这种情况下,答案将是:engine-> car-> oil(三个单词组合)。我想找到所有可能的组合,以便最终“引擎”和“油”相互连接。它不是最短路径或最长路径,而是所有可能的路径在所有方向和单词上运行。只要道路不相似,甚至可以有1000个单词组合来达到“引擎”和“油”。

    有没有办法做到这一点。我尝试先使用面包,但这有点棘手。例如,组合可以是。

    1. 发动机 - >小车 - >游程>停停>油
    2. 发动机 - >小车 - >油
    3. 发动机 - >快> brake->油
    4. 任何人都可以帮助我。这里的逻辑和想法是什么。我不能忽略我已经访问过的一个词,因为那样会在那里停止算法,而不是给我所有的链接。

      请提供帮助和见解。

      感谢。

      fa323

1 个答案:

答案 0 :(得分:2)

你的问题如此严格......即使在你的例子中,也不清楚为什么答案不包括engine->an->oil

此外,它实际上与树无关,而是处理图形。

您需要做的第一件事是确定如何构建图表。这样做的一种合理方法是,如果它们都出现在特定的句子中,则在两个单词之间有一个优势。

然后你必须决定你想要输出什么。我非常怀疑你想要所有的道路。为什么?好吧,如果你构建我描述的图形,那么即使只使用你的第一个句子,也有24条从引擎到油的路径,不计算带循环的路径。但是,如果这是您想要的,您可以通过深度优先搜索找到图形中的所有非循环路径,在此处标记在堆栈上推送时访问的节点,并在取消时取消标记。