How to find F(x,0) when F(x,i) = F(x-1,i) xor F(x-1, i+1) xor … F(x-1,n) in less than linear time

馋奶兔 提交于 2019-12-11 02:07:59

问题


Given a base array, I need to compute the value of a function given below:

A[] = { a0, a1, a2, a3, .. an }

F(0,i) = ai  [Base case] 

F(1,i) = F(0,i) xor F(0,i+1) xor F(0,i+2) ... xor F(0,n)
F(2,i) = F(1,i) xor F(1,i+1) xor F(1,i+2) ... xor F(1,n)
.
.
F(x,i) = F(x-1,i) xor F(x-1,i+1) xor F(x-1,i+2) ... xor F(x-1,n)

0 < x < 10^18
0 < n < 10^5

I need to find F(x,0).

I am trying to solve this equation for the past 3 days. I have failed to optimise it and come up with a feasible solution. Any help to find F(x,0) in less than linear time is appreciated.

My observation (if it is of any importance) :

F(0,0) = a0
F(1,0) = a0^a1^a2^a3 ....
F(2,0) = a0^a2^a4 ....
F(3,0) = (a0^a4^a8...) ^ (a1^a5^a9...)
F(4,0) = a0^a4^a8 ....
F(5,0) = (a0^a1^a2^a3) ^ (a8^a9^a10^a11) ^ (a16^..a19) ^ ...
F(6,0) = (a0^a8^a16...) ^ (a2^a10^a18...)
F(7,0) = (a0^a8^a16...) ^ (a1^a9^a17...)
F(8,0) = a0^a8^a16^ ....

回答1:


Maybe it becomes easier if you reverse the array, with the recurrence relation

F(0, i) = a[n-i]
F(x, i) = XOR[0 <= j < i]( F(x-1, j) )

that is, going from 0 to i instead of i to n. We are then looking for F(x, n). If we make a table:

  | 0        1           2                              3
--+-------------------------------------------------------------------------------------------
0 | A=a[n]   B=a[n-1]    C=a[n-2]                       D=a[n-3]
1 | A        A^B         A^B^C                          A^B^C^D
2 | A        A^(A^B)     A^(A^B)^(A^B^C)                A^(A^B)^(A^B^C)^(A^B^C^D)^B^C^D
3 | A        A^(A^(A^B)) A^(A^(A^B))^(A^(A^B)^(A^B^C))  A^(A^(A^B))^(A^(A^B)^(A^B^C))^(A^(A^B)^(A^B^C)^(A^B^C^D))

or let's stop using the XOR sign and just count how often each term appears:

  | 0   1     2        3           4
--+-----------------------------------------------
0 | 1A    1B       1C          1D             1E
1 | 1A  1A1B   1A1B1C   1A 1B1C1D   1A 1B 1C1D1E
2 | 1A  2A1B   3A2B1C   4A 3B2C1D   5A 4B 3C2D1E
3 | 1A  3A1B   6A3B1C  10A 6B3C1D  15A10B 6C3D1E
4 | 1A  4A1B  10A4B1C  20A10B4C1D  35A20B10C4D1E

We can also see that the recurrence relation is the same as

F(x, i) = F(x-1, i) + F(x, i-1)

This is Pascal's Triangle. Specifically, the values we are after are the nth diagonal, which can of course be calculated on its own. Then check whether the number is even or odd, so that you know whether the XOR operations on that element cancel themselves out or not.



来源:https://stackoverflow.com/questions/46090710/how-to-find-fx-0-when-fx-i-fx-1-i-xor-fx-1-i1-xor-fx-1-n-in-le

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!