Sunday, February 14, 2016

What not to listen to while driving

We were driving on the road today and listening to "In the shadow of the mountain king" from Peer Gynt by Edvard Grieg when my son remarked: "This is not a good piece of music to listen to when driving, it makes you drive faster and faster."  My wife replied: "The same is true for Bolero".  I tend to agree.  Luckily, my driving is not affected by the tempo of the music and we reached our destination safely.

Friday, February 12, 2016

The curse and blessing of exponential growth

Exponential growth is a common phenomena occurring all around us.  Sometimes it is good, other times not.  Simply speaking, we talk about exponential growth if some quantity is increasing as an exponential function of another quantity, i.e. y = abx.

The Good:
  1. Typically when you put your money  in the bank, your banks pays you interest as a percentage of your money, i.e. if you have \$100 in the bank and the bank pays you 5% interest a year, then you will have 1.05$\times$\$100 = \$105 after one year.  Assuming the interest rate is constant, if the next year, the bank only pays you 5% of the original \$100, then your gain will be \$5 year after year, i.e the money in the bank is 100+5n after n years.  But because of compound interest, i.e. your interest will also earn interest, you will receive 5% of \$105 = \$5.25 in interest the second year and the money in the bank will be will be \$100*1.05n after n years, i.e. an exponential growth.  If you can appreciate how fast exponential growth is, this is the best reason for anyone to save money early.
  2. In cryptography, making the number of possibilities that an encryption key can take on large is an important idea to make cryptographic techniques secure.  This is akin to choosing a long password.  The number of combinations grows exponentially with the number of digits.  For instance, a n-digit decimal number has $10^n$ possible combinations.
The not so Good:
  1. In the analysis of computer algorithms, many known algorithms for solving hard NP-complete problems (such as 3SAT) have time complexity exponential in the problem size.  This means that the size of the problem that can be solved will be limited.
  2. Many models of growth assumes an exponential growth rate, but this cannot be sustained indefinitely in a finite universe.  Some examples are Moore's Law or models of population growth.  Models of chaotic systems such as the Lorenz system and Chua's circuit also experience exponential divergence of trajectories on a small scale, but on a larger scale the trajectories remain bounded.

Monday, February 8, 2016

Parity of binomial coefficients

Consider the binomial coefficient C(n,m) = n*(n-1)*...*(n-m+1)/(m*(m-1)*...*2*1).  When is this number odd and when is it even?  In this post, we use Lucas' theorem to provides a simple characterization of this.  Lucas' theorem states that for integers $m$, $n$ and prime $p$, the following relationship holds:
\[ C(n,m) \equiv \prod_{i=0}^{k} C(n_i, m_i) \mod  p \]
where $n_i$ and $m_i$ are the digits of $n$ and $m$ in base $p$ respectively, with $n_0$ and $m_0$ being the least significant digits.

When $p=2$, $n_i$ and $m_i$ are the bits in the binary expansion of $n$ and $m$ and $C(n_i, m_i)$ is $0$ if and only if $n_i < m_i$. This implies that $C(n,m) \equiv 0 \mod 2$ if and only if  $n_i < m_i$ for some $i$.

The truth table for  $n_i < m_i$ is:

\[\begin{array}{ c | c || c }
  n_i & m_i & n_i < m_i \\ \hline
  0 & 0 & 0 \\
  0 & 1 & 1 \\
  1 & 0 & 0 \\
  1 & 1 & 0 \\
\end{array}\]

i.e., it is logically equivalent to $m_i AND ( NOT n_i)$.  If we think of $AND$ and $NOT$ as bitwise operations on the binary representation of numbers, then we have shown that:

$C(n,m) \equiv 0 \mod 2$ if and only if $m AND ( NOT n)$ is not zero.

A simple Python function that implements this statement is

def bincoefmod2(n,m): 
# computes binomial(n,m) mod 2
    return 0 if ~n & m else 1

or equivalently:

def bincoefmod2(n,m): 
# computes binomial(n,m) mod 2
    return int(not ~n & m)


Incidentally, for bits $n_i$ and $m_i$, $n_i < m_i$ is logically equivalent to $NOT (m_i\Rightarrow n_i)$.

Next we consider C(n,m)C(a,b) mod 2.  Clearly this is equivalent (mod 2)  to (C(n,m) mod 2)*(C(a,b) mod 2).  Thus $C(n,m)C(a,b) \equiv 0 mod 2$ if and only if $m AND ( NOT n)$ is not zero or $b AND ( NOT a)$  is not zero.  This in turns implies the following:

\[\begin{array}{l}
C(n,m)C(a,b) \equiv 0 mod 2 \Leftrightarrow \\
(m AND ( NOT n)) OR (b AND ( NOT a)) \ne 0
\end{array}\]

where OR is a bitwise operation. The corresponding Python function is:


def bincoefprodmod2(n,m,a,b): 
# computes binomial(n,m)*binomial(a,b) mod 2
    return 0 if (~n & m)|(~a & b) else 1

or equivalently:
def bincoefprodmod2(n,m,a,b): 
# computes binomial(n,m)*binomial(a,b) mod 2
    return int(not (~n & m)|(~a & b))



Chinese New Year 2016

Today, February 8, 2016, is Chinese New Year.  Just for fun, I looked through OEIS to see what interesting facts I can find about the leap year 2016.  Here are some facts about the number 2016:


  1. 2016 is the sum of the divisors of both the 42th and the 47th generalized pentagonal number.
  2. 2016 = 3^3+...+9^3 is the sum of 7 positive cubes.
  3. The sum of divisors of 2016 squared is a multiple of 2016.
  4. The 2016th Fibonacci number is a multiple of the sum of divisors of 2016 (= 6552)
  5. Both 2016 and 2016^2 has 0 as smallest digit and 6 as largest digit.
  6. The product of the proper divisors of 2016 is a multiple of the sum of the proper divisors of 2016.
  7. Both the number of divisors of 2016 and the number of positive integers relatively prime to 2016 that are less than or equal to 2016 are perfect squares. 
  8. 2016 = 63*64/2 is a triangular number, i.e, it is the sum 1+2+...+63.
  9. 2016 = 6!+36^2.
  10. 2016 (in base 10) is divisible by the sum of their digits in every base from 2 through to 16.

Monday, December 21, 2015

Another fan awakens

While rewatching Star Wars episodes 1-6, my wife remarked that Han Solo can be roughly translated into Chinese as 單身 (Han sounds like 漢 and solo means single which is 單身) which has the meaning of a bachelor, a suitable way to describe his character.
She also wished that she has the Jedi's mind control powers.  I told her that she already has that power. For instance, when she says "You will take out the trash" and waves her hand, I take the trash outside to the garbage bin.

Thursday, December 17, 2015

The fan awakens

As I mentioned in this post, I have been a longtime fan of Star Wars, as Return of the Jedi was released when I was a teenager. To prepare ourselves to watch the new Star Wars movie, my family and I have been watching the first 6 episodes again over the last couple of weeks.  It has been years since I have seen some of them, and it brought back some nice memories.  I always chuckled at some of names that are used, for instance Admiral Ackbar who looks like a cuttlefish, is from the species Mon Calamari.  Christopher Lee, whose is famous for playing Count Dracula, plays a character called Count Dooku.  And midichlorian sounds like mitochondrion, which are microscopic parts in cells responsible for supplying components for generating energy in the cell .

One thing I remember from my childhood is that there is one part of the Star Wars theme song that sounds exactly like part of a deodorant commercial jiggle I saw on a Venezuelan TV Channel.

Thursday, November 19, 2015

Compression of random data

Over the years, several companies have purported to come up with algorithms that can compress any files, even files of random-looking data.  See here for a review of such claims over the years. Compression here means that the compressed file is of a smaller size than the original file.  The problem with this is that if you keep applying the algorithm to the compressed file over and over again, you would reach a file of the smallest size: a file of a single bit.  Since there are only two possible files of a single bit ("0" or "1"), this simply cannot be the case.  This uses the pigeonhole principle and a similar argument of the impossibility of such an algorithm is as follows.  There are 2n different bit strings of n bits.  On the other hand, there are at most 2n-1 different bit strings of n-1 or less bits.  The pigeonhole principle implies it is not possible to compress all n bits strings to a smaller number of bits.

Based on these arguments, Mike Goldman proposed the following challenge (excerpted from comp.compression faq):

Mike Goldman <whig@by.net> makes another offer:

    I will attach a prize of $5,000 to anyone who successfully meets this challenge.  First, the contestant will tell me HOW LONG of a data file to generate.  Second, I will generate the data file, and send it to the contestant.  Last, the contestant will send me a decompressor and a compressed file, which will together total in size less than the original data file, and which will be able to restore the compressed file to the original state.

    With this offer, you can tune your algorithm to my data.  You tell me the parameters of size in advance.  All I get to do is arrange the bits within my file according to the dictates of my whim.  As a processing fee, I will require an advance deposit of $100 from any contestant.  This deposit is 100% refundable if you meet the challenge.

This appears to be an easier challenge since the compression and decompression algorithm can be tuned to the data generated.  Incidentally, in the following exchange, an attempt is made to win the challenge by exploiting how data is stored in a computer disk system and using the filename as additional storage by splitting the data into many files.

There are several aspects that makes Mike Goldman's challenge possibly solvable and not subject to the constraints of the pigeonhole principle.   First of all, the compression algorithm can be tuned to the data.  In other words, the compression algorithm only needs to compress only one single file.  It doesn't need to compress all files and thus the pigeonhole principle does not apply.  Secondly, the challenge did not prescribe what computer language the decompressor can be written in.  Can it be written in C, Perl, Python or Matlab?  Using a high level language essentially provides the decompressor with complex subroutines that are callable with simple calls, and thus some of the compression can be "hidden" in this way.

Thursday, October 22, 2015

Back to the future of energy storage

Yesterday was "Back to the Future" day, the day when Michael J. Fox's character arrived into the future from the movie "Back to the Future II".  The time machine he used was a DeLorean using a flux capacitor requiring 1.2 Gigawatts of power.  I have written a blog post about flux capacitors a couple of years ago and mused that flux capacitors can be considered as normal capacitors and that a large enough supercapacitor today can generate that amount of power if discharged quickly enough. There were endless discussions about whether the prediction about the future in the movie was accurate or not and one comparison to the DeLorean was the Tesla electric car, especially the Tesla Model X with its Falcon wing doors. While the Tesla cannot fly and still needs roads, it does have autopilot capabilities.  A fully loaded Tesla comes with a 90kWh battery and if it all discharges within a quarter of a second, it would generate the 1.2 Gigawatts needed for time travel.

Monday, September 28, 2015

Supermoon lunar eclipse

Yesterday was a "supermoon" lunar eclipse, when the full moon is closest to earth and a lunar eclipse is happening at the same time.  At the beginning of the evening it was cloudy, but luckily the sky cleared up and we have a great view of the moon outside our garage.  We took some nice pictures of the eclipse:


The next supermoon lunar eclipse will occur in 18 years.

Tuesday, July 28, 2015

Closest integer square

Given a real number $x\geq 0$, consider the following 2 functions: $f(x)$ is the closest square of an integer to $x$, and $g(x)$ is the integer closest to $\sqrt{x}$.
In other words, $f(x) = y$ where $y = m^2$ for an integer $m$ and $|x-y| \leq |x-n^2|$ for all integers $n$.  In case of a tie, i.e. $x$ (resp. $\sqrt{x}$) is midway between two successive squares (resp. integers), we define $f(x)$ (resp. $g(x)$) to be the smallest such square (resp. integer).

The question we like to ask is: is $g(x)^2 = f(x)$ true?  For arbitrary real numbers $x$, the answer is no.

The midpoint between two successive integers $a$ and $a+1$ is $a+\frac{1}{2}$ whose square is $a^2+a+\frac{1}{4}$.  On the other hand, the midpoint between two successive squares $a^2$ and $(a+1)^2$ is $a^2+a+\frac{1}{2}$.  It is interesting to note that the difference between the 2 midpoints is always $\frac{1}{4}$ regardless of what $a$ is (this is true even if $a$ is not an integer).
Graphically this is illustrated as:


This means that for $a^2+a+\frac{1}{4} < x < a^2+a+\frac{1}{2}$, $g(x) = \sqrt{f(x)}+1$.  For instance $2.375$ is closer to $1$ than to $4$, but $\sqrt{2.375} = 1.541...$ is closer to  $2$ than to $1$.

On the other hand if
$a^2 \leq x < a^2+a+\frac{1}{4}$ or $a^2+a+\frac{1}{2} < x \leq (a+1)^2$,
then $g(x)^2 = f(x)$.

This analysis also shows the following facts:

  • If $x$ is an integer, then evaluating $f(x)$ and $g(x)$ do not result in a tie, as the 2 midpoints above are not integers.
  • If $x$ is an integer, then $g(x)^2 = f(x)$ as the interval $[a^2+a+\frac{1}{4}, a^2+a+\frac{1}{2}]$ does not contain any integers.