我有一个与树有关的问题。关于像“汽车”这样的话题,我有大约100个句子。这些句子基本上都是关于汽车的。如果用户提交查询:“查找单词”engine“和”oil“之间的所有单词链接组合。”我想找到所有可能的单词链接,以便“引擎”和“油”通过句子中的任意数量的单词连接。
例如。
在这种情况下,答案将是:engine-> car-> oil(三个单词组合)。我想找到所有可能的组合,以便最终“引擎”和“油”相互连接。它不是最短路径或最长路径,而是所有可能的路径在所有方向和单词上运行。只要道路不相似,甚至可以有1000个单词组合来达到“引擎”和“油”。
有没有办法做到这一点。我尝试先使用面包,但这有点棘手。例如,组合可以是。
任何人都可以帮助我。这里的逻辑和想法是什么。我不能忽略我已经访问过的一个词,因为那样会在那里停止算法,而不是给我所有的链接。
请提供帮助和见解。
感谢。
fa323
答案 0 :(得分:2)
你的问题如此严格......即使在你的例子中,也不清楚为什么答案不包括engine->an->oil
。
此外,它实际上与树无关,而是处理图形。
您需要做的第一件事是确定如何构建图表。这样做的一种合理方法是,如果它们都出现在特定的句子中,则在两个单词之间有一个优势。
然后你必须决定你想要输出什么。我非常怀疑你想要所有的道路。为什么?好吧,如果你构建我描述的图形,那么即使只使用你的第一个句子,也有24条从引擎到油的路径,不计算带循环的路径。但是,如果这是您想要的,您可以通过深度优先搜索找到图形中的所有非循环路径,在此处标记在堆栈上推送时访问的节点,并在取消时取消标记。