1

我目前正在尝试确定给定数组(数字 1 到 n 的排列)是否是任何二进制字符串的后缀数组。

例如对于 n = 3,A = {2, 1, 3} 是有效的,因为存在 [01] < [1] < [101] 的二进制字符串 [101](使用字典顺序)。但是 {2, 3, 1} 不是一个有效的后缀数组,因为不存在字典顺序适用的二进制字符串。

我目前的方法只是枚举长度为 n 的所有二进制字符串,并检查后缀数组是否按每个字符串正确排序。这显然相当慢,因为有 2^n 个候选二进制字符串要在 O(n) 中进行检查。

解决这类问题的明显方法是在有效的后缀数组中寻找相似之处,但是到目前为止我只能推断出一个属性:

如果 A 是二进制字符串的有效后缀数组,则在 A 前面加上 1 并递增 A 的所有值也会产生一个有效的后缀数组。

但是,在尝试验证它们时,此属性对不以 1 开头的后缀数组没有帮助。

4

0 回答 0