创建树形数据结构

3

我有一些数据:

A
AXNHJNEHWXNOECMEJK
DNFJNXYEEQWhsdbchjsxs
XMJQWsdsEOJdfsKMDJE

每一行都是一个数组,每个字母都是一个对象。我有一个比较函数,可以判断字母A与a是否相等(实际上这不是字母。这是俄语单词,比较器函数使用形态学来让我知道这些单词是相等的,例如 матрешка==матрешки==матрешкины,而数组是俄语句子。例如:“Мама мыла раму”)。我想创建一个树形数据结构,它看起来像:

1) A
2.1) BA
2.2) DHBAFH
3.1) BEDMEWA
etc...

否则子节点必须包含来自父节点的字母。如果您知道如何使用Google AdWords,我想您可以理解我的问题。我的问题是如何快速完成这项任务。我需要创建包含数千个数组的树形结构。比较函数运行非常缓慢(它使用大型字典),因此速度是一个真正的问题。
以下是一些简单的数据(对于俄语我很抱歉):
сайты        
сайты недорого
сайты дешево
сайты дешево и быстро
красивый сайт по доступным ценам 
хочу купить хороший стул 
стул по доступным ценам

我们必须创建以下树形数据结构。
1) сайты
1->2.1) сайты недорого
1->2.2) сайты дешево
1->2.3) красивый сайт по доступным ценам 
1->2.2->3) сайты дешево и быстро

其他父节点:

1) хочу купить хороший стул 
1) стул по доступным ценам

子节点必须比父节点包含更多的单词。

1
你能展示一些样本数据,以及你想要从中构建哪棵树吗?因为我不太清楚你想要做什么。 - svick
@Neir0,为什么“красивый сайт по доступным ценам”是“сайты”的子项?因为你的比较器认为“сайты” == “сайт”吗? - svick
@svick 是的。"сайт" 翻译为 "site",而 "сайты" 则翻译为 "sites"。它们是同一个单词的不同形式。 - Neir0
@Neir0,如果一个句子在逻辑上属于两个根节点怎么办?例如,如果你有“сайты”、“недорого”和“сайты недорого”,那么“сайты недорого”应该在树中出现两次,一次在“сайты”下,一次在“недорого”下吗? - svick
@svick 是的。那么,“сайты недорого”有两个父级,即“сайты”和“недорого”。 - Neir0
2个回答

1

好的,但我不知道如何在我的情况下使用它。 - Neir0

1

从一个单词的句子开始。它们都将成为父节点,所以这很简单。

然后继续使用两个单词的句子。你必须将它们与每个单词父节点匹配,这会相当慢,因为你的比较函数很慢。不过你可以进行两个优化:首先检查单词是否完全相同。你可以自己做这个,速度会很快。另一个是记住每对比较单词的比较函数结果。你会浪费一些内存,但会提高一些速度。

当一个节点匹配时,将该句子添加到它中。当该句子没有匹配任何节点时,将其作为父节点。

对于逐渐增加长度的句子,你做同样的事情,只是你必须尝试匹配已匹配节点的子节点,以找到正确的位置来添加该句子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接