我正在处理一些需要大型(常量)二进制数组的代码。由于它包含大量的常量跨度(全为0或全为1),因此我将其分成了两级表,允许省略重复跨度(无论是常量还是其他),如下所示:
bitn = table2[table1[n/256]+n%256/8]&1<<n%8
此时,
table1
中的所有条目都是32的倍数(256位),但我想知道是否可以通过允许 table2
中的跨度重叠来实现显著的节省。因此我的问题是(用抽象形式陈述):给定长度为 K 的 N 个字符串 { S_n : n=1..N },有没有一种有效的方法找到最短的字符串 S,使得每个 S_n 都是 S 的子字符串?
(请注意,由于我可能希望保持我的位数组为8位对齐,所以我特定应用该问题时可能会处理8位字节而不是位字符串,但该问题在任何字符 - 位、字节或其他方面都是有意义的。)