如何有效地存储一组字符串空间

时间:2014-10-14 14:52:11

标签: python string algorithm

假设我们有一组字符串

{"abc","def","ghia"}

存储字符串的节省空间的方法是什么? 另外,给定一个像“abc”或“abc1”这样的输入字符串,我需要找出"abc"(是)或"abc1"(否)是否在字符串列表中,如果不是,添加到字符串列表。

进一步假设我们所有字符串只有26个小写字母,字符串的长度为0到无限。

2 个答案:

答案 0 :(得分:1)

听起来像是在寻找trie

但请注意,考虑到元素是无序的(并且在一个天真的实现中)不支持重复,因此trie更像是一个集合而不是列表。

答案 1 :(得分:0)

这取决于你的限制。 R-way trie是检索存储数据的快捷方式之一,它也提供了一种确定数据是否在集合中的方法,但R-way需要(R + 1)N个存储空间,所以27N在你的case(N代表数据的数量,R代表你的角色域)。

还有其他类型的trie需要更少的内存,例如Ternary Search Trie。但它需要4N的空间。 如果内存的足迹是第一个问题,那么这比OrderedDict更好。

因此,如果您不能使用那些类似的东西,您可以制作自己的数据类型,5位数据类型。 因为26个字符只能用5位表示。 例如," abc"的ISO9959-1编码是" 0b01100001,0b01100010,0b01100011", 但这些可以是0b00001 00010 00011 [0](填充为0)。

nChars           1  2  3  4  5
8byte-rep        8 16 16 24 32
5bits-rep.       5 10 15 20 25    
actual-req       8 16 24 32 40
(with 8bits-packing)
diff(saving)     0  0  8  8  8