后缀数组使用了多少空间?

时间:2013-06-06 10:29:43

标签: data-structures space analysis suffix-array

刚刚检查了http://en.wikipedia.org/wiki/Suffix_array有关后缀数组的信息。
它说它需要O(n长)空间,而字母表的大小是sigma。空间要求将是O(博客西格玛)位?

无法获得两者的想法..

这是我对后缀数组的了解。
后缀数组是具有n个整数的整数数组。那么,它需要O(n)* 8字节?作为一个整数,我们需要8个字节。对于数组本身,我们需要O(n)字节?假设有n个字符。

1 个答案:

答案 0 :(得分:0)

实际上,后缀数组 - 假设没有使用压缩技术 - 是一个整数数组。但是整数不需要恰好8个字节。

存储整数需要多少位?答案取决于整数的范围。如果范围是[0,2],即您感兴趣的唯一数字是0和1,那么您需要1位来存储该整数。

如果您的范围是[0,4],即您想要表示0,1,2和3,那么您需要两位:00,01,10和11是这两个位的四种可能组合用来表示四个不同的数字。

如果范围最多为8个数字,则需要3个数字,最多16个需要4个等。一般来说,对于R个不同数字的范围,您需要ceil(log 2 (R))位。

后缀数组需要多少位?我假设文本的长度是N个字符。然后后缀数组的长度也是N,并且其每个整数指的是文本位置,即每个整数的范围是[0,N)。因此,您需要ceil(log 2 (N))位来存储每个整数,并且由于总共有N个整数,因此总空间要求为N ceil(log 2 < / sub>(N))位(不包括文本本身的空间)。

(但请注意,最近关于后缀数组的大部分研究都是关于压缩它们,即找到仅使用O(N)位的方法(这称为简洁表示),甚至更少,即o(N)位(真正的压缩)。上面的简单计算仅适用于没有使用任何压缩技术的标准情况。)

(另请注意,在实践中,许多实现只使用unsigned int或类似的东西来表示整数,然后以位为单位获得N*sizeof(int)*CHAR_BIT的大小要求。)