Now I'm sure there's a way to send more data. I'm gonna lose sleep over this.
Harder Math/CS Problem - Page 2
Blogs > Slithe |
BottleAbuser
Korea (South)1888 Posts
Now I'm sure there's a way to send more data. I'm gonna lose sleep over this. | ||
Muirhead
United States556 Posts
| ||
zdd
1463 Posts
given matrix: 11011001 01010010 10101010 01010101 10111001 11010010 10110110 signal A: 01011001 01010010 10101010 01010101 10111001 11010010 10110110 signal B: 10011001 01010010 10101010 01010101 10111001 11010010 10110110 signal C: 11111001 01010010 10101010 01010101 10111001 11010010 10110110 signal D: 11011001 01010010 10101010 01010101 10111001 11010010 10110110 edit: oh nvm you figured it out already, while I was typing. | ||
BottleAbuser
Korea (South)1888 Posts
The signals A, B, C, or D can be found by looking at the first three bits in the first line. However, we can also send signals A', B', C', and D' by the following method. If the starting parity of the first line is the same as the parity of the second line, then we will send A, B, C, or D on the SECOND line. These will denote A', B', C', and D', in the resulting state where the parity of the first and second lines are DIFFERENT. A, B, C, and D can still be sent via the first line. Therefore, if the parities of the lines are different, the receiver looks at the second line, and if they are the same, the receiver looks at the first line. However, in the case that the parities are different to start with, we're going to write in the opposite side of the first case. Now, we can send 8 different messages! Err, no, that's wrong. It won't work I need hint, or the bottle abuser will be getting angry. | ||
Polemarch
Canada1564 Posts
Here's a proof that the upper bound is 64: + Show Spoiler [Proof upper bound is 64] + Suppose 65 messages were possible. Take any initial starting matrix, then the sender can send at most 64 matrices (by picking one of the 64 entries to switch from the initial one); so at least one of the messages is unsendable, no matter how you assign matrices to messages. Now here's a protocol that achieves 64. + Show Spoiler [Description - might make sense] + Instead of having an 8x8 matrix with 64 entries, let's have a 2x2 matrix with 4 entries and show how to get easily 4 messages in a generalizable way. For a matrix M, the decoder calculates the following two functions: f_0(M) = count if the number of 1's in the first column is even f_1(M) = count if the number of 1's in the first row is even Then there's 4 possible messages formed by combining the two possibilities in each of f_0, f_1. The encoder does the following: Call the initial matrix the encoder gets N. Say he wants to send the message g_0, g_1. So he calculates f_0(N), f_1(N). Then if he wants to change f_0 (i.e. g_0 is different from f_0(N)), then he needs to make a change in the first column. Similarly, if he wants to change f_1 then he needs to make a change in the first row. He can choose to do this independently for rows and columns, e.g. if he wants to change both f_0 and f_1, he can change the entry in the first row and first column; if he wants to change just f_0, then he can change the entry in the first column, second row. So he can send any two bits this way, no matter what the starting arrangements are. You can generalize this argument to sending 3 bits (i.e. 8 messages) using the 8 corners of a cube instead of a matrix. To do this, the receiver now looks at the rows, columns, and the towers along the 3rd dimension. (The receiver will now be adding up 4 numbers each time.) You can also generalize it to sending 6 bits (i.e. 64 messages) using the 64 corners of a 6-dimensional hypercube. This is the same as the 8x8 matrix in the original problem if you rearrange the 64 numbers in the 8x8 matrix. + Show Spoiler [Description - probably won't mak…] + ... but it's a little more rigorous. Number the entries of the matrix from 0 to 63, and let M(a0, a1, a2, a3, a4, a5) represent the value of the matrix at the entry when you think of a5,a4,a3,a2,a1,a0 as a binary number (a5 * 2^5 + a4 * 2^4 + ... + a0). The receiver defines 6 functions: f_0 = parity of the sum of M(a0, a1, a2, a3, a4, a5) where a0 = 1. i.e. sum over a1, a2, a3, a4, a5 in {0, 1} of M(1, a1, a2, a3, a4, a5) mod 2. and similarly f_i = parity of the sum of M(a0, a1, a2, a3, a4, a5) where a_i = 1. Then the receiver decodes the matrix by treating the 6 bits f_0, f_1, ... f_5 as a binary number, so there are 64 possibilities. The encoder does the following: Given the initial matrix M, he calculates f_i(M). Then he picks the 6 bits g_0, g_1, ... g_5 for the message he wants to encode. Let S be the subset of {0, 1, 2, 3, 4, 5} of indices i where f_i(M) != g_i. Then he alters M by changing the entry formed by binary number formed by sum_{s in S}{2^s}. e.g. if he wants to change bits #2, 3, then he toggles the entry at (0, 1, 1, 0, 0, 0). | ||
BottleAbuser
Korea (South)1888 Posts
I am so bitterly disappointed at myself and filled with jealousy. Be aware that you have just made a lifelong enemy. >_< | ||
Polemarch
Canada1564 Posts
I did get that myself, but it is tough - spent probably a couple hours working on it. And I did a fair number of math contests before and a couple degrees in CS, so I'm kind of used to this kind of thinking. | ||
Muirhead
United States556 Posts
Thanks so much for the proof. Polemarch did you used to do the Olympiads or perhaps the Putnam? | ||
Muirhead
United States556 Posts
| ||
Slithe
United States985 Posts
The answer Polemarch got is a geometric approach to the problem using Hypercubes. I've heard two other answers before. One involves something about power sets, it's similar to the Hypercube solution I think. The other one is a very elegant solution that utilizes XOR as part of the answer. | ||
Slithe
United States985 Posts
I'll put up another problem tomorrow, but it won't be that hard. | ||
LumberJack
United States3355 Posts
| ||
gwho
United States632 Posts
| ||
Slithe
United States985 Posts
| ||
| ||