创建树数据结构

时间:2011-05-21 14:37:48

标签: c# algorithm morphological-analysis

我有一些数据:

A
AXNHJNEHWXNOECMEJK
DNFJNXYEEQWhsdbchjsxs
XMJQWsdsEOJdfsKMDJE

...

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

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

否则子节点必须包含父节点的字母。如果你知道如何工作谷歌adwords我认为你可以理解我。我的问题是如何快速做到这一点。我需要创建具有数千个数组的树。比较功能工作非常慢(它使用大字典),这就是为什么速度是真正的问题。

一些简单的数据(对不起俄语):

这里是一组句子

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

我们必须创建以下树数据结构

1) сайты
1->2.1) сайты недорого
1->2.2) сайты дешево
1->2.3) красивый сайт по доступным ценам 
1->2.2->3) сайты дешево и быстро

其他父节点:

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

子节点必须包含更多单词,然后是父节点。

2 个答案:

答案 0 :(得分:1)

那么,

似乎此链接可能对您的问题有所帮助

使用后缀树快速搜索字符串:http://marknelson.us/1996/08/01/suffix-trees/

后缀树

http://en.wikipedia.org/wiki/Suffix_tree

答案 1 :(得分:1)

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

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

当节点匹配时,将句子添加到其中。当句子与任何节点不匹配时,将其设为父节点。

对于长度逐渐增加的句子,除了必须尝试匹配匹配的节点的子节点外,您也会这样做,以找到添加句子的正确位置。