我没有详细介绍您的代码,但您似乎在r = p-1的范围内有循环;r <q-1; r ++,而不必执行此操作会很好。
给定ai,我们希望找到给定范围内的xi值,其最高位尽可能多于ai的倒数。一切都在0到2 ^ 15之间,因此不必担心太多事情。对于n =
1到15,您可以根据xi的n个最高位将xi分成几部分,因此将其分为2、4、8、16 ..
32768部分。对于每一部分,请按照找到可能位置的位置的顺序排列一个列表,因此对于最高位,您将有两个列表,其中一个给出位模式为0的位置.........
.....并给出位模式为1的位置.............对于每个三元组,您可以在特定部分上使用二进制印章来查找其中是否有任何位置您要查找的前n位具有位模式的范围。如果有,那就很好。
设置成本是在xi上进行15次线性传递,这可能比您读入它所需的时间要少。对于每一行,您可以进行15次二元运算,以查看xi的哪个值与前n位匹配,并修改如果您无法匹配特定的位,则寻找的高位模式。
我认为,如果通过将问题代码作为单独的子例程来将I /
O与问题代码分开,则您的程序会更清晰。这样也可以更轻松地将问题代码的一个版本与另一个版本进行比较,以查看哪个版本更快,以及它们是否都得到相同的答案。



