我遇到了一个问题。 有一句话(比方说包含数百万字)和单词是重复的(例如句子是:"我的名字是ram,我的名字是shyam,ram是工程师,shyam也是工程师"依此类推)。
目标是:
有人可以建议哪种数据结构最适合此要求。
答案 0 :(得分:2)
如果这些是唯一的要求,我会使用一个简单的字节数组。
关键是预处理和后处理。作为预处理器,我将使用一个好的串压缩器,如GZIP或7z。正如您所料,后处理器只会解压缩数据。
答案 1 :(得分:0)
由于您只能存储一次单词,因此自然的解决方案是将每个唯一单词存储一次,并列出每个单词出现的索引。我会使用某种哈希表将字符串映射到无符号积分列表(数据类型中的字节数取决于文本的长度),积分是每个单词的位置。
答案 2 :(得分:0)
一种可能的方法是使用这三种数据结构:
1)整数向量(比如V1),用于存储V2中的单词索引
2)字符串的矢量(比如V2),用于存储不同的单词
3)用key = string和data = integer(比如M)映射,检查当前单词是新的还是已经出现,如果已经出现,则指向V2中的索引
存储步骤:
1)从句子中提取单词
2)检查地图M中是否已存在该词
- > 2.1)如果存在,获取该密钥的数据值并存储在索引中
- > 2.2)如果不存在,则在V2的末尾插入并获取索引,并在M中将索引存储为一对
3)将索引存储在V1的末尾
4)如果句子没有结束转到1)
重建的步骤:
创建空字符串数据结构以存储句子
1)从V1读取整数并存储在索引中
2)将 index 的V2字符串附加到 string
3)从开始到结束的顺序重复V1中的每个整数
注意:要处理空格,换行符等特殊字符,请将它们视为单独的单词。