Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Kolmogorov Complexity Approximation Algorithm

I'm looking for a algorithm that can compute an approximation of the Kolmogorov complexity of given input string. So if K is the Kolmogorov complexity of a string S, and t represents time, then the function would behave something like this.. limit(t->inf)[K_approx(t,S)] = K.

like image 654
Tony Avatar asked Aug 19 '10 14:08

Tony


People also ask

How is Kolmogorov complexity measured?

If a description d(s) of a string s is of minimal length (i.e., using the fewest bits), it is called a minimal description of s, and the length of d(s) (i.e. the number of bits in the minimal description) is the Kolmogorov complexity of s, written K(s). Symbolically, K(s) = |d(s)|.

What is Kolmogorov complexity used for?

Kolmogorov Complexity can be viewed as the ultimate compressor—producing for any arbitrary string (or file or image), a minimum description of that string, given some form of description language.

Why is Kolmogorov complexity not computable?

Kolmogorov complexity isn't computable in the sense that there isn't a single function or Turing machine that will return the complexity of an arbitrary string. A C compressible string can be reduced by C symbols by a compression program. A string that cannot be reduced by even one symbol is said to be incompressible.

What do you mean by algorithmic complexity?

Algorithmic complexity is concerned about how fast or slow particular algorithm performs. We define complexity as a numerical function T(n) - time versus the input size n. We want to define time taken by an algorithm without depending on the implementation details.


1 Answers

In theory, a program could converge on the Kolmogorov complexity of its input string as the running time approaches infinity. It could work by running every possible program in parallel that is the length of the input string or shorter. When a program of a given length is found, that length is identified as the minimum length known for now, is printed, and no more programs >= that length are tried. This algorithm will (most likely) run forever, printing shorter and shorter lengths, converging on the exact Kolmogorov complexity given infinite time.

Of course, running an exponential number of programs is highly intractible. A more efficient algorithm is to post a code golf on StackOverflow. A few drawbacks:

  • It can take a few days before good results are found.
  • It uses vast amounts of our most valuable computing resources, costing thousands of dollars in productivity loss.
  • Results are produced with less frequency over time as resources are diverted to other computations.
  • The algorithm terminates prematurely for many inputs, meaning it does not work in general.
like image 53
Joey Adams Avatar answered Nov 14 '22 03:11

Joey Adams