:
S ,设置奇数个 n位串
A,特定的n位字符串
显示决定A是否在S中的任何算法必须在最坏的情况下检查A的所有n位。
通常我们当然希望必须查看字符串的所有部分来进行匹配,但是有一些特殊的关于S的奇怪尺寸正在逃避我。
答案 0 :(得分:4)
假设我们有一个算法A,它可以正确地确定S中的成员资格,并且对于任何输入的n位字符串,都表示字符串是否在S中。
假设对于给定的输入n位串s1,算法A从不查看s1的位i并继续说“s1在(不在)S”中。然后一个等于s1的字符串s2除了i翻转的位也在(不在)S中!也就是说,对于我们输入A的任何字符串,如果A没有查看特定的位,那么在该位翻转的情况下(或不在S中)还有第二个字符串。
然后关于奇数尺寸的S集有什么特别之处?我们不能均匀地配对S中的字符串。也就是说,必须有一个字符串s3,A看着并决定是否在S中,为什么没有单个位可以被翻转以在S中形成另一个字符串。所以A必须查看 all 的位s3(否则我们可以制作这样的字符串,就像我们之前做的那样)。
答案 1 :(得分:0)
我想奇怪的数字线索是在memory
找到你的集合或数组的结尾。
假设您使用的是32
位系统,
也许编译器将程序的数据结构与8字节边界的内存对齐。你的数据段中有一大堆字符串指针。如果有一个奇数个字符串,那么下一个需要八字节对齐的东西就有四个字节的填充。如果有一个偶数个字符串,则没有填充。
答案 2 :(得分:-1)
如果我理解正确,那么S是否有奇数或偶数字符串是无关紧要的。对于S中的任何特定字符串,要检查它是否与任意字符串A匹配,您必须检查每个字符串中的每个字符。如果任一字符串比另一个字符串短或者您检查的字符不匹配,则可以提前停止。