![]() |
1
6
|
![]() |
2
3
您可以查看基于磁盘的后缀树。我发现了这个 Suffix tree implementation library 通过谷歌,加上一堆文章,可以帮助实现它自己。 |
![]() |
3
2
你可以用分而治之的方法来解决这个问题。我认为这应该是和使用trie一样的算法复杂性,但可能在实现方面效率较低。
在此之后,您需要创建一个实现diskbackedbuffer的类,使其成为一个数字列表,当缓冲区达到一定大小时,它将使用临时文件将自己写到磁盘上,并在读取时从磁盘调用。 |
![]() |
4
2
回答我自己的问题: 考虑到长匹配也是短匹配,您可以先找到短匹配,然后查看是否可以“增长”这些匹配,从而将多个通行证交换为RAM。 这种方法的文字化方法是对数据中某个固定长度的所有序列构建一个trie(每个节点都有计数)。然后剔除所有不符合条件的节点(例如最长匹配)。然后做一个后续的数据传递,构建出更深的trie,但不是更宽的trie。重复,直到找到重复时间最长的序列。 一个好朋友建议使用哈希。通过散列从每个字符开始的固定长度字符序列,您现在有了查找重复散列值的问题(并验证重复,因为散列是有损的)。如果为数组分配数据长度以保存哈希值,则可以执行一些有趣的操作,例如,要查看匹配是否比固定长度的数据传递长,只需比较哈希序列,而不是重新生成它们。等。 |
![]() |
5
2
像这样的简单程序怎么样:
|
![]() |
6
1
这篇文章有断字吗?然后我怀疑你想在上下文中改变关键词:对一行中的n个单词复制每行n次,在每个单词处破坏每行;对整个单词的alpha排序;寻找重复。 如果它是一个长的按喇叭的字符串,比如说生物信息学的DNA序列,那么你需要在磁盘上建立类似trie的东西;为每个字符建立一个记录,并为下一个节点建立一个磁盘偏移量。我想看看第三卷 Knuth 第5.4节“外部排序”。 |
![]() |
7
0
你能通过建立一个 suffix array 相反?否则,您可能需要使用其他答案中提到的基于磁盘的后缀树之一。 |
![]() |
8
0
只是我想到的一个迟来的想法… 取决于您的操作系统/环境。(例如,64位指针&mmap()可用。) 您可以通过mmap()在磁盘上创建一个非常大的后缀树,然后在内存中保存该树最常访问的缓存子集。 |
![]() |
9
-1
最简单的方法可能就是 plunk down the $100 为了更多的公羊。否则,您可能需要查看磁盘支持的结构来保存后缀树。 |
![]() |
Ben · 统计向量中的单词在字符串中出现的频率 6 月前 |
![]() |
bear_525 · 从列中删除中间名和首字母,并保存在单独的列中 7 月前 |
![]() |
asdfadf · 为什么具有相同内存值的字符串和整数打印方式不同? 7 月前 |
![]() |
user764754 · 防止多行原始字符串文字中出现新行字符 8 月前 |
![]() |
Bogaso · 从列表中返回与模式匹配的元素 8 月前 |
![]() |
Jasco · 如何使用VBA提取两个相似字符之间的字符串中的单词? 8 月前 |