Bitcoin Forum

Economy => Services => Topic started by: Evil-Knievel on February 06, 2014, 07:02:08 PM



Title: This message was too old and has been purged
Post by: Evil-Knievel on February 06, 2014, 07:02:08 PM
This message was too old and has been purged


Title: Re: [BOUNTY] 200$ for the first to provide an elegant solution to store integers
Post by: JBrace1990 on February 06, 2014, 08:01:40 PM
This may be too simple, but a first start at what I hope to hit...


[3, 6, 9, 12]

can be stored as : 3060912, 2

where the second number is how many spaces the first ones take up. If less than 2 are there, there is a leading 0.

(too simple, I know).


What is the max size of each of the original integers in bits?


Title: Re: [BOUNTY] 200$ for the first to provide an elegant solution to store integers
Post by: FiatKiller on February 06, 2014, 08:07:11 PM
Are you just looking to reduce storage space? Why not apply the same algorithm to all 4 values?


Title: This message was too old and has been purged
Post by: Evil-Knievel on February 06, 2014, 08:20:20 PM
This message was too old and has been purged


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: FiatKiller on February 06, 2014, 08:38:57 PM
http://stackoverflow.com/questions/919612/mapping-two-integers-to-one-in-a-unique-and-deterministic-way (http://stackoverflow.com/questions/919612/mapping-two-integers-to-one-in-a-unique-and-deterministic-way)


Title: This message was too old and has been purged
Post by: Evil-Knievel on February 06, 2014, 08:43:38 PM
This message was too old and has been purged


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: gzaloprgm on February 06, 2014, 09:14:05 PM
The problem is going back from 2 integers to 4... Unless you want a "lossy compression", it is impossible.

Unless the input numbers have a mathematical property, it's imposible to generalize to every integer... Pigeonhole principle means that there would be inputs that map onto the same output.

If some were able to do it, then you would be able to compress any data into half its size, and by repeating the process you would end up with just one integer. Good luck...



Title: This message was too old and has been purged
Post by: Evil-Knievel on February 06, 2014, 09:22:16 PM
This message was too old and has been purged


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: Ins on February 06, 2014, 09:24:25 PM
Quote
def p a
  a[1].times{|f|puts a[0]*f+3}
end
p [3,4]
ruby, just kidding  ;D


Title: This message was too old and has been purged
Post by: Evil-Knievel on February 06, 2014, 09:26:35 PM
This message was too old and has been purged


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: FiatKiller on February 06, 2014, 11:38:42 PM
Hey, if these are X and Y = Key... can't you derive X and Y from the key and just store the keys? Or do you actually
need one of either X or Y?  (just thinking out loud here...)


Title: Re: [BOUNTY] 200$ for the first to provide an elegant solution to store integers
Post by: tim-tams on February 07, 2014, 12:57:01 AM
BTW: One Int = 32 bits.

In the OP you said,

The storage space of 2 integers (64bit) may not be exceeded

Does this mean you want to store 4 32-bit integers as 2 64-bit integers? Or are all the integers 32-bit and you just mentioned 64-bit as something that we can use along the way.


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: nick32768 on February 07, 2014, 01:24:46 AM
Hi,
I think you should clarify a bit  the problem:
1. Do you need to keep the same order of the numbers ? e.g. f(1,2,3,4) and f(4,3,2,1) should be considered different ?
2. Are there limitations of integers ? i.e. any integer from -2^31-1 to 2^31 ? Or only natural numbers ?

Without some sort of limitations the solution is impossible, as all the compression algorithm knows...

Nick


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: rxd2 on February 07, 2014, 01:59:08 AM
Along the lines of gzaloprgm, here is a detailed mathematical proof of why this is impossible. Note: this proof is valid even if you allow any extra temporary storage, any amount of constants, any extra function and any amount of CPU cycles. In fact, let's take it a step further and prove that not only such a program is impossible, but also no supercomputer/quantum computer/AWESOM-O can do it either.

I am assuming that the problem is: provide a machine (let's call it AWESOMO) that takes as input two 64-bits integers and outputs four 64-bits integers, such that for any array y consisting of four 64-bits integers, there exists an input x of two 64-bits integers such that AWESOMO outputs y when the input is x, i.e. AWESOMO(x) = y.

First let's count how many 4-integers arrays are possible. Each element of the array can be any of the 64-bit integers. So, there are 2^64 = 18446744073709551616 possibilities for each element. Taken together, the number of ways to choose four 64-bits integers is n = (2^64)^4, which is between 10^77 and 10^78. Now, how many ways do we have to choose 2 integers? A similar reasoning gives m = (2^64)^2, which is between 10^38 and 10^39.

Now let's prove that AWESOMO cannot exist. By contradiction. So, assume that AWESOMO exists. Recall (from Wikipedia) that the pigeonhole principle states that "if n items are put into m pigeonholes with n > m, then at least one pigeonhole must contain more than one item". This is not difficult to see why this is true.

Restating our problem, for each possible output y of AWESOMO, there must exist some input x such that AWESOMO(x)=y. Thus, let's try to associate each possible output (item) to an input (the pigeonhole). Well then, since there are more items (arrays of four 64-bits integers) than pigeonholes (arrays of two 64-bits integers), by the pigeonhole principle, there must exists one pigeonhole, i.e. an array of two 64-bits integers that we will call x1, that is associated to at least two items, i.e. two arrays of four 64-bits integers y1 and y2. In other words, these two outputs y1 and y2 are associated to the input x1. Then what should be the value of AWESOMO(x1)? Either AWESOMO can only return a single value and then AWESOMO(x1) is either y1 or y2, or AWESOMO is allowed to be ambiguous and returns both y1 and y2 when the input is x1. The latter is not possible given our definition of the problem (AWESOMO must output a single 4-integers array). The former contradicts that all possible outputs are covered. This is our contradiction.

--

1rxd2Ts2hRXv6WWpxWyYEmNE9fhVczV1F


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: Dare on February 07, 2014, 06:06:35 PM
Let us say we have an array of 4 unsigned integers: [3,6,9,12]
I am looking for a way to express it by 2 integers only.

You can't fit 256 bits of data into a 128 bit space without losing some precision or assuming something about the data. For instance, if every other bit of the data was static, the integers could be interleaved with a constant or two to maintain the static data. Or, if you don't mind using 32-bit integers as data, you can fit 4 of them into the same space as 64-bit integers, since 32*4 = 64*2 = 128.

In C++ (though you might need a static cast or two to make the compiler happy):

To create the 64-bit array from the 32-bit one:
Quote
uint32_t values32[4] = {1, 2, 3, 4};
uint64_t values64[2];
values64[0] = (values32[0] << 32) | values32[1];
values64[1] = (values32[2] << 32) | values32[3];

To restore the array to 4 32-bit integers, use:
Quote
values32[0] = values64[0] >> 32;
values32[1] = values64[0] & 0x00000000ffffffff;
values32[2] = values64[1] >> 32;
values32[3] = values64[1] & 0x00000000ffffffff;


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: tim-tams on February 07, 2014, 09:50:33 PM
...Do you need to keep the same order of the numbers ? e.g. f(1,2,3,4) and f(4,3,2,1) should be considered different?

I think I might have a solution but this matters. Where's the OP? We need this question answered (and several others maybe).


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: 12648430 on February 07, 2014, 10:45:24 PM
...Do you need to keep the same order of the numbers ? e.g. f(1,2,3,4) and f(4,3,2,1) should be considered different?

I think I might have a solution but this matters. Where's the OP? We need this question answered (and several others maybe).

No you don't, lol. You have 64 bits of storage space. If order doesn't matter, the data to store is an unordered set with repetitions and thus has n-choose-k possibilities, with k=4 and n=2^32+4-1 (multiset coefficient for choosing 4 out of 2^32 possibilities) -- that's more than 2^123. It would take 124 bits to store that many possibilities.


Title: This message was too old and has been purged
Post by: Evil-Knievel on February 07, 2014, 10:59:17 PM
This message was too old and has been purged


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: 12648430 on February 08, 2014, 09:48:11 AM
Since apparently GZA and RJD2's explanations of why this is impossible were a bit obtuse for you, here's an additional way to look at it: If you have a way to store any 4 integers into 2 integers, why not do it again? Take 8 integers, put them into 4, put those 4 into 2. Take 16 integers, put them into 8, into 4, into 2... etc. If you can store 4 integers in 2, you can store any even number of integers in 2 integers. You could compress the entire internet into a number less than 18446744073709551616.


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: FiatKiller on February 08, 2014, 10:11:48 AM
Since apparently GZA and RJD2's explanations of why this is impossible were a bit obtuse for you, here's an additional way to look at it: If you have a way to store any 4 integers into 2 integers, why not do it again? Take 8 integers, put them into 4, put those 4 into 2. Take 16 integers, put them into 8, into 4, into 2... etc. If you can store 4 integers in 2, you can store any even number of integers in 2 integers. You could compress the entire internet into a number less than 18446744073709551616.

Good point! lol  Seems like the only way would be if the dataset follows certain patterns and not literally ANY possible
integer.


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: minerpeabody on February 10, 2014, 12:45:46 PM
Hi all,

While I agree that it _probably_ can't be done, part of me entertains that it possibly can be done.  To me this seems like a basic compression problem.  At first blush, I contemplated using variable length codes organized according to a frequency distribution of the data taken to bits at a time.  This would basically have been huffman encoding where upon evaluating the bit patterns 00,01,10,11 the variable length codes would have looked like 0, 11, 100, 101.  Thus the most frequent bit pattern would be coded as 0, the next most frequent bit pattern 11, and the least frequent bit patterns either 100, or 101.

Unfortunately, this had a best case scenario of 50% compression+the overhead of the frequency table required to map the 2 bit tokens to their variable length equivalents.

The most promising approach in my opinion is dictionary based compression which I believe is the basis of Lempel-Ziv compression.  There however the compression is ultimately limited by the size of the dictionary.

All case however revolve around identifying patterns that allow you to shrink the communicated sample space such that you are counting patterns of data as opposed to individual data items.

MP


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: 12648430 on February 10, 2014, 09:53:03 PM
The most promising approach in my opinion is dictionary based compression which I believe is the basis of Lempel-Ziv compression.  There however the compression is ultimately limited by the size of the dictionary.

There is already a minimal-sized dictionary of the first 2^128 integers: the first 2^128 integers.

Compression feels like it should work because in everyday use, it usually does -- but that's because files generally have patterns, which can be taken advantage of. Compression cannot reduce space taken for some inputs without increasing space taken for others -- it can reduce the minimum required space, but cannot reduce the maximum without restricting the domain.

People have already posted multiple proofs that this cannot be done. The gist is this: there are 2^128 possible sets of 4 integers. If you "compressed" them into 2^64 possible compressed versions, you cannot have a compressed version for every input.


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: gogodr on February 11, 2014, 01:20:18 AM
I doubt this is possible. If someone can make it then he/she can sell it for much more.
He is asking for a perfect lose-less compression method which is a holy grail.
Imagine you can do that, you will be able to make 10TB fit in as little as 2 unsigned integers.
The request here is basically a guaranteed 50% or more lose-less compression.
(a philosopher's stone is a better analogy)



Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: minerpeabody on February 11, 2014, 01:37:18 AM
The most promising approach in my opinion is dictionary based compression which I believe is the basis of Lempel-Ziv compression.  There however the compression is ultimately limited by the size of the dictionary.

There is already a minimal-sized dictionary of the first 2^128 integers: the first 2^128 integers.

Compression feels like it should work because in everyday use, it usually does -- but that's because files generally have patterns, which can be taken advantage of. Compression cannot reduce space taken for some inputs without increasing space taken for others -- it can reduce the minimum required space, but cannot reduce the maximum without restricting the domain.

People have already posted multiple proofs that this cannot be done. The gist is this: there are 2^128 possible sets of 4 integers. If you "compressed" them into 2^64 possible compressed versions, you cannot have a compressed version for every input.

Yes, I get your point but you are correct in that compression does "feel" right.  We're ultimately talking storage.  One might say that 11111111 as characters occupies more storage than 255 stored as characters, which is more than FF when stored as characters, yet when stored as bits it occupies less space than all of these.

The function 3x+2y= 14, describes an infinite number of points.  So I don't think it's necessarily about finding ways to represent 4 numbers using 2, but finding for *each* of the 4 numbers a way to represent them using 2 numbers that can be reversed.  When first contemplating the problem I imagined a spiral

R= a+b*theta

Imagine all of the possible integers in question evenly spaced along the spiral as it wraps around.

Every number along the spiral could be reached using just two numbers: a radius and theta.

Perhaps in the end there wouldn't be much savings because of the resolution you'd need to express tiny angles,  but as a thought exercise, it seemed reasonable.

MP


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: 12648430 on February 11, 2014, 03:39:23 AM
A radius and theta specify INFINITE points. You save as much space as the information you throw away.

You are literally trying to prove that a certain set of integers is a strict subset of itself.


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: minerpeabody on February 11, 2014, 05:35:48 AM
A radius and theta specify INFINITE points. You save as much space as the information you throw away.

You are literally trying to prove that a certain set of integers is a strict subset of itself.
[/quote


All I'm saying is that if you impose a pattern on the data set:


        E D C
     F   3  2  B
       4      1  A
       5    0   9
         6 7 8

Starting at the center of the spiral, every marked position representing a possible data output can be uniquely "touched"/addressed using an angle and a distance.  The spiral can be wound tightly or loosely.  Furthermore, since it can be computed on both sides, as a dictionary, it doesn't have to be transmitted with the data stream.  Whether dealing with 2 values or 4 values, they could be composited into a single value that has an address on the spiral.

I simply haven't proven to myself that expressing data as addresses on a spiral (for instance) won't yield a signficant savings.  I have thought about the fact that I may end up loosing space to account for  the level of precision I might need, but such a system is still somewhat forgiving because my (r, theta - as measured from the center) need only land me to point where the target value is the value closest to where I end up.  So if my desired output is "F" (15), then the angle and distance I communicate doesn't need to land me on top of "F", it only needs to land me closer to F than E, 3, 4, or any other value on the spiral.  I like this approach because it is graphic (I can see and attempt to wrap my mind around it) and fuzzy (can yield integer values without using integer addresses).

Anyway,

Just thinking out loud...

MP


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: FiatKiller on February 11, 2014, 11:47:31 AM
Well, even if the orig challenge is ultimately not possible, at least it spurred a good discussion.  :-D


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: Sheldor333 on February 11, 2014, 01:31:45 PM
Here is how to store 2 integers in 1, taken off a site. It's programmed in C.
It can be modified to store 4 as 2. Only problem is that we have to assume that integers are less then 65535.
Code:
void take2IntegersAsOne(int x)
{
   // int1 is stored in the bottom half of x, so take just that part.
   int int1 = x & 0xFFFF; 

   // int2 is stored in the top half of x, so slide that part of the number
   // into the bottom half, and take just that part.
   int int2 = (x >> 16) & 0xFFFF

   // use int1 and int2 here. They must both be less than 0xFFFF of 65535 in decimal

}


void pass2()
{
  int int1 = 345;
  int int2 = 2342;
  take2Integers( int1 | (int2 << 16) );
}


Another solution:
Let's say I have a function that takes an X and Y coordinate, and returns a longint representing that Point's linear value. I tend to call this linearization of 2d data:
Code:
public long asLong(int x, int y) {
  return ( ((long)x) << 32 ) | y;
}

public int getX(long location) {
  return (int)((location >> 32) & 0xFF);
}

public int getY(long location) {
  return (int)(location & 0xFF);
}
Forgive me if I'm paranoid about order of operations, sometimes other operations are greedier than <<, causing things to shift further than they should.

Why does this work? When might it fail? It's convenient that integers tend to be exactly half the size of longints. What we're doing is casting x to a long, shifting it left until it sits entirely to the left of y, and then doing a union operation (OR) to combine the bits of both.

Let's pretend they're 4-bit numbers being combined into an 8-bit number:
Code:
x = 14     :      1110
y =  5     :      0101

x = x << 4 : 1110 0000

p = x | y  : 1110 0000
           OR     0101
             ---------
             1110 0101
Meanwhile, the reverse:
Code:
p = 229    : 1110 0101  
x = p >> 4 : 1111 1110  //depending on your language and data type, sign extension
                        //can cause the bits to smear on the left side as they're
                        //shifted, as shown here. Doesn't happen in unsigned types
x = x & 0xF:
             1111 1110
         AND 0000 1111
         -------------
             0000 1110  //AND selects only the bits we have in common

y = p & 0xF:
             1110 0101
         AND 0000 1111
         -------------
             0000 0101  //AND strikes again
This sort of approach came into being a long time ago, in environments that needed to squeeze every bit out of their storage or transmission space. If you're not on an embedded system or immediately packing this data for transmission over a network, the practicality of this whole procedure starts to break down really rapidly:

It's way too much work just for boxing a return value that almost always immediately needs to be unboxed and read by the caller. That's kind of like digging a hole and then filling it in.
It greatly reduces your code readability. "What type is returned?" Uh... an int.. and another int... in a long.
It can introduce hard-to-trace bugs down the line. For instance, if you use unsigned types and ignore the sign extension, then later on migrate to a platform that causes those types to go two's complement. If you save off the longint, and try to read it later in another part of your code, you might hit an off-by-one error on the bitshift and spend an hour debugging your function only to find out it's the parameter that's wrong.
If it's so bad, what are the alternatives?

This is why people were asking you about your language. Ideally, if you're in something like C or C++, it'd be best to say
Code:
struct Point { int x; int y; };

public Point getPosition() {
  struct Point result = { 14,5 };
  return result;
}
Otherwise, in HLLs like Java, you might wind up with an inner class to achieve the same functionality:

public class Example { public class Point { public int x; public int y; public Point(int x, int y) { this.x=x; this.y=y; } }
Code:
public Point getPosition() {
  return new Point(14,5);
}
In this case, getPosition returns an Example.Point - if you keep using Point often, promote it to a full class of its own. In fact, java.awt has several Point classes already, including Point and Point.Float

Finally, many modern languages now have syntactic sugar for either boxing multiple values into tuples or directly returning multiple values from a function. This is kind of a last resort. In my experience, any time you pretend that data isn't what it is, you wind up with problems down the line. But if your method absolutely must return two numbers that really aren't part of the same data at all, tuples or arrays are the way to go.

The reference for the c++ stdlib tuple can be found at http://www.cplusplus.com/reference/std/tuple/


Title: This message was too old and has been purged
Post by: Evil-Knievel on February 11, 2014, 03:12:51 PM
This message was too old and has been purged


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: tim-tams on February 11, 2014, 03:16:59 PM
Every number along the spiral could be reached using just two numbers: a radius and theta.

That's because the radius and theta are analogue values. You cannot store every one of those infinite points digitally, even if you use a radius and theta. I'm not ready to commit to saying that this bounty is impossible, but it's beginning to feel like it.


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: minerpeabody on February 11, 2014, 05:51:09 PM
Every number along the spiral could be reached using just two numbers: a radius and theta.

That's because the radius and theta are analogue values. You cannot store every one of those infinite points digitally, even if you use a radius and theta. I'm not ready to commit to saying that this bounty is impossible, but it's beginning to feel like it.

My point is that unless the data stream consists of the entire sample space/list of all possible values, (which in this case, it doesn't) you will never need to be able to store all of those infinite points digitally.  If given 4 numbers, you can identify or create a relationship between those numbers, then you can potentially transmit the relationship as opposed to the data.  In some cases this may be far less data to store or transmit.

For instance, if both sides or rather the encoder and decoder "understood" that the data consisted only of powers of 2, then you could send the data element 256 as 8, a reduction from 9 bits to just 4 (8 bits handles values 0-$FF, $100 is 9 bits, likewise 3 bits handles values 0-$7, 4 bits is required to express the number 8  ). To E-K's point concerning compression, I would propose that this is exactly a compression problem because although your numbers can be in the range of 0-2^32-1, you're only using 4 numbers from that set.  If perfect knowledge existed between encoder and decoder (which of course it doesn't), then you could ultimately express each number using 2 bits: 00, 01, 10, 11

Anyway, I got the spiral idea contemplating nature, spirals, and fractals.  I understand your point about analog vs digital addressing but this problem doesn't have to be solved in terms of ones and zeros.  We can use analogs such as any positive value is 1 and any negative value is 0, or any value greater than or equal to 0.5 is 1 and any value less than 0.5 is 0.  The attribute about the spiral that I like is that the further way from the center you get, the greater the distance between targets which means that you can be "closer" to a target with less resolution in your coordinate system.

I'm not willing to say that this will work, I'm just wondering if we can get around some of the well established limitations by looking at the problem differently and checking to see whether the limitations involved MUST apply to our case.

MP


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: 12648430 on February 11, 2014, 10:50:44 PM
The set of possible inputs has 2^128 values. You're trying to find a way to map them one-to-one into 2^64 "compressed" representations. This is obviously impossible, so you're trying things that are complicated enough that you can't see why they won't work.


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: DeadwoodDan on February 11, 2014, 11:04:19 PM
Also, note that neither rxd2's proof by contradiction nor 12648430's reductio ad absurdum depend in any way on the actual method you use to compress the data.  You're trying to fit 40 pounds of manure in a 20 pound sack, failing, and going "Hmm, but what if I filled it with a hose from below..."


Title: This message was too old and has been purged
Post by: Evil-Knievel on February 11, 2014, 11:06:23 PM
This message was too old and has been purged


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: DeadwoodDan on February 11, 2014, 11:10:03 PM
The set of possible inputs has 2^128 values. You're trying to find a way to map them one-to-one into 2^64 "compressed" representations. This is obviously impossible, so you're trying things that are complicated enough that you can't see why they won't work.

I disagree on that. Let us create a trivial and (stupid) counter example.

- Imagine you have a super computer with a lot of ram (several petabytes)
- Further imagine you have all 2^128 possible combinations lying around in a binary tree structure in your memory.
- the tree would (according to physical laws) have a height of log2(2^128) = 128.
- So you can reach each of those 2^128 entries in at most 128 steps.

Thus: Each of the 2^128 possibilities could be represented by a 8 bit long number.  Or am I completely misunderstanding something? Not sure, I am having a bottle of wine at the moment.

Each branch takes one bit, so you would need (surprise) 128 bits to specify the final leaf.  (Not an actual surprise :))


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: minerpeabody on February 12, 2014, 02:24:39 AM
I understand the point about the folly of trying to use 2^32 things to represent 2^64 things.  I get that, however the point I come to is that we're not looking for a way to express 2^64 things using 2^32 things.  We are looking for a way to express 4 out of 2^64 things.  If you had a data stream that consisted of 2^64 unique symbols, I agree that there is no way to express that stream using less than 2^64 symbols...

BUT

We have a box of 2^64 symbols, and we are looking for a way to describe 4 of them as independently of the box they came from as we can.  If we can do that, then we ultimately only need 4 symbols.

0 1 2 3 4 5 6 7 8 9 A B C D E F

16 is the size of our box, we select 1, 5, 9 and D.  If we predetermine between the encoder and the decoder that 4x+1 is the magic incantation, then we can "compress" a 4 bit code into a 3 bit code  It doesn't matter that the box holds 16 symbols in total.  What matters is the relationship that is "understood" between encoder and decoder.

Yes, EK has given us numbers that can range from 0 to 2^32-1, but we only have to "store" 4 of them and if he gives us a different 4, we can identify a different relationship.  So I'm not disputing anyone's proof, I just currently remain unconvinced that the proofs presented necessarily describe and apply to *this* problem.

Mind you, that doesn't mean that I have an answer for this challenge... but it does mean that I'll probably have to programmatically explore some ideas before I convince myself that it can't be done.

MP


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: 12648430 on February 12, 2014, 07:48:18 AM
Your time would be better spent studying basic math. Failing to find an implementation isn't going to teach you any of the things you're missing here.


Title: This message was too old and has been purged
Post by: Evil-Knievel on February 12, 2014, 08:28:05 AM
This message was too old and has been purged


Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: minerpeabody on February 12, 2014, 12:22:55 PM
Your time would be better spent studying basic math. Failing to find an implementation isn't going to teach you any of the things you're missing here.

No need to be insulting, I would wager that most here have studied "basic" math.  The fact remains that compression is used and works everyday.  Math is a tool, this is a challenge.  We don't have to compress every number in existence, we only need to find the best way to compress 4.  If they happen to be 4 identical numbers, then the problem is trivial.  The only thing that is ultimately required is to either find or create an exploitable relationship between the numbers.

Perhaps your time would be better spent studying basic history, because history is just as "full" of things that _got_ done as it is of people who made proclamations about what couldn't be done.  Even if *I* can't do it, it still doesn't mean that it can't be done.

Btw, in my first attempt, I already using a modified huffman encoding scheme figured out how to consistently represent 128 bits in about 85.

0, 11, 100, 101

MP





Title: Re: [BOUNTY] 200$ for the first to store 4 integers as 2 !!!
Post by: FiatKiller on February 12, 2014, 01:20:55 PM
MP, I agree. The mathmeticians are focused on "proofs", but they assume that the proof is correct, which may not
be the case if someone erred creating & checking that proof. And the proof may not apply to this particular situation.

They said we could never land on the moon, but we did!  :-D

Keep thinking outside the box.