我有一个包含500百万个字符串的列表。这些字符串由ASCII字符组成,长度各不相同(通常在2-30个字符之间),并且它们是单词(或没有空格的多个单词的组合,例如'helloiamastring')。
我需要快速检查目标字符串,例如“hi”,结果应该是从这500百万个字符串中以“hi”开头的所有字符串(例如'hithere','hihowareyou'等)。这个过程需要很快,因为每次用户输入时都会进行新的查询,所以如果他键入“hi”,将显示500百万个列表中所有以“hi”开头的字符串,如果他键入“hey”,则显示以“hey”开头的所有字符串等等。
我尝试了Tries算法,但是存储300百万个字符串的内存占用量非常巨大。需要超过100GB的内存。而且我相信这个列表将增长到十亿。
有没有适用于此用例的快速算法?
注:如果没有快速选项,则最好的替代方案是限制输入至少为4个字符,然后再显示结果。那么有没有一种快速检索结果的方法呢?
我需要快速检查目标字符串,例如“hi”,结果应该是从这500百万个字符串中以“hi”开头的所有字符串(例如'hithere','hihowareyou'等)。这个过程需要很快,因为每次用户输入时都会进行新的查询,所以如果他键入“hi”,将显示500百万个列表中所有以“hi”开头的字符串,如果他键入“hey”,则显示以“hey”开头的所有字符串等等。
我尝试了Tries算法,但是存储300百万个字符串的内存占用量非常巨大。需要超过100GB的内存。而且我相信这个列表将增长到十亿。
有没有适用于此用例的快速算法?
注:如果没有快速选项,则最好的替代方案是限制输入至少为4个字符,然后再显示结果。那么有没有一种快速检索结果的方法呢?