<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2319501700883201774</id><updated>2011-11-08T12:58:24.446-05:00</updated><category term='Atheism'/><category term='Proof'/><category term='Graphs'/><category term='Mathematics'/><category term='Evolution'/><category term='Physics'/><category term='Pictures'/><category term='God Hypothesis'/><category term='History'/><category term='Primes'/><category term='Problems'/><category term='Movies'/><category term='Science'/><category term='Practical'/><category term='News'/><category term='Programming'/><category term='Unsolved Problems'/><category term='Politics'/><category term='Time Travel'/><title type='text'>Tyler and Foxy's Scientific and Mathematical Adventure Land</title><subtitle type='html'>Computation, mathematics, science, politics and much cartoony cuteness.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default?start-index=101&amp;max-results=100'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>186</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-8648987115411441608</id><published>2008-04-04T18:51:00.003-04:00</published><updated>2008-04-04T18:58:32.471-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Problems'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Integer Partitionings: 3-Partitions</title><content type='html'>This will be, I think, a relatively gentle treatment of what could be a rather complicated matter.&lt;br /&gt;&lt;br /&gt;The problem came up in problem seminar this week, the matter of integer partitioning. Specifically, given an integer n, how many different ways can you write it as the sum of smaller integers? More specifically, and a notably easier problem, how many different ways can you write it as the sum of three smaller integers?&lt;br /&gt;&lt;br /&gt;For example, 6 can be written as 1 + 4 + 1, 3 + 2 + 1, and 2 + 2 + 2. Notice that we're counting 1 + 4 + 1 as the same as 4 + 1 + 1. 5 can be written as 1 + 1 + 3, 1 + 2 + 2. So the number of 3-partitions for 6 is 3, and the number of 3-partitions for 5 is 2. Clearly 0, 1, and 2 all have no 3-partitions, and 3 has one, 1 + 1 + 1. But for a general n, how many are there?&lt;br /&gt;&lt;br /&gt;The basic approach is going to be to come up with a method of constructing all 3-partitions of a given number, and then the formula for the total number falls out almost automatically. What follows then is a reduction from the initially simple to understand but difficult to compute formula to a relatively difficult to understand but surprisingly simple formula. It's interesting.&lt;br /&gt;&lt;br /&gt;So, we have an integer n, and we want to construct a 3-partition of it. Constructing a partition basically amounts to choosing 3 integers i, k, j such that i + k + j = n.&lt;br /&gt;&lt;br /&gt;Notice though, that we want to, in picking our numbers, avoid duplication. For example, when n = 6, we want to avoid choosing 1, 1, 4 and also 1, 4, 1. To avoid this, we're going to make sure to pick our numbers in sorted order. That is, we're going to make sure that the first number we pick will be the smallest of the three, and that the second number we pick will be at least as big as the first, and that the third is at least as big as the second. We'll call them, in order, i, k, j.&lt;br /&gt;&lt;br /&gt;So, how many values can we pick for i, the smallest of the three? Clearly the smallest value we can have for i is 1. But what is the largest? i can be, at most, n/3. Think about it. If i is greater than n/3, then what is left of n to partition between k and j? Something less than n - n/3, or 2n/3. Partitioning 2n/3 between two numbers, one of them is going to have a value less than n/3 - but this contradicts our definition of i as the smallest of the three. Therefore, i is at most n/3.&lt;br /&gt;&lt;br /&gt;But, since we're dealing with integers, i is really at most n/3, rounded down to the nearest integer. In math speak, this is the floor of n/3, or &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Clfloor%20n/3%20%5Crfloor" align="middle" border="0" /&gt;. So, for example with n = 5, n/3 is 1 and 2/3rds, which rounds down to 1. Looking back up at the introduction, you'll see that in the two partitions I give for n = 5, the smallest number in each case is 1.&lt;br /&gt;&lt;br /&gt;So, we declare a value for i between 1 and &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Clfloor%20n/3%20%5Crfloor" align="middle" border="0" /&gt;. Notice though, that since k and j are at least as big as i, in deciding the value of i, we've 'pre-partitioned' 3*i of the total n. We know that the sum of the partition is going to be at least i + i + i. So really, in choosing k and j, what we're doing is partitioning n - 3*i between k and j, each of which is already at least i.&lt;br /&gt;&lt;br /&gt;So, having picked a value for i, and thus set a minimum value of k, how can we partition n - 3*i between k and j such that j is greater than or equal to k? Similar to before, we can add, at most, half the remaining value to be partitioned to k. If we add any more, we'll end up adding less value to j, and k will be greater than j - which violates how we're setting things up. Remembering the fact that k must be an integer though, we can add at most &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Clfloor%20%281/2%29%28n%20-%203%20i%29%20%5Crfloor" align="middle" border="0" /&gt; to k. That gives us the upper bound. For the lower, remember that it's perfectly acceptable for i to equal k, but k cannot be less than i, so i is a lower bound for k.&lt;br /&gt;&lt;br /&gt;To summarize,&lt;br /&gt;&lt;br /&gt;We have that i is between 1 and &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Clfloor%20n/3%20%5Crfloor" align="middle" border="0" /&gt;.&lt;br /&gt;We have that k is between i and i + &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Clfloor%20%281/2%29%28n%20-%203%20i%29%20%5Crfloor" align="middle" border="0" /&gt;.&lt;br /&gt;&lt;br /&gt;Now what of j?&lt;br /&gt;&lt;br /&gt;This is largely a trick question. Remember that we're after i + k + j = n. If we've chosen values for i and k, then j = n - (i + k). There's only one choice for j. And, by the way we've bounded our choices for i and k, it guarantees that j is the largest of the three numbers.&lt;br /&gt;&lt;br /&gt;And that's it : ) This gives us a method for constructing all the partitions of n into 3 integers, such that no partition is constructed twice.&lt;br /&gt;&lt;br /&gt;Now, as to counting the number of such partitions, it amounts to counting every possible choice of i and k. So, we basically count through every i, and for each i count through every possible k, and sum the number of times we do this Counting amounts to adding 1 a certain number of times. Thus we have our partition counting function,&lt;br /&gt;&lt;p style="text-align: center;"&gt;&lt;/p&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20P_3%28n%29%20=%20%5Csum_%7Bi%20=%201%7D%5E%7B%20%5Clfloor%20n/3%20%5Crfloor%20%7D%20%5Csum_%7Bk%20=%20i%7D%5E%7B%20i%20+%20%5Clfloor%20%281/2%29%28n%20-%203%20i%29%20%5Crfloor%20%7D%201" align="middle" border="0" /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;That's the easy to understand formula, because you can see where every part of it comes from. Now to simplify : ) Notice though that it is difficult to compute, because it basically amounts to running through every possible partition, though in a convenient way, and counting them. If there are 10000000 bajillion partitions, that double sum will take a long time to compute.&lt;br /&gt;&lt;br /&gt;Firstly, summing 1 over a given range is just equal to the number of numbers in that range. So we can reduce the double sum to a single sum of the form&lt;br /&gt;&lt;p style="text-align: center;"&gt;&lt;/p&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20P_3%28n%29%20=%20%5Csum_%7Bi%20=%201%7D%5E%7B%20%5Clfloor%20n/3%20%5Crfloor%20%7D%201%20+%20%5Clfloor%20%281/2%29%28n%20-%203%20i%29%20%5Crfloor" align="middle" border="0" /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;Now instead of summing over all possible i and then all possible k, we've reduced it to a sum over all possible i. But we can do better. Notice, for example, that the floor function isn't very ... managable. There's not a lot you can do with it algebraically. But we can replace it with something just as good.&lt;br /&gt;&lt;br /&gt;First, think about &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Clfloor%20%281/2%29%28n%20-%203%20i%29%20%5Crfloor" align="middle" border="0" /&gt;. If n - 3*i is even, then it is divisible by 2, and floor of half that is an integer, equal to (1/2)(n - 3 i). If n - 3*i is odd, then half that equals an integer plus 1/2. Rounding that down will yield, in effect, (1/2)(n - 3 i) - (1/2).&lt;br /&gt;&lt;br /&gt;So, think about that behavior. For even values of n - 3*i, we want a function that returns (1/2)(n - 3 i), and for odd values of n - 3*i, we want one that returns (1/2)(n - 3 i) - (1/2). The only thing that really changes is the subtracting of one half.&lt;br /&gt;&lt;br /&gt;So notice that (-1)&lt;sup&gt;m&lt;/sup&gt; equals 1 for even m, and -1 for odd m. Then  1 - (-1)&lt;sup&gt;m&lt;/sup&gt; equals 0 for even m, and -2 for odd m. Then, (1/4)(1 - (-1)&lt;sup&gt;m&lt;/sup&gt;) equals 0 for even m, and -1/2 for odd m.&lt;br /&gt;&lt;br /&gt;That being so, we can rewrite our floor function as&lt;br /&gt;&lt;p style="text-align: center;"&gt;&lt;/p&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Clfloor%20%281/2%29%28n%20-%203%20i%29%20%5Crfloor%20%20=%20%5Cfrac%7B1%7D%7B2%7D%28n%20-%203%20i%29%20-%20%5Cfrac%7B1%7D%7B4%7D%281%20-%20%7B%28-1%29%7D%5E%7Bn%20-%203i%7D%29" align="middle" border="0" /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;We can then reform our summation as&lt;br /&gt;&lt;p style="text-align: center;"&gt;&lt;/p&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20P_3%28n%29%20=%20%5Csum_%7Bi%20=%201%7D%5E%7B%20%5Clfloor%20n/3%20%5Crfloor%20%7D%201%20+%20%5Cfrac%7B1%7D%7B2%7D%28n%20-%203%20i%29%20-%20%5Cfrac%7B1%7D%7B4%7D%281%20-%20%7B%28-1%29%7D%5E%7Bn%20-%203i%7D%29" align="middle" border="0" /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;The rest is just a matter of algebra and series formulae. Expanding everything,&lt;br /&gt;&lt;p style="text-align: center;"&gt;&lt;/p&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20P_3%28n%29%20=%20%5Csum_%7Bi%20=%201%7D%5E%7B%20%5Clfloor%20n/3%20%5Crfloor%20%7D%20%5Cfrac%7B3%7D%7B4%7D+%5Cfrac%7B1%7D%7B4%7D%20%28-1%29%5E%7B-3%20i+n%7D-%5Cfrac%7B3%20i%7D%7B2%7D+%5Cfrac%7Bn%7D%7B2%7D" align="middle" border="0" /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;And then I could step through each step of simplifying the sum, but that would be even more tedious than everything I've done so far, so I'll skip straight to the punchline,&lt;br /&gt;&lt;p style="text-align: center;"&gt;&lt;/p&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20P_3%28n%29%20=%20%5Cfrac%7B1%7D%7B8%7D%20%28%20%28-1%29%5E%7B%20%5Clfloor%20n/3%20%5Crfloor%20+%20n%7D%20-%20%20%28-1%29%5En%20+%204%20n%20%7B%20%5Clfloor%20n/3%20%5Crfloor%20%7D%20-%206%20%7B%20%5Clfloor%20n/3%20%5Crfloor%20%7D%5E2%20%29" align="middle" border="0" /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;And that is awesome. Because we've reduced a function that was a multiple summation to a function that requires a fixed number of compuations, -dramatically- easier to calculate. Plugging in n = 0, 1, and 2, we get P&lt;sub&gt;3&lt;/sub&gt; is 0 for each. For n = 3, when &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Clfloor%20n/3%20%5Crfloor" align="middle" border="0" /&gt; = 1, we get&lt;br /&gt;&lt;p style="text-align: center;"&gt;&lt;/p&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20P_3%283%29%20=%20%5Cfrac%7B1%7D%7B8%7D%28%20%28-1%29%5E%7B1%20+%203%7D%20-%20%28-1%29%5E3%20+%204*3*1%20-%206*1%5E2%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20P_3%283%29%20=%20%5Cfrac%7B1%7D%7B8%7D%28%201%20-%20%28-1%29%20+%2012%20-%206%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20P_3%283%29%20=%20%5Cfrac%7B1%7D%7B8%7D%288%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20P_3%283%29%20=%201" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;So there is only one partition of n = 3, which we know is true since the only partition is 1 + 1 + 1.&lt;br /&gt;&lt;br /&gt;I don't really feel like doing any more examples, since I've gone on well long enough. I think it is very interesting though that the resulting function turned out to be (effectively) quadratic in terms of n. Honestly, I find it interesting the formula reduced half as nicely as it did anyway : )&lt;br /&gt;&lt;br /&gt;So that's our final result for the number of ways of partitioning an integer n into three pieces. I've gone on long enough at this point though, and it's time enough for me to get back to work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-8648987115411441608?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/8648987115411441608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=8648987115411441608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8648987115411441608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8648987115411441608'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2008/04/this-will-be-i-think-relatively-gentle.html' title='Integer Partitionings: 3-Partitions'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-3558079144013425676</id><published>2008-04-01T21:00:00.002-04:00</published><updated>2008-04-01T21:03:42.422-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='News'/><category scheme='http://www.blogger.com/atom/ns#' term='Unsolved Problems'/><category scheme='http://www.blogger.com/atom/ns#' term='Problems'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Progress on Riemann?</title><content type='html'>The &lt;a href="http://en.wikipedia.org/wiki/Riemann_hypothesis"&gt;Riemann Hypothesis&lt;/a&gt; is one of the greatest unsolved math problems in the world today - probably. If not, it's easily one of the most famous.&lt;br /&gt;&lt;br /&gt;It centers on the Riemann Zeta Function, given by&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Czeta%20%28s%29%20=%20%5Csum_%7Bi%20=%201%7D%5E%5Cinfty%20%5Cfrac%7B1%7D%7Bi%5Es%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The function being defined over the complex plane. The Hypothesis is, in its most basic form, that if &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Czeta%20%28s%29%20=%200" align="middle" border="0" /&gt;, then s = 1/2 + t*i, for some real number t. That any zero of the zeta function has a real part of one half.&lt;br /&gt;&lt;br /&gt;Why this is interesting though is the connection with prime numbers. There's a function called the prime counting function, pi(x), and it basically gives the number of prime numbers between 0 and n. As the distribution of primes is so bizarre, being able to calculate pi(x) correctly, without just counting all the prime numbers from 1 to x, would be a very neat trick. We have some very nice approximations for pi(x), involving integrals of relatively simple functions, but the question is the, how good are these approximations?&lt;br /&gt;&lt;br /&gt;So enters the Riemann Hypothesis. Basically, it's been shown that the Riemann Hypothesis, as stated above, is equivalent to saying, for our best approximation of pi(x), pi(x) differs from this approximation by no more than some constant times &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7Bx%7D*ln%28x%29" align="middle" border="0" /&gt;, for x sufficiently large.&lt;br /&gt;&lt;br /&gt;Which is a very interesting result.&lt;br /&gt;&lt;br /&gt;But a proof was proposed a few months ago, and it seems really quite promising, and at the very least opens up some new avenues for further inquiry. As usual for such things, I don't have the background to explain fully, but I think I can break down a couple of the key points to an understandable level. Maybe &lt;a href="http://scienceblogs.com/goodmath/"&gt;Mark&lt;/a&gt; can pick this up? More below the fold.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=RSsJ19sy3JI"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-3558079144013425676?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/3558079144013425676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=3558079144013425676' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/3558079144013425676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/3558079144013425676'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2008/04/progress-on-riemann.html' title='Progress on Riemann?'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-1858251756552960561</id><published>2008-03-14T09:54:00.002-04:00</published><updated>2008-03-14T09:57:33.087-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Science'/><category scheme='http://www.blogger.com/atom/ns#' term='News'/><category scheme='http://www.blogger.com/atom/ns#' term='Proof'/><category scheme='http://www.blogger.com/atom/ns#' term='Time Travel'/><category scheme='http://www.blogger.com/atom/ns#' term='Practical'/><category scheme='http://www.blogger.com/atom/ns#' term='Unsolved Problems'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><category scheme='http://www.blogger.com/atom/ns#' term='Physics'/><title type='text'>Quantum Computers: Math and Time Travel</title><content type='html'>I'm currently half way through my Spring Break, so the math is slow/non-existent. I've got an interesting math problem half written up, but I'm trying to decide if there's a better way to reach my final conclusion. It's still nice to get a break from the insanity, though.&lt;br /&gt;&lt;br /&gt;In the mean time, in this months Scientific American, there was an article on the &lt;a href="http://www.sciam.com/article.cfm?id=the-limits-of-quantum-computers"&gt;Limits of Quantum Computers&lt;/a&gt;. You'll need to register/pay to read the online version, so that's sort of a bum deal. But it's a very interesting read. But it draws together two of my favoritest things, math and time travel. And a big heap of quantum computing to boot.&lt;br /&gt;&lt;br /&gt;Without getting into the nitty gritty of complexity theory (I'll leave that to &lt;a href="http://learningcomputation.com/blog/index.html"&gt;Kurt&lt;/a&gt;, I think) there are several classes of math problems, which could best be described as 'hard' and 'easy'. Easy problems are ones for which we have developed highly efficient algorithms for solving, sorting a list of data, for example. For hard problems, however, any algorithm we've developed for solving them runs incredibly inefficiently, quickly needing unmanageable amounts of time or space to arrive at the solution.&lt;br /&gt;&lt;br /&gt;In a relatively simplified version of things, suppose a problem's size can be represented by some variable n. For example, n cities you're trying to find a shortest path between, or trying to determine whether or not a number is in a list of size n. For easy problems, the number of steps needed to solve the problem grows proportionate to some polynomial of n, like n&lt;sup&gt;2&lt;/sup&gt;. Hard problems, however, the number of steps needed grows exponentially, like 2&lt;sup&gt;n&lt;/sup&gt;. As n increases, it becomes vastly more resource intensive to solve the hard problems than the easy ones.&lt;br /&gt;&lt;br /&gt;The million dollar question, &lt;a href="http://en.wikipedia.org/wiki/P_%3D_NP"&gt;literally&lt;/a&gt;, is whether or not 'hard' problems are actually 'easy', but we just haven't found a good way of solving them yet.&lt;br /&gt;&lt;br /&gt;The point of the article is that there is a massive hoopla surrounding quantum computation, based on the idea that quantum computers will be able to solve hard problems easily. The best way of describing how they might do such a thing is that, theoretically, quantum computers would be able to check every possible solution to a given problem simultaneously, whereas modern computers currently have to construct solutions, or check possible solutions some small number at a time. So these unfathomably difficult problems could be felled easily, by even simple quantum computers. In theory.&lt;br /&gt;&lt;br /&gt;Except, according to the author, the excitement is relatively unfounded.&lt;br /&gt;&lt;br /&gt;The main problem is that the constructive and destructive interference of waveforms that represent superimposed solutions in quantum computers are incredibly difficult to handle without interference from outside the computer, never mind the fact that if you actually measure the state of the computer while some number of possible solutions are in superposition, you can only ever measure one solution at a time. Any algorithm for using quantum computers to solve such problems must not only overcome these difficulties, but exploit them in solving the problem.&lt;br /&gt;&lt;br /&gt;But aside from the physical difficulties of handling such a machine, there seem to be mathematical issues as well.&lt;br /&gt;&lt;br /&gt;We need to abstract. Imagine a completely general problem, with some number of potential solutions, S. Using a usual computer, trying to find the actual solution, in the worst case we would have to check each of the S many solutions. In computer science, we always assume the worst. So that is, we anticipate, S many steps to find the actual solution.&lt;br /&gt;&lt;br /&gt;Now, imagine you had a quantum computer. We'll disregard the actual construction and innerworkings of such a computer, but assume that it has the capacity to take a potential solution and verify it. Now, in the optimal case, as described, we could superimpose every single solution of the S many at once in the computer, and verify them all at the same time. Effectively solving the problem in one step. But that makes many assumptions about the structure and nature of the problem and its solutions. In this abstract, general case we are assuming, it has actually been proven that using a quantum computer, the best speedup you can hope for is to solve the problem in S&lt;sup&gt;1/2&lt;/sup&gt; many steps. It's the absolute best case scenario. Of course, best case scenario the first solution you check is the correct one and you solve the problem in one step, but again assuming the absolute worst, it's been shown that the worst case number of steps to solve the problem is S&lt;sup&gt;1/2&lt;/sup&gt;.&lt;br /&gt;&lt;br /&gt;As my friend Dan would say, we proved it using math.&lt;br /&gt;&lt;br /&gt;Now, going from a worst case of S to a worst case of S&lt;sup&gt;1/2&lt;/sup&gt; is a significant speed up, yes. But in these hard problems, as I described, the solution space, S, grows exponentially.  As such, S&lt;sup&gt;1/2&lt;/sup&gt; also grows exponentially, and again we're in a situation where as the size of the problem grows, it rapidly becomes unmanageable.&lt;br /&gt;&lt;br /&gt;Does this show that quantum computers won't be able to solve these hard problems? Not necessarily. At best, what this shows is that any solution to such problems can't be 'general'. A solution algorithm to a given problem will have to be specific to that problem, exploiting its nature in some way that we don't yet understand.&lt;br /&gt;&lt;br /&gt;But here's where the article got very interesting.&lt;br /&gt;&lt;br /&gt;The author then goes on to describe theoretic computers, above and beyond quantum computers, that might be able to tackle such problems. One in particular that caught my attention approached this problems by manipulating time. In layman's terms, it solved the problem using time travel - possibly my favorite subject. The fellow who conceived of such things devised a computer which, in theory, could solve these 'hard' problems easily through the use of time travel, through what are known as Closed Timelike Curves. Not to be confused with Closed Timely Curves.&lt;br /&gt;&lt;br /&gt;Of course, no one knows if such things are physically possible.&lt;br /&gt;&lt;br /&gt;Now, this is my favorite part. The question of whether these hard problems are in fact easy basically boils down to a math problem. Can it be proved, one way or the other. However hard it may be, it is a math problem. And if it is proved that these hard problems are -not- easy, any method by which they could be solved easily becomes impossible. As such, given the above discussion, it would serve as a mathematical disproof to the possibility of time travel.&lt;br /&gt;&lt;br /&gt;Of course, if it is proven that hard problems are in fact, easy, it wouldn't say a single thing about whether or not time travel is possible. The implication is one way, but still interesting.&lt;br /&gt;&lt;br /&gt;Very exciting. Very exciting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-1858251756552960561?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/1858251756552960561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=1858251756552960561' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1858251756552960561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1858251756552960561'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2008/03/quantum-computers-math-and-time-travel.html' title='Quantum Computers: Math and Time Travel'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-6285198989940250236</id><published>2008-03-07T07:46:00.000-05:00</published><updated>2008-03-07T07:47:49.340-05:00</updated><title type='text'>The Carnival of Mathematics: No. 28</title><content type='html'>Tyler and Foxy's Scientific and Mathematical Adventure Land is proud to present the &lt;b&gt;28th. Carnival of Mathematics!&lt;/b&gt; According to the treasured tradition of this fine event, I will exposit something interesting about the number 28. Fortunately, I got the perfect number to do so, literally. 28 is a &lt;a href="http://en.wikipedia.org/wiki/Perfect_number"&gt;perfect number&lt;/a&gt;, such a thing being defined as the sum of its positive divisors that are not equal to the number itself. That is, 28 is the sum of 1, 2, 4, 7 and 14. The &lt;i&gt;next&lt;/i&gt; guy who gets to talk about perfect numbers will be the guy who happens to be doing the 496th. Carnival of Mathematics. Good luck, whoever you end up being!&lt;br /&gt;&lt;br /&gt;And now, on to the good stuff...&lt;br /&gt;&lt;br /&gt;Over at &lt;i&gt;The Universe of Discourse&lt;/i&gt;, Mark Dominus provides us with three interesting posts. The &lt;a href="http://blog.plover.com/CS/udcodes.html"&gt;first&lt;/a&gt; concerns an interesting property in the world of coding theory known as "unique decodability", or whether particular strings are the result of unique encodings. The second is on &lt;a href="http://blog.plover.com/math/hirta-2.html"&gt;rational roots of polynomial equations&lt;/a&gt;. The &lt;a href="http://blog.plover.com/math/hirta.html"&gt;third&lt;/a&gt; concerns techniques of algebraic manipulation that work...sometimes.&lt;br /&gt;&lt;br /&gt;From the website &lt;i&gt;Old-Wizard dot com&lt;/i&gt;, we have this &lt;a href="http://old-wizard.com/top10math.htm"&gt;list&lt;/a&gt; of the top 10 Mathematicians of All Time. In my mind, they get it mostly right. The only serious problem I can see is that Leibniz is nowhere to be found. Seriously, WTF?&lt;br /&gt;&lt;br /&gt;My esteemed blogmate Foxy over at &lt;i&gt;Foxmaths 2.0!&lt;/i&gt; provides us with &lt;a href="http://foxmath.wordpress.com/2008/03/05/puzzler-2-cube-dissection/"&gt;this post&lt;/a&gt; on an interesting geometric question: can you divide a cube into a finite number of smaller cubes, all of different sizes? The answer is....just kidding, I'm not a spoiler. Go read!&lt;br /&gt;&lt;br /&gt;Charles Daney at &lt;i&gt;Science and Reason&lt;/i&gt; sends us &lt;a href="http://scienceandreason.blogspot.com/2008/02/more-concepts-from-ring-theory.html"&gt;this post&lt;/a&gt; on important concepts in algebraic number theory, in particular concepts from ring theory. The key concept is that of the "Dedekind domain", a specific type of commutative ring in which every nonzero ideal can be uniquely factored into a product of prime ideals.&lt;br /&gt;&lt;br /&gt;Over at &lt;i&gt;The Number Warrior&lt;/i&gt;, Jason Dyer provides us with this &lt;a href="http://numberwarrior.wordpress.com/2008/03/05/on-the-egyptian-value-for-pi/"&gt;fascinating historical discussion&lt;/a&gt; of the ancient Egyptian calculation of pi. It even has tables of Egyptian numeric characters showing the development of the quantity over the years, I think that's pretty damn neat.&lt;br /&gt;&lt;br /&gt;Julie Rehmeyer provides us with &lt;a href="http://blog.sciencenews.org/mathtrek/2008/02/an_attack_on_fermat.html"&gt;two&lt;/a&gt; &lt;a href="http://blog.sciencenews.org/mathtrek/2008/02/a_mathematical_tragedy_1.html"&gt;posts&lt;/a&gt; on Sophie Germain, the first person ever to lay out a realistic plan for rigorously proving Fermat's Last Theorem, one of the peskiest little assertions in the history of number theory.&lt;br /&gt;&lt;br /&gt;In the math education and pedagogy category, Mr K. over at &lt;i&gt;Math Stories&lt;/i&gt; sends us &lt;a href="http://blog.mathsage.com/?p=134"&gt;this entry&lt;/a&gt; on how overemphasis on mechanical shortcuts over conceptual understanding harms long term learning in mathematics.&lt;br /&gt;&lt;br /&gt;Over at &lt;i&gt;Wild About Math!&lt;/i&gt;, we have &lt;a href="http://wildaboutmath.com/2008/03/03/monday-math-madness-is-here/"&gt;a probability puzzle&lt;/a&gt;, apparently the first in a regular series untitled "Monday Math Madness".&lt;br /&gt;&lt;br /&gt;In the aesthetics of mathematics category, we recieve &lt;a href="http://lederhosen.livejournal.com/576343.html"&gt;this entry&lt;/a&gt; from &lt;i&gt;Art Black&lt;/i&gt;, which compares the perception of beauty of mathematics to the perception of beauty of music.&lt;br /&gt;&lt;br /&gt;The winner in the terms of sheer volume of material for this edition of the Math Carnival is Blake Stacey, who sends us a series of five posts on supersymmetric quantum mechanics! [&lt;a href="http://www.sunclipse.org/?p=323"&gt;1&lt;/a&gt;, &lt;a href="http://www.sunclipse.org/?p=431"&gt;2&lt;/a&gt;, &lt;a href="http://www.sunclipse.org/?p=485"&gt;3&lt;/a&gt;, &lt;a href="http://www.sunclipse.org/?p=467"&gt;4&lt;/a&gt;, &lt;a href="http://www.sunclipse.org/?p=466"&gt;5&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;And finally, at the &lt;i&gt;Teaching College Math Technology Blog&lt;/i&gt;, we recieve &lt;a href="http://tcmtechnologyblog.blogspot.com/2008/02/even-better-than-live-version.html"&gt;this entry&lt;/a&gt; from Maria Andersen on software for teaching math courses online.&lt;br /&gt;&lt;br /&gt;And that's all, folks! It has been a pleasure to host this event, and I hope I have done so to your satisfaction. Good luck, and godless speed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-6285198989940250236?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/6285198989940250236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=6285198989940250236' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/6285198989940250236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/6285198989940250236'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2008/03/carnival-of-mathematics-no-28.html' title='The Carnival of Mathematics: No. 28'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-8057885445966607066</id><published>2008-02-19T15:11:00.005-05:00</published><updated>2008-02-19T15:24:14.109-05:00</updated><title type='text'>Carnival of Mathematics Submission Guidelines</title><content type='html'>I'm proud to say that the Carnival of Mathematics is going to hosted here on March 7th. To help potential authors I've decided to provide this set of submission guidlines:&lt;br /&gt;&lt;br /&gt;1. The submission deadline is set to 10:00PM EST on March 5, no submissions will be accepted after that. I plan on finalizing the entry selection that night, writing up the carnival on Thursday and posting it on Friday morning, for purposes of work schedule compatibility.&lt;br /&gt;&lt;br /&gt;2. Include a brief (2-5 sentence-long) description of what your entry is about. I'm a reasonably math savvy person, but there is no way I'll be able to fully capture the content of all the entries without a bit of assistance. Help a fellow geek out!&lt;br /&gt;&lt;br /&gt;3. Send all the entries to my personal email (tylerofmanyminds AT gmail dot com).&lt;br /&gt;&lt;br /&gt;Good luck, and godless speed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-8057885445966607066?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/8057885445966607066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=8057885445966607066' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8057885445966607066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8057885445966607066'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2008/02/carnival-of-mathematics-submission.html' title='Carnival of Mathematics Submission Guidelines'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-1738756271864384555</id><published>2008-02-07T07:35:00.000-05:00</published><updated>2008-02-07T07:36:26.262-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><category scheme='http://www.blogger.com/atom/ns#' term='Graphs'/><title type='text'>Probabilistic Chess Coloring</title><content type='html'>Now isn't that an inviting title.&lt;br /&gt;&lt;br /&gt;So, the idea is that in general, you have an NxN chessboard, with all white squares, and you're going to go through each square and color it black with a probability p. So ideally, you're left with p*N*N many black squares and (1 - p)*N*N many white squares. Consider the 20x20 board below. I hope this comes out formatted properly.&lt;br /&gt;&lt;div align="center"&gt; &lt;code&gt; X__X_XXXX________XX____X_X__XX&lt;/code&gt;&lt;br /&gt;&lt;code&gt; _X_____XXX____X_X_XXX___X_X__X&lt;/code&gt;&lt;br /&gt;&lt;code&gt; _______X___X_XX_____XXXX_X__X_&lt;/code&gt;&lt;br /&gt;&lt;code&gt; X__XX____XXX__X_X__X_____X_X__&lt;/code&gt;&lt;br /&gt;&lt;code&gt; X___XX__X__XXXXXX____XXX__X__X&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ___________XXXXX__XX__X_XX__XX&lt;/code&gt;&lt;br /&gt;&lt;code&gt; XX__XX___X__X___X___X_____X__X&lt;/code&gt;&lt;br /&gt;&lt;code&gt; X_X_X_XXX_______X___X_____XX_X&lt;/code&gt;&lt;br /&gt;&lt;code&gt; _XXX__X_X___XX_X__XXX__X___XX_&lt;/code&gt;&lt;br /&gt;&lt;code&gt; X___X__X_XX_X_XXX____X_____X_X&lt;/code&gt;&lt;br /&gt;&lt;code&gt; X_X_X_X____X_X_______________X&lt;/code&gt;&lt;br /&gt;&lt;code&gt; _XXXX_X__X_____XX_X_X___X___X_&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ____XX_XX_X___XX____XX_X____X_&lt;/code&gt;&lt;br /&gt;&lt;code&gt; X_X_XXXXXX____XX_X_____X____X_&lt;/code&gt;&lt;br /&gt;&lt;code&gt; X___X_X_XX______XX_X____XX_XXX&lt;/code&gt;&lt;br /&gt;&lt;code&gt; X_X__X__X___XX_XXX____X___XXX_&lt;/code&gt;&lt;br /&gt;&lt;code&gt; _X_X_XX_X____X_______XXX__XX_X&lt;/code&gt;&lt;br /&gt;&lt;code&gt; _X_XXX_______XX__XXX__XX__X_XX&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ____X_______X_XXX_XX_X_X______&lt;/code&gt;&lt;br /&gt;&lt;code&gt; __XX_X__XX_X_X___XX_XX_X__XX_X&lt;/code&gt;&lt;br /&gt;&lt;code&gt; X___XX_XXXXX__X____XXX_X______&lt;/code&gt;&lt;br /&gt;&lt;code&gt; __X_XX__XX_X__________XX__XX_X&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ______XXXXX_______X_X________X&lt;/code&gt;&lt;br /&gt;&lt;code&gt; X__X_X__XX__XX_XX_XX_____XXXX_&lt;/code&gt;&lt;br /&gt;&lt;code&gt; X___XX_XXXXX_XXX_X_XX___XXX_X_&lt;/code&gt;&lt;br /&gt;&lt;code&gt; _XX_____X_XX_X___X_X___XXXXXX_&lt;/code&gt;&lt;br /&gt;&lt;code&gt; __XX_X_X____X_X__X_______X_X__&lt;/code&gt;&lt;br /&gt;&lt;code&gt; X__X_X___X_XXX_XXX_X__XX_X__X_&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ___X_X__X_XXX_____XX__XX______&lt;/code&gt;&lt;br /&gt;&lt;code&gt; _X_XX_X__X___XXX_X__X_X_______&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;The question I would like to consider then is, what is the size, in number of squares, of the largest continuous black section? We'll say that two black squares are touching only if they share a side - no diagonals. So, for a given value of p on a given board, what is the largest number of black squares you expect to find all touching each other?&lt;br /&gt;&lt;br /&gt;This is a variant of a problem in graph theory known as looking for the largest connected component of a random graph. Analysis of that problem yields some interesting results, but I'm not sure how to extend it to here, where the geometry of the graph is modified.&lt;br /&gt;&lt;br /&gt;However, we can approximate, test, and simulate. Using p from 0 to 1, at increments of 0.01, I generated such boards (I think it was a 70x70 board), filled them, and determined the maximum connected component on the board. And then I repeated this multiple times, averaging them all together with a convenient ruby script. Here is a plot of the results, in terms of the probability p along the x, and the maximum size as a fraction of the whole board along the y.&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://foxmath.wordpress.com/files/2008/02/chessplot.jpg" title="Chess Connected Size Graph"&gt;&lt;img src="http://foxmath.wordpress.com/files/2008/02/chessplot.jpg" alt="Chess Connected Size Graph" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;Notice that for p less than about 1/2, the size of the maximum component is ridiculously small. Which means that if you color only half or less of the squares, you can expect, on average, very tiny connected blobs of black. But soon after that, the behavior of the curve changes drastically, practically exponentially. A dramatic increase in the expected size of the maximum component. It is as though the board reaches a sort of carrying capacity for the smaller blobs, after which point (increasing p and adding more black squares), it becomes necessary to begin connecting smaller blobs into larger. There's no way to fit any more smaller blobs onto the board, and as you continue to add black squares, the smaller blobs become connected at an increasing rate.&lt;br /&gt;&lt;br /&gt;It's very interesting, I think.&lt;br /&gt;&lt;br /&gt;And makes me think, abstractly, of &lt;a href="http://en.wikipedia.org/wiki/Blokus"&gt;Blokus&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-1738756271864384555?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/1738756271864384555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=1738756271864384555' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1738756271864384555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1738756271864384555'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2008/02/probabilistic-chess-coloring.html' title='Probabilistic Chess Coloring'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-2277947475450574730</id><published>2008-01-22T11:04:00.000-05:00</published><updated>2008-01-22T11:09:27.004-05:00</updated><title type='text'>Average-Case Complexity</title><content type='html'>(Cross-posted at &lt;a href="http://canofpowerup.wordpress.com/2008/01/21/average-case-complexity/"&gt;PowerUp&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Analysis of algorithms is important at just about all levels of computer science as well as software engineering. When analyzing algorithms, we usually have in mind the property of &lt;i&gt;running-time complexity&lt;/i&gt;, a measure of the efficiency of the algorithm by how many steps it takes. In addition, we often must also take into account unavoidable costs by invoking constant terms. Unavoidable costs show up in many practical areas, an example from my main interest (computer graphics) is the draw call cost associated with rendering objects to a screen or to a memory buffer. Here, we primarily take a look at the techniques of &lt;i&gt;average case analysis&lt;/i&gt; through the common, though instructive, example of the &lt;i&gt;hiring problem&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;The hiring problem is defined as such. You are given the task of hiring an office assistant, and the task itself is a two pronged process of interviewing and hiring from a list of &lt;i&gt;n&lt;/i&gt; candidates. Both interviewing and hiring have associated costs. Interviewing has a low cost, which we will denote by &lt;i&gt;ci&lt;/i&gt;. However, actually hiring an assistant has a much higher cost, which we will denote by &lt;i&gt;ch&lt;/i&gt;. After interviewing an assistant, if they are superior to the currently operating office assistant, the candidate becomes the office assistant. All candidates must be interviewed, so the lower cost is guaranteed to be incurred for each candidate. However, hiring is not a guaranteed for each candidate. We add to this the assumption that the candidates are offered for interviews according to uniform distribution, i.e., they come in a statistically random order. And to simplify, we also assume that the quality of the candidates represents of a total order, i.e., all candidates yield to hard inequality (either &amp;gt; or &amp;lt;).&lt;br /&gt;&lt;br /&gt;Essentially, the algorithm for computing this problem can be defined as such.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;1. set current_assist to 1&lt;br /&gt;2. for candid(2-N)&lt;br /&gt;3.     if candid &amp;gt; current_assist&lt;br /&gt;4.        do current_assist &amp;lt;-- candid&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Essentially, all we really need to determine in the running time for the algorithm is how often we execute step 4. We know we incur the heavy cost of hiring at least once, as per step 1, and we have to go through interviewing each candidate as per steps 2 and 3. Trivially, the best case running time is $ O(nci\ +\ ch) $, since you only incur the cost of hiring once and no candidate inteviewed is superior to your first hiree. In the worst case, the candidates are interviewed in a perfect ascending order of quality, meaning you must execute the hiring operation a total of &lt;i&gt;n&lt;/i&gt; times, yielding a running-time of $ O(nci\ +\ nch) $. Clearly, neither the best or worst case is representative of the expected running-time of the algorithm. What we are looking for is the average case, or the expected running-time when all inputs are considered.&lt;br /&gt;&lt;br /&gt;Usually, average-case analysis is done through an enumeration of all possible inputs and a derivation of the expectation or variance of the inputs. For many algorithms this can be a cumbersome operation to perform. For the hiring problem, this actually isn't too difficult. Cormen, et al. do so in &lt;i&gt;Introduction to Algorithms&lt;/i&gt;. In short, since the candidates are interviewed according to uniform distribution, the probability that any candidate &lt;i&gt;i&lt;/i&gt; in the list of all &lt;i&gt;n&lt;/i&gt; candidates is superior is &lt;i&gt;1/i&lt;/i&gt;. The expected running-time thus coincides with the harmonic series $ \sum_{i=1}^n\frac{1}{i} $, which converges to $ lg\ n\ +\ O(1) $. Thus the average case running-time of the algorithm is on the order of $ O(nci\ +\ ch\ lg\ n) $.&lt;br /&gt;&lt;br /&gt;That would be an example of the obtaining the result via the &lt;i&gt;probabilistic method&lt;/i&gt;. An alternative method for average case analysis is known as the &lt;i&gt;incompressibility method&lt;/i&gt;. The latter takes advantage of a well acknowledged fact from the theory of Kolmogorov complexity: very few strings have short descriptions. In other words, the vast majority of members of any given set of objects will be &lt;i&gt;Kolmogorov random&lt;/i&gt;. This gives us a way to determine the average-case running time by examining one input that is guaranteed to be representative of the ensemble of inputs. To demonstrate this, we take an arbitrary permutation &lt;i&gt;p&lt;/i&gt; of the list of &lt;i&gt;n&lt;/i&gt; candidates and fix a universal partial recursive function &lt;i&gt;f&lt;/i&gt; to compute &lt;i&gt;p&lt;/i&gt; given &lt;i&gt;n&lt;/i&gt;. Given &lt;i&gt;n&lt;/i&gt; inputs, there are a total of &lt;i&gt;n&lt;/i&gt;! possible permutations. Assuming uniform distribution of inputs and thus equidistributed hirees in the hiring assistant algorithm, most strings would contain $ O(lg\ n) $ hirees. Assume the contrary, that most strings contain significantly more or fewer than $ O(lg\ n) $ hirees. Then there would be a short description of the majority of the inputs, being highly regular sequences. This however would contradict the well known fact that for every set &lt;i&gt;A&lt;/i&gt; of cardinality &lt;i&gt;n&lt;/i&gt;:&lt;br /&gt;&lt;br /&gt;$ K_f(p\ |\ n)\ \ge\ lg\ n\ -\ c $&lt;br /&gt;&lt;br /&gt;For all but about $ n(1\ -\ 2^{-c})\ +\ O(1) $ elements. Here, $ K_f(p\ |\ n) $ represents the Kolmogorov complexity of the permutation &lt;i&gt;p&lt;/i&gt; given &lt;i&gt;n&lt;/i&gt; (that is, the quantity &lt;i&gt;n&lt;/i&gt; is known in advance to us and is encoded by the partial recursive function), and &lt;i&gt;c&lt;/i&gt; is an arbitrary positive integer. A string &lt;i&gt;x&lt;/i&gt; is said to be &lt;i&gt;c-incompressible&lt;/i&gt; if $ K(x)\ \ge\ l(x)\ -\ c $, where $ l(x) $ is the length of the sequence. Since most strings are incompressible, the contradiction shows that most permutations &lt;i&gt;p&lt;/i&gt; of &lt;i&gt;n&lt;/i&gt; inputs can't have short descriptions. The average case running time is thus, as it was before, $ O(nci\ +\ ch\ lg\ n) $.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Further reading:&lt;/b&gt; I kind of handwaved on some of the stuff here, especially definitions of Kolmogorov complexity. For that, you should consult either Li and Vitanyi's &lt;i&gt;An Introduction to Kolmogorov Complexity and Its Applications&lt;/i&gt; (the entirety of chapter 6 is on the incompressibility method) or Peter Gacs' &lt;a href="http://www.cs.bu.edu/faculty/gacs/papers/ait-notes.pdf"&gt;lecture notes&lt;/a&gt; on Algorithmic Information Theory. Probabilistic analysis is covered by Cormen, et al. in chapter five of &lt;i&gt;Introduction to Algorithms&lt;/i&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-2277947475450574730?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/2277947475450574730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=2277947475450574730' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2277947475450574730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2277947475450574730'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2008/01/average-case-complexity.html' title='Average-Case Complexity'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-2645830400580531309</id><published>2008-01-14T20:30:00.000-05:00</published><updated>2008-01-14T20:35:02.384-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Time Travel'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Recursive Grab Bag</title><content type='html'>A rather interesting topic in math (what a general way to start a post) is the matter of recursive functions. These are functions that are expressed in terms of themselves. A fairly traditional example would be factorial. n! is defined to be&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20n%21%20=%201*2*3*...*%28n-1%29*n" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;Now, a nicely concise way to write this, not to mention computationally convenient, is to define the following&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%200%21%20=%201" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20n%21%20=%20n*%28n-1%29%21" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;So, the operation is defined, effectively, with respect to itself. There are a lot of operations that can be defined very nicely in this way. Consider the following, for example.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20f%28x,%201%29%20=%20x" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20f%28x,%20n%29%20=%20x%20+%20f%28x,%20n%20-%201%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;Calling f(2, 3) then, it unwraps to give&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20f%282,%203%29%20=%202%20+%20f%282,%202%29%20=%202%20+%202%20+%20f%282,%201%29%20=%202%20+%202%20+%202" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20f%282,%203%29%20=%203*2%20=%206" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;In general, it's clear that f(x, n) returns n*x. In effect, this is a recursive definition of multiplication. So, many nice things can be expressed very nicely using recursion.&lt;br /&gt;&lt;br /&gt;But, many interesting things can be expressed with recursion that can't be expressed nicely otherwise. Consider, for example, the &lt;a href="http://en.wikipedia.org/wiki/Ackermann_function"&gt;Ackermann Function&lt;/a&gt;, A(m, n) defined as&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;If m = 0: &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20A%28m,%20n%29%20=%20n%20+%201" align="middle" border="0" /&gt;&lt;br /&gt;If m &gt; 0 and n = 0: &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20A%28m,%20n%29%20=%20A%28m%20-%201,%201%29" align="middle" border="0" /&gt;&lt;br /&gt;If m &gt; 0 and n &amp;gt; 0: &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20A%28m,%20n%29%20=%20A%28m%20-%201,%20A%28m,%20n%20-%201%29%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;A(m, n) has no non-recursive definition, no &lt;a href="http://en.wikipedia.org/wiki/Closed-form_expression"&gt;closed-form expression&lt;/a&gt;, or anything near as nice as the two recursive examples I already showed you have. The above is the best you're going to get. Interestingly, it is the simplest function for which that is the case. The other point of interest about the Ackermann Function is how incredibly fast it grows, even for small m and n. In fact, A(4,2) has 19729 digits, which is far more than I am comfortable writing out here. The full number can be found &lt;a href="http://kosara.net/thoughts/ackermann42.html"&gt;here&lt;/a&gt;, if you're interested. A very, very large number. In fact, at that magnitude, I'd argue that the full text of the number is next to meaningless, when compared with the much more concise description of the same number as merely A(4,2).&lt;br /&gt;&lt;br /&gt;Alternately, there are things that are expressed very nicely with recursion, that become much less nice when unraveled. Take, for example, the Fibonacci Sequence. Starting with a 1 and a 1, the sequence is formed by taking the sum of the two previous terms. This produces 1, 1, 2, 3, 5, 8, ... and so on. More concisely, it can be written as&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20f%281%29%20=%201" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20f%282%29%20=%201" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20f%28n%29%20=%20f%28n-1%29%20+%20f%28n-2%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;A very clean and elegant description of the sequence. Unraveling the recursion, with all due care, it can be shown that the following definition is equivalent.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20f%28n%29%20=%20%5Cfrac%7B%7B%281+%5Csqrt%7B5%7D%29%7D%5En%20-%20%7B%281-%5Csqrt%7B5%7D%29%7D%5En%7D%7B2%5En%20%5Csqrt%7B5%7D%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Hardly the most elegant of formulae.  Somehow, the recursive definition captures the relationship between the terms of the sequence far better. However, and this becomes more clear with more complicated recursive definitions, it is increasingly difficult for humans to fully grasp the shape and form of the sequence - something that becomes much simpler even in the more complicated form. In that way, the goal of unraveling these recursive definitions is a markedly human endeavor. The whole of the sequence or function is defined through the recursion, and the act of unraveling it merely serves to make it understandable to us. To make the full implications of the levels of self reference clear. In many ways, I think this is indicative of the goals of mathematics as a whole. In general, you start with a concise set of axioms and assumptions, and tease out some conclusion or theorem from them. The conclusion or theorem of course already existed as truth, through the statement of the axioms, but the act of proof teased out a bit of comprehensible meaning that was otherwise unclear from the statement of the axioms themselves. The whole of math exists in the statement of the axioms - the point of math is to bring the full weight and import of those simple statements to a understandable level. As much as I am loathe to admit it ... it's all a very human enterprise.&lt;br /&gt;&lt;br /&gt;But I digress. That is a topic for another time.&lt;br /&gt;&lt;br /&gt;So, in general, given a recursive function or sequence, it's an interesting mathematical question of whether the recursion can be unwrapped to give some form of closed-form, non-recursive description of the same function or sequence. In my next post, or something soon at least, I'll discuss generating functions, a neat tool used to such ends.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-2645830400580531309?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/2645830400580531309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=2645830400580531309' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2645830400580531309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2645830400580531309'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2008/01/recursive-grab-bag.html' title='Recursive Grab Bag'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-1601693934672728607</id><published>2008-01-14T20:23:00.000-05:00</published><updated>2008-01-14T20:29:35.300-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Science'/><category scheme='http://www.blogger.com/atom/ns#' term='Proof'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><category scheme='http://www.blogger.com/atom/ns#' term='Physics'/><title type='text'>The Necessity of Relativity</title><content type='html'>Relativity holds a rather curious place in physics, as I see it. Other branches - nuclear, mechanics, E&amp;amp;M, so forth, all seem firmly based in the study of physical objects, systems, and principles. Relativity is, in point of fact, much more of a math than a physics. It starts with simple axioms about our understanding of the universe and derives conclusions from them about the way the universe must work. The tools of relativity are not physical laws, but rather logic.&lt;br /&gt;&lt;br /&gt;Now, as I said, relativity starts with simple axioms, and works from them to derive its conclusions. The axiom in question in this case is that the speed of light is finite, and constant. No matter who is measuring it, how fast they are going, what they are doing, who else is measuring, all observers always measure the same speed of light. That speed we'll call c here, though more traditionally it is 299 792 458 meters per second.Now to the experiment.&lt;br /&gt;&lt;br /&gt;Alice Cooper is riding in a train which is moving at speed v. At some time, which we'll call even one, a flash of light is emitted from the floor of the train, straight up towards the ceiling, being absorbed by the ceiling at event two. If we say that the train is of height h, then the entire transit time of the flash, from the floor to the ceiling, as seen by Alice, is h/c. And needless to say, the length of the path of the light flash, from the floor to the ceiling, as seen by Alice, is simply h.&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://foxmath.wordpress.com/files/2008/01/trainobserver.jpg" title="Train Observer"&gt;&lt;img src="http://foxmath.wordpress.com/files/2008/01/trainobserver.jpg" alt="Train Observer" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;At the same time, a man with no distinguishing characteristics, code named 'Observer' is standing at a station watching Alice Cooper's train pass. He sees the light emitted, watches it travel, and watches it be absorbed by the ceiling of the train. Below is a diagram of what he sees.&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://foxmath.wordpress.com/files/2008/01/stationobserver.jpg" title="Station Observer"&gt;&lt;img src="http://foxmath.wordpress.com/files/2008/01/stationobserver.jpg" alt="Station Observer" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;The problem should begin to be clear. Once the light is emitted, some time passes before it is absorbed by the ceiling. During this time, the train continues forwards, so the point of absorption is no longer directly above the point the light was emitted from. As such, there is now a horizontal component to the path of the light that was not present in the first case. As such, the light travels further for the station observer than it does for Alice Cooper.And -that- is ridiculous! How could someone measure something as one length, and someone else measure it as another? To make matters worse, since as we said, they both measure the speed of light to be the same thing, c, if they measure the paths as having different lengths, then they must measure the time between the two events as different as well, the station observer measuring a longer time since it takes longer for light to travel along that path.&lt;br /&gt;&lt;br /&gt;Clearly a contradiction. Nevertheless - nothing in this thought experiment is strange or alien or impossible. There are no buses going the speed of light, no perfect spheres. If we wanted to, we could put Alice Cooper on a train, we could speed it up to some velocity, and some man could be observing the train. Everything is doable, and the contradiction is simply a logical result of what we know to be true. This is the essence of relativity - it is a mathematical description of how the -must- universe work. It is a necessity.&lt;br /&gt;&lt;br /&gt;Let us ask then, exactly what the station observer measures between the two events in terms of distance and time. Let the distance between the emission and the absorption be L, and the time be T. Because the speed of light is constant, we know that the time the station observer measures must be T = L/c.&lt;br /&gt;&lt;br /&gt;But what of L? Notice the diagram below, with the conveniently drawn right triangle.&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://foxmath.wordpress.com/files/2008/01/observergeom.jpg" title="Observer Geometry"&gt;&lt;img src="http://foxmath.wordpress.com/files/2008/01/observergeom.jpg" alt="Observer Geometry" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;The hypotenuse of the diagrammed triangle is the path the light takes, so it is of length L. The vertical leg of the triangle is simply the height of the train, which is h.  The horizontal leg is the distance the point of emission travels during the time interval between events. In other words, v*T. Using the Pythagorean theorem and that T = L/c,&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20L%5E2%20=%20h%5E2%20+%20%7B%28v%20T%29%7D%5E2" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20L%5E2%20=%20h%5E2%20+%20%7B%28v%20%5Cfrac%7BL%7D%7Bc%7D%29%7D%5E2" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20L%5E2%20=%20h%5E2%20+%20L%5E2%20%5Cfrac%7Bv%5E2%7D%7Bc%5E2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20L%5E2%20%281%20-%20%5Cfrac%7Bv%5E2%7D%7Bc%5E2%7D%29%20=%20h%5E2" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20L%20=%20%5Cfrac%7Bh%7D%7B%5Csqrt%7B%201%20-%20%5Cfrac%7Bv%5E2%7D%7Bc%5E2%7D%20%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Notice that L, the distance the station observer measures the path to be, is simply h, the distance Alice Cooper measured, scaled by a curious factor. Now look at the time.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20T%20=%20%5Cfrac%7BL%7D%7Bc%7D%20=%20%5Cfrac%7Bh%7D%7B%5Csqrt%7B%201%20-%20%5Cfrac%7Bv%5E2%7D%7Bc%5E2%7D%20%7D%20%7D%20%5Cfrac%7B1%7D%7Bc%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20T%20=%20%5Cfrac%7Bh/c%7D%7B%5Csqrt%7B%201%20-%20%5Cfrac%7Bv%5E2%7D%7Bc%5E2%7D%20%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Notice that T, the time the station observer measures the path to take, is simply h/c, the time Alice Cooper measured, scaled by the same curious factor. Length and time have been dilated. The conclusion is inescapable, bizarre, completely logical, and utterly fascinating.&lt;br /&gt;&lt;br /&gt;So we have two observers, measuring ostensibly the same thing, but each getting markedly different results in their measurements of time and distance. This is a drive by introduction to special relativity.&lt;br /&gt;&lt;br /&gt;The important thing to note here is this - many people object to the conclusions of relativity as bizarre, counter intuitive, nonsensical, and downright impossible. However, the problem is not with relativity. Relativity is simply a precise, mathematical description of what -must be true- about the universe based on what we know to be true. There are no special forces at work here - no magic, no hand waving. Each step of the derivation follows logically from the rest. Relativity is simply a mathematical necessity based on our understanding of the universe.&lt;br /&gt;&lt;br /&gt;A mathematical necessity. And there's really little more to say than that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-1601693934672728607?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/1601693934672728607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=1601693934672728607' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1601693934672728607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1601693934672728607'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2008/01/relativity-holds-rather-curious-place.html' title='The Necessity of Relativity'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-595471391389647277</id><published>2008-01-11T22:43:00.000-05:00</published><updated>2008-01-11T23:03:01.873-05:00</updated><title type='text'>Uncomputable and Probabilistic Quantities</title><content type='html'>(Cross-posted over at &lt;a href="http://canofpowerup.wordpress.com/2008/01/11/uncomputable-and-probabilistic-quantities/"&gt;PowerUp&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;One of the things that has always intrigued me about computer science is that, from the perspective of theory at least, you have extensive uses of probabilistic reasoning in a field where that superficially looks to be entirely deterministic. We all know about the undecidability of the halting problem, but an even more interesting result is that of Gregory Chaitin, who derived an uncomputable number from said problem by compactly quantifying it as a probability. Here we have the famous halting probability $$\Omega$$, which represents the probability that a reference machine &lt;i&gt;U&lt;/i&gt; will halt if its program is provided by a sequence of fair coin flips.&lt;br /&gt;&lt;br /&gt;$$\Omega\ =\ \sum_{U(p)&amp;lt;\infty}\ 2^{-l(p)}$$&lt;br /&gt;&lt;br /&gt;Where p represents all inputs for which the reference machine halts, and &lt;i&gt;l(p)&lt;/i&gt; is the length of the binary description of all such programs. Since the sum is taken over all such inputs, we know that $$\Omega\ &amp;gt;\ 0$$. However, since &lt;i&gt;U(p)&lt;/i&gt; doesn't always halt, we also know that $$\Omega\ &amp;lt;\ 1$$. From there, it gets more difficult to narrow down the quantity. The halting probability is a random infinite binary sequence, random of course meaning that its digits are equidistributed and infinite meaning it extends without termination, i.e., a real number. And more interestingly, an uncomputable real number. To understand this, define a function $$\ f(x)\ =\ \Omega_{1:x}$$, that is, the digits of $$\Omega$$ computed to an arbitrary precision represented by x. There is no partial recursive function that can coincide with &lt;i&gt;f&lt;/i&gt;(x) on its entire domain of definition. You have a literally unknowable quantity, and probability gives us a way to rigorously quantify the famously unsolvable problem in computer science.&lt;br /&gt;&lt;br /&gt;The above seems abstract, but uncomputable quantities like the halting probability play both theoretical and practical roles in computer science. Another similarly uncomputable quantity in computer science, and more specifically the theory of Kolmogorov complexity, is in fact known as the "universal probability distribution". Usually talk of "universality" in computer science entails objects that emulate the behavior of any other in its general class. The idea of general purpose machines, functions, etc. is in fact a central notion of the entire field, and the one which makes it a worthwhile field of study in the first place. For the universal distribution, however, "universality" entails a quantity that is guaranteed to be greater than all others in its general class. In technical language, this "universal" probability distribution, usually denoted by &lt;b&gt;m&lt;/b&gt; as a matter of pure convention, is an enumerable distribution that &lt;i&gt;multiplicatively dominates&lt;/i&gt; all others. "Enumerable" meaning "semicomputable", which in turn essentially means that the quantity is not necessarily itself computable but can be approximated computationally (that is, the set of computable quantities is a proper subset of that of all enumerable quantities). The universal distribution is defined thusly: &lt;br /&gt;&lt;br /&gt;Given an enumeration $$\ M$$ of all probability distributions $$\ P_1,\ P_2,\ \ldots,\ P_n $$, there exists a $$\ P_0 $$ which given a constant $$\ cp$$ returns $$\ cpP_0\ \geq\ P_i$$ for all $$\ P_i\ \in\ M$$.&lt;br /&gt;&lt;br /&gt;The constant invoked above is a general variable for a multiplicative factor dependent on &lt;b&gt;P&lt;/b&gt; but not on the possible arguments taken by &lt;b&gt;P&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;The uses of the above quantity are manifold. Since "probability" is usually operationally defined as "expectation among a set of conditions", the universal distribution often makes an extremely useful prior in machine learning applications. Given that it (multiplicatively) dominates all other enumerable distributions, it maximizes ignorance by assigning the highest possible probability to all events in a given sample space. It also has some unique consequences for average case complexity analysis regarding specific algorithms, as well as their resource-constrained counterparts. For further reading on the universal distribution, the entirety of chapter 4, as well as sections 7.4-7.6, of Li and Vitanyi's &lt;i&gt;An Introduction to Kolmogorov Complexity and its Applications&lt;/i&gt; should be consulted. The halting probability is mentioned in passing in section 3.6 of the aforementioned, as well as sporadically brought to bear throughout the text. However, for a more explicit and thorough derivation, I'd consult Gregory Chaitin's &lt;i&gt;Algorithmic Information Theory&lt;/i&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-595471391389647277?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/595471391389647277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=595471391389647277' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/595471391389647277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/595471391389647277'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2008/01/uncomputable-and-probabilistic.html' title='Uncomputable and Probabilistic Quantities'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-4096754368358725909</id><published>2007-12-17T20:07:00.000-05:00</published><updated>2007-12-17T20:08:50.986-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Time Travel'/><category scheme='http://www.blogger.com/atom/ns#' term='Problems'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Pascal's Triangle: And you hoped it was over...</title><content type='html'>So, in the &lt;a href="http://foxmath.blogspot.com/2007/12/pascals-triangle-and-interesting.html"&gt;previous post&lt;/a&gt;, I discussed Pascal's Triangle, and specifically how many digits it takes to write out a given row in the triangle. If DL(n) is the number of digits it takes (not counting spaces and things), it has an explicit formula as&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20DL%28n%29%20=%20%5Csum_%7Bk%20=%200%7D%5En%20Floor%5Blog_%7B10%7D%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%20%5D%20+%201" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;However, that is an extremely problematic function. Floors? Logs? It gets ridiculous. So it becomes necessary to determine useful bounds to approximate the function with. In the previous post, I was able to determine the following lower bound, that&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Cleft%28n+%5Cfrac%7Bn%5E2%7D%7B2%7D+n%5E2%20%5Ctext%7BLog%7D%5Cleft%5B%5Cfrac%7Bn%7D%7B1+n%7D%5Cright%5D-%281+2%20n%29%20%5Ctext%7BLog%7D%5B1+n%5D%5Cright%29%5Cfrac%7B1%7D%7B%5Ctext%7BLog%7D%5B10%5D%7D%20%5Cleq%20DL%28n%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And I just discovered that Mathematica has a LaTeX copy function : ) That is quite handy.&lt;br /&gt;&lt;br /&gt;Now, that lower bound was actually determined relatively carefully, while the upper bound I determined basically by making stuff up.&lt;br /&gt;&lt;br /&gt;However, using the same approach to the upper bound I used on the lower bound, you work out the following, that&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20DL%28n%29%20%5Cleq%20n%20+%201%20+%20%5Cfrac%7B1%7D%7B%5Ctext%7BLog%7D%5B10%5D%7D%5Cleft%28%20-%5Cfrac%7B1%7D%7B2%7D+%5Cfrac%7Bn%5E2%7D%7B2%7D-n%20%5Ctext%7BLog%7D%5Bn%5D+%5Ctext%7BLog%7D%5B1+n%5D%281+2%20n%29+n%5E2%5Ctext%7BLog%7D%5Cleft%5B%5Cfrac%7B1+n%7D%7Bn%7D%5Cright%5D%5Cright%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Plotting the two bounds, they look quite pretty.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_08B0rrzqpZ0/R2cYX5qp90I/AAAAAAAAAOA/cOxGLbIYwY0/s1600-h/pascalBound2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_08B0rrzqpZ0/R2cYX5qp90I/AAAAAAAAAOA/cOxGLbIYwY0/s400/pascalBound2.jpg" alt="" id="BLOGGER_PHOTO_ID_5145107898189870914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Looking at that graph, two things are relatively clear. One, the plot of DL(n) in the middle demonstrates that the function would be relatively difficult to calculate explicitly, jumping and bumping about like that. Two though, it's interesting the extent to which DL(n) seems pegged relatively right in the middle of the two bounds. Looking at a plot of DL(n) and the average of the two bounds, it becomes even more interesting.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_08B0rrzqpZ0/R2cZS5qp91I/AAAAAAAAAOI/IyFppUnEdRg/s1600-h/pascalBound3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_08B0rrzqpZ0/R2cZS5qp91I/AAAAAAAAAOI/IyFppUnEdRg/s400/pascalBound3.jpg" alt="" id="BLOGGER_PHOTO_ID_5145108911802152786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Just looking at that plot, it's clear that the average of the two bounds is a REALLY good approximation of the function itself. That plot goes out n = 40. Going out to n = 300, it's practically impossible to tell the two functions apart.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_08B0rrzqpZ0/R2cZ-Zqp92I/AAAAAAAAAOQ/en-kLoHn2_4/s1600-h/pascalBound4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_08B0rrzqpZ0/R2cZ-Zqp92I/AAAAAAAAAOQ/en-kLoHn2_4/s400/pascalBound4.jpg" alt="" id="BLOGGER_PHOTO_ID_5145109659126462306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And, even better, if we call this function J(n), it has a really nice form!&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20J%28n%29%20=%20%5Cfrac%7B1%7D%7B2%7D+%5Cfrac%7Bn%7D%7B2%7D-%5Cfrac%7B1%7D%7B4%20%5Ctext%7BLog%7D%5B10%5D%7D+%5Cfrac%7Bn%7D%7B2%20%5Ctext%7BLog%7D%5B10%5D%7D+%5Cfrac%7Bn%5E2%7D%7B2%20%5Ctext%7BLog%7D%5B10%5D%7D-%5Cfrac%7Bn%20%5Ctext%7BLog%7D%5Bn%5D%7D%7B2%20%5Ctext%7BLog%7D%5B10%5D%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Given how nasty DL(n) is by itself, J(n) is indeed -quite- nice.&lt;br /&gt;&lt;br /&gt;And here's a plot of the error, J(n) - DL(n),&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_08B0rrzqpZ0/R2cbaZqp93I/AAAAAAAAAOY/0NhzLdIzHKk/s1600-h/pascalError.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_08B0rrzqpZ0/R2cbaZqp93I/AAAAAAAAAOY/0NhzLdIzHKk/s400/pascalError.jpg" alt="" id="BLOGGER_PHOTO_ID_5145111239674427250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Which is all kinds of interesting. It grows exceptionally slowly. The error for the 300th line is only 60 or so digits, which is quite impressive considering that DL(300) = 19329. Notice too, that it seems exceptionally linear, and also seems to have some kind of embedded periodic activity.&lt;br /&gt;&lt;br /&gt;Very very interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-4096754368358725909?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/4096754368358725909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=4096754368358725909' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/4096754368358725909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/4096754368358725909'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/12/pascals-triangle-and-you-hoped-it-was.html' title='Pascal&apos;s Triangle: And you hoped it was over...'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_08B0rrzqpZ0/R2cYX5qp90I/AAAAAAAAAOA/cOxGLbIYwY0/s72-c/pascalBound2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-4241717340924077523</id><published>2007-12-17T15:20:00.000-05:00</published><updated>2007-12-17T15:21:27.890-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Time Travel'/><category scheme='http://www.blogger.com/atom/ns#' term='Problems'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>You've Probably Wondered, But Were Afraid to Ask</title><content type='html'>As well you should've been, by the looks of things.&lt;br /&gt;&lt;br /&gt;This is likely to be a long post, touching on a couple of interesting topics and coming to head in an interesting result. Hopefully : ) Warning - past a certain point, it's going to get kind of intense.&lt;br /&gt;&lt;br /&gt;So, there's this thing called Pascal's Triangle. It looks something like&lt;br /&gt;&lt;center&gt;&lt;br /&gt;1&lt;br /&gt;1 1&lt;br /&gt;1 2 1&lt;br /&gt;1 3 3 1&lt;br /&gt;1 4 6 4 1&lt;br /&gt;1 5 10 10 5 1&lt;br /&gt;...&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;The rows are numbered starting at 0 and going down, and the elements of each row are numbered starting at 0 and going across. The nth row has n + 1 elements.&lt;br /&gt;&lt;br /&gt;Just straight up, the most obvious pattern is the method of construction. Each number is the sum of the two numbers above it.&lt;br /&gt;&lt;br /&gt;There is an actual formula to it, namely that the kth number of the nth row is given by&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Now, this thing has a lot of nice properties to it. Pascal actually came up with it in reference to probability. The idea is, given a coin and flipping it, say 3 times, there is (1) way of getting 3 heads, (3) ways of getting 2 heads and a tail, (3) ways of getting a head and 2 tails, and (1) way of getting 3 tails. 1 - 3 - 3 - 1. The other rows give similar results all down the rows. Notice that flipping a coin three times, there are 2&lt;sup&gt;3&lt;/sup&gt; many ways it can happen. 1 + 3 + 3 + 1 = 8. In general, the sum across the nth row is 2&lt;sup&gt;n&lt;/sup&gt;.&lt;br /&gt;&lt;br /&gt;Now, the question we would like to address is how /long/ is a given row of Pascal's triangle. Clearly a given row has n + 1 many elements, but what I'm interested in is, if you were to write out the nth row, literally how many characters would it take. The reason this is interesting to me, at the very least, is that I've always found it incredibly difficult to write out Pascal's triangle, because the length of the rows grows so fast it's difficult to keep the spacing nice and orderly and triangle like.&lt;br /&gt;&lt;br /&gt;Look, for example, at the first 16 rows.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;1&lt;br /&gt;1 1&lt;br /&gt;1 2 1&lt;br /&gt;1 3 3 1&lt;br /&gt;1 4 6 4 1&lt;br /&gt;1 5 10 10 5 1&lt;br /&gt;1 6 15 20 15 6 1&lt;br /&gt;1 7 21 35 35 21 7 1&lt;br /&gt;1 8 28 56 70 56 28 8 1&lt;br /&gt;1 9 36 84 126 126 84 36 9 1&lt;br /&gt;1 10 45 120 210 252 210 120 45 10 1&lt;br /&gt;1 11 55 165 330 462 462 330 165 55 11 1&lt;br /&gt;1 12 66 220 495 792 924 792 495 220 66 12 1&lt;br /&gt;1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1&lt;br /&gt;1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1&lt;br /&gt;1 15 105 455 1365 3003 5005 6435 6435 5005 3003 1365 455 105 15 1&lt;br /&gt;1 16 120 560 1820 4368 8008 11440 12870 11440 8008 4368 1820 560 120 16 1&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Look how fast that grows. That's quite fast.&lt;br /&gt;&lt;br /&gt;The question is then, exactly how fast.&lt;br /&gt;&lt;br /&gt;But how to calculate the length of a row? We have the formula for each element of the row. If we can calculate the length of an element, and sum across the elements of the row and that gives the total length of the row.&lt;br /&gt;&lt;br /&gt;But what is the length of the number? In general, the number of digits it takes to write a number n is Floor[log&lt;sub&gt;10&lt;/sub&gt;(n)] + 1, where Floor[x] rounds x down to the nearest integer. A few examples.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;Floor[log&lt;sub&gt;10&lt;/sub&gt;(13)] + 1 = Floor[1.1139] + 1 = 1 + 1 = 2&lt;br /&gt;&lt;br /&gt;Floor[log&lt;sub&gt;10&lt;/sub&gt;(10000)] + 1 = Floor[4] + 1 = 4 + 1 = 5&lt;br /&gt;&lt;br /&gt;Floor[log&lt;sub&gt;10&lt;/sub&gt;(999)] + = Floor[2.99957] + 1 = 2 + 1 = 3&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;log&lt;sub&gt;10&lt;/sub&gt;x gives you the exponent on 10 needed to calculate x. By rounding it down, you're effectively calculating the exponent on 10 needed to calculate the largest power of 10 smaller than x. (13 gives you 10, 10000 gives you 10000, and 999 gives you 100). And the number of digits in 10&lt;sup&gt;n&lt;/sup&gt; is n + 1.&lt;br /&gt;&lt;br /&gt;So then, using the formula for the k'th element of the n'th row, the number of characters (excluding spaces) needed to write out that row is&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csum_%7Bk%20=%200%7D%5En%20Floor%5B%7B%20log_%7B10%7D%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%20%7D%5D%20+%201" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;However, that is a very uncomfortable looking function. It's going to be very hard to get that in terms of anything sensible, due to all the rounding that must occur, and the inanities involved with taking the log base 10 of things. A closed form expression for that summation is almost out of the question. However, we can still get some good approximations on it, which will tell us how fast the function grows with n.&lt;br /&gt;&lt;br /&gt;Now, with a really cool exercise, you can show that the function grows with order less than or equal to n&lt;sup&gt;2&lt;/sup&gt;. What this means is that whatever the function actually turns out to be, for large n, the function behaves like, or less than, a*n&lt;sup&gt;2&lt;/sup&gt;&lt;sup&gt;n&lt;/sup&gt;. We know this to be true, since the sum of all the elements of the row is 2&lt;sup&gt;n&lt;/sup&gt;. As there are n + 1 many elements in the row then, the number of digits it takes to write out the whole row is less than the number of digits it takes to write out 2&lt;sup&gt;n&lt;/sup&gt;, n + 1 many times. So we can do the following. Notice that, for any x, Floor[x] is less than or equal to x.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csum_%7Bk%20=%200%7D%5En%20Floor%5Blog_%7B10%7D%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%20%5D%20+%201%20%5Cleq%20%28n%20+%201%29%28%7B%20Floor%5Blog_%7B10%7D%202%5En%20%5D%20+%201%7D%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;Bounding that bound,&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28n%20+%201%29%28%7B%20Floor%5Blog_%7B10%7D%202%5En%20%5D%20+%201%7D%29%20%5Cleq%20%28n%20+%201%29%28log_%7B10%7D%282%5En%29%20+%201%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;And simplifying,&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20...%20=%20%28n%20+%201%29log_%7B10%7D%282%5En%29%20+%20n%20+%201" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20...%20=%20%28n%20+%201%29%28n%29log_%7B10%7D%282%29%20+%20n%20+%201" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20...%20=%20log_%7B10%7D%282%29%20n%5E2%20+%20%28log_%7B10%7D%282%29%20+%201%29%20n%20+%201" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;We get the final result, bounding the function in question by a quadratic&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csum_%7Bk%20=%200%7D%5En%20Floor%5Blog_%7B10%7D%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%20%5D%20+%201%20%5Cleq%20log_%7B10%7D%282%29%20n%5E2%20+%20%28log_%7B10%7D%282%29%20+%201%29%20n%20+%201" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;From that now, we know that the function is bound from above by a quadratic function of n, since &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20log_%7B10%7D2" align="middle" border="0" /&gt; is a constant. So we know that, whatever the exact form of the summation is, it grows with order of less than or equal to n&lt;sup&gt;2&lt;/sup&gt; Which is very interesting.&lt;br /&gt;&lt;br /&gt;But, the actual growth rate of the function could still be something silly like n*log(n), or n&lt;sup&gt;1.5&lt;/sup&gt;, both of which of are order less than n&lt;sup&gt;2&lt;/sup&gt;. How can we figure it out precisely?&lt;br /&gt;&lt;br /&gt;Unfortunately I haven't found an equally cool trick to bounding it from below. So what we must do is return to the definition of the function itself, and play with it as best we can.&lt;br /&gt;&lt;br /&gt;Notice, due to the definition of Floor, we have the following inequality.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20x%20-%201%20%3C%20Floor%5Bx%5D%20%5Cleq%20x" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Making use of this, we can bound the summation as follows&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csum_%7Bk%20=%200%7D%5En%20log_%7B10%7D%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%20%3C%20%5Csum_%7Bk%20=%200%7D%5En%20Floor%5Blog_%7B10%7D%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%20%5D%20+%201%20%5Cleq%20%5Csum_%7Bk%20=%200%7D%5En%20log_%7B10%7D%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%20+%201" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Just looking at that, it's clear that getting a grip on&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csum_%7Bk%20=%200%7D%5En%20log_%7B10%7D%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Would be pretty useful. Note that, following the rules of summations and logarithms, we can do the following.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csum_%7Bk%20=%200%7D%5En%20log_%7B10%7D%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%20=%20%5Csum_%7Bk%20=%200%7D%5En%20%5Cfrac%7Blog%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%7D%7Blog%2010%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csum_%7Bk%20=%200%7D%5En%20log_%7B10%7D%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%20=%20%5Cfrac%7B1%7D%7Blog%2010%7D%20%5Csum_%7Bk%20=%200%7D%5En%20log%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;So, all we really need to think about is&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csum_%7Bk%20=%200%7D%5En%20log%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Which is convenient for me, since I don't want to write out all those 10's. This next part takes some finagling, but it comes out very nicely.&lt;br /&gt;&lt;br /&gt;Now, following the rules of logarithms, log(a) + log(b) = log(a*b). Applying that to the summation above, we get that the sum of the logarithms equals the logarithm of the products of the terms.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csum_%7Bk%20=%200%7D%5En%20log%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%20%20=%20log%28%7B%20%5Cprod_%7Bk%20=%200%7D%5En%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%20%7D%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;But, expanding out that product, it has a rather nice form.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20log%28%7B%20%5Cprod_%7Bk%20=%200%7D%5En%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%20%7D%29%20=%20log%28%7B%20%5Cfrac%7Bn%21n%21n%21...n%21%7D%7B0%21n%211%21%28n-1%29%21....%28n-1%29%211%21n%210%21%7D%20%7D%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20log%28%7B%20%5Cprod_%7Bk%20=%200%7D%5En%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%20%7D%29%20=%20log%28%7B%20%5Cfrac%7B%20%7B%28n%21%29%7D%5E%7Bn+1%7D%20%7D%7B%20%7B%280%211%212%21....%28n-1%29%21n%21%29%7D%5E2%20%7D%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Then, using the rules of logarithms again, like log(a/b) = log(a) - log(b), and log(a&lt;sup&gt;n&lt;/sup&gt;) = n*log(a), we can simplify that further...&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20log%28%7B%20%5Cprod_%7Bk%20=%200%7D%5En%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%20%7D%29%20=%20log%28%7B%20%7B%28n%21%29%7D%5E%7Bn+1%7D%20%7D%29%20-%20log%28%7B%20%7B%280%211%212%21....%28n-1%29%21n%21%29%7D%5E2%20%7D%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20log%28%7B%20%5Cprod_%7Bk%20=%200%7D%5En%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%20%7D%29%20=%20%28n%20+%201%29log%28n%21%29%20-%202%20log%280%211%212%21....%28n-1%29%21n%21%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;It becomes convenient to note though, that 0! = 1, and can hence be dropped to give&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20log%28%7B%20%5Cprod_%7Bk%20=%200%7D%5En%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%20%7D%29%20=%20%28n%20+%201%29log%28n%21%29%20-%202%20log%281%212%21....%28n-1%29%21n%21%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Now :) The expression 1!2!3!....n! is actually very interesting. Because it can be factored very nicely. Remember that j! = 1*2*3*...*j. So, writing out the product...&lt;br /&gt;&lt;center&gt;&lt;br /&gt;1!2!3!....n! = (1)*(1*2)*(1*2*3)*...*(1*2*3*...*(n-1)*n)&lt;br /&gt;&lt;br /&gt;1!2!3!....n! = 1&lt;sup&gt;n&lt;/sup&gt;*2&lt;sup&gt;n-1&lt;/sup&gt;*3&lt;sup&gt;n-2&lt;/sup&gt;*...*n&lt;sup&gt;1&lt;/sup&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;In general, what you get is that&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%201%212%213%21...n%21%20=%20%5Cprod_%7Bk%20=%201%7D%5En%20k%5E%7Bn%20-%20k%20+%201%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Substituting that in, we now have&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20log%28%7B%20%5Cprod_%7Bk%20=%200%7D%5En%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%20%7D%29%20=%20%28n%20+%201%29log%28n%21%29%20-%202%20log%28%20%5Cprod_%7Bk%20=%201%7D%5En%20k%5E%7Bn%20-%20k%20+%201%7D%20%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Then, using logarithms again, we can use the substitutions&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20log%28n%21%29%20=%20%5Csum_%7Bk%20=%201%7D%5En%20log%28k%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20log%28%20%5Cprod_%7Bk%20=%201%7D%5En%20k%5E%7Bn%20-%20k%20+%201%7D%20%29%20=%20%5Csum_%7Bk%20=%201%7D%5En%20log%28k%5E%7Bn%20-%20k%20+%201%7D%29%20=%20%5Csum_%7Bk%20=%201%7D%5En%20%28n%20-%20k%20+%201%29%20log%28k%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And it becomes...&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20log%28%7B%20%5Cprod_%7Bk%20=%200%7D%5En%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%20%7D%29%20=%20%28n%20+%201%29%28%7B%5Csum_%7Bk%20=%201%7D%5En%20log%20k%7D%29%20-%202%20%28%7B%5Csum_%7Bk%20=%201%7D%5En%20%28n%20-%20k%20+%201%29%20log%20k%7D%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Which we can simplify, grouping the summations, to a rather neat&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csum_%7Bk%20=%201%7D%5En%20%282k%20-%20n%20-%201%29%20log%20k" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;To summarize then, plugging that back in as above, what we've established is that&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Cfrac%7B1%7D%7Blog%2010%7D%20%5Csum_%7Bk%20=%201%7D%5En%20%282k%20-%20n%20-%201%29%20log%28k%29%20%3C%20%5Csum_%7Bk%20=%200%7D%5En%20Floor%5Blog_%7B10%7D%20%5Cfrac%7Bn%21%7D%7B%28n-k%29%21k%21%7D%20%5D%20+%201" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;This lower bound is really nice because it looks exceedingly well behaved. We have no factorials to deal with, no crazy functions defined in terms of god knows what ... it seems relatively normal.&lt;br /&gt;&lt;br /&gt;But it is still difficult to calculate, and doesn't give us a good, usable bound on the function we're looking for. So what we're going to do is approximate the summation by integrals.&lt;br /&gt;&lt;br /&gt;At this point, I've been writing out the mechanics of the work pretty explicitly, because I thought that it involved a couple of neat mechanizations and substitutions. It really gets rather dry from here on, so I'm going to gloss over the worst of the details.&lt;br /&gt;&lt;br /&gt;So, we want to approximate the sum by integrals. This is quite reasonable. Indeed, integrals were originally approximated by sums, and we're just doing the reverse, since things can be nicer to integrate than to sum explicitly.&lt;br /&gt;&lt;br /&gt;First, we break the function up like so,&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csum_%7Bk%20=%201%7D%5En%20%282k%20-%20n%20-%201%29%20log%28k%29%20=%202%20%5Csum_%7Bk%20=%201%7D%5En%20k%20log%28k%29%20-%20%28n%20+%201%29%20%5Csum_%7Bk%20=%201%7D%5En%20log%28k%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;We want to approximate the summation from below, so as to produce a lower bound on our lower bound. Through a judicious use of integration, we have that&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csum_%7Bk%20=%201%7D%5En%20log%28k%29%20%5Cleq%20%5Cint_1%5E%7Bn+1%7D%20log%28x%29%20dx" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csum_%7Bk%20=%201%7D%5En%20k%20log%28k%29%20%5Cgeq%20%5Cint_0%5En%20x%20log%28x%29%20dx" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Applying these, we have&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csum_%7Bk%20=%201%7D%5En%20%282k%20-%20n%20-%201%29%20log%28k%29%20%5Cgeq%202%5Cint_0%5En%20x%20log%28x%29%20dx%20-%20%28n%20+%201%29%20%5Cint_1%5E%7Bn+1%7D%20log%28x%29%20dx" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csum_%7Bk%20=%201%7D%5En%20%282k%20-%20n%20-%201%29%20log%28k%29%20%5Cgeq%20n%20+%20%5Cfrac%7Bn%5E2%7D%7B2%7D%20+%20n%5E2%20log%28%5Cfrac%7Bn%7D%7B1%20+%20n%7D%29%20-%20%281%20+%202n%29log%281%20+%20n%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;So, if DL(n) is the length of the nth row (I'm naming this function now because I don't want to have to keep typing out the stupid summation), we've now produced the bounds&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28n%20+%20%5Cfrac%7Bn%5E2%7D%7B2%7D%20+%20n%5E2%20log%28%5Cfrac%7Bn%7D%7Bn%20+%201%7D%29%20-%20%281%20+%202n%29log%281%20+%20n%29%29%5Cfrac%7B1%7D%7Blog%2010%7D%20%3C%20DL%28n%29%20%5Cleq%20log_%7B10%7D%282%29%20n%5E2%20+%20%281%20+%20log_%7B10%7D%282%29%29n%20+%201" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Note though that the upper bound was very crudely arrived at, and is no where close to the accuracy of the lower bound.  But I'd like to return to a moment to the discussion of order. From the upper bound, we determined that the function DL(n) grew with order of at most n&lt;sup&gt;2&lt;/sup&gt;. Looking at the lower bound now, there are a couple of terms to consider. Remember that the order of a function is going to be the term that grows the fastest as n increases. Looking at the terms of the lower bound, the one that stands out first and foremost is n&lt;sup&gt;2&lt;/sup&gt;. But there is also this curious n&lt;sup&gt;2&lt;/sup&gt;log(n/(n+1)). What to make of that, though? Note however that as n increases, n/(n+1) becomes very close to 1. As it approaches 1, log(n/(n+1)) actually approaches 0, and that term is effectively canceled. So as n becomes very large, the main contributing term of the lower bound is the n&lt;sup&gt;2&lt;/sup&gt; term. As DL(n) is bound from above and below by functions of order n&lt;sup&gt;2&lt;/sup&gt;, DL(n) must be of order n&lt;sup&gt;2&lt;/sup&gt;.&lt;br /&gt;&lt;br /&gt;So, as you write out more and more of the triangle, the sides are going to grow outwards in roughly parabolic fashion, moreso as you get further and further down.&lt;br /&gt;&lt;br /&gt;For fun, here's a plot of the upper and lower bounds, and the actual function.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_08B0rrzqpZ0/R2bYtJqp9zI/AAAAAAAAAN4/EK74fleISiU/s1600-h/PascalBound.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_08B0rrzqpZ0/R2bYtJqp9zI/AAAAAAAAAN4/EK74fleISiU/s400/PascalBound.jpg" alt="" id="BLOGGER_PHOTO_ID_5145037894517913394" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;That's all I've got : ) Anyway, moving on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-4241717340924077523?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/4241717340924077523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=4241717340924077523' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/4241717340924077523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/4241717340924077523'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/12/youve-probably-wondered-but-were-afraid.html' title='You&apos;ve Probably Wondered, But Were Afraid to Ask'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_08B0rrzqpZ0/R2bYtJqp9zI/AAAAAAAAAN4/EK74fleISiU/s72-c/PascalBound.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-8246365350069241635</id><published>2007-12-06T14:26:00.000-05:00</published><updated>2007-12-06T14:27:06.556-05:00</updated><title type='text'>My First Encounter With a Relativity Denier, Verdict: Stupid</title><content type='html'>(Cross-Posted at &lt;a href="http://canofpowerup.blogspot.com/2007/12/my-first-encounter-with-relativity.html"&gt;PowerUp&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Earlier on, &lt;a href="http://scienceblogs.com/pharyngula/2007/12/somebody_want_these.php"&gt;PZ pointed to an article by some whack-job&lt;/a&gt; claiming to refute the theory of relativity. I'm not very familiar with relativity denial, so I didn't actually read the article. I picked it up again &lt;a href="http://www.sunclipse.org/?p=422"&gt;courtesy of Blake&lt;/a&gt;, and now I wish I hadn't. Take a look at his descriptions here:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;MATHEMATICAL MODELS are abstract, idealized, imaginary models which contain characteristics and assumptions which cannot exist in reality (such as points, lines, triangles, spheres, etc.) These models can be purely logical, purely mathematical, geometric, kinematic, dynamic or electromagnetic. All of these models are based on the LAWS OF MATHEMATICS (symbols, equations, formulas etc.) which only approximate the physical LAWS OF NATURE. These mathematical models produce deductive conclusions which only apply to the idealized mathematical models.&lt;br /&gt;&lt;br /&gt;PHYSICAL MODELS are real models composed of physical objects which are used in empirical experiments. By repeating identical (as far as possible) testing with these models, inductive conclusions can be made. These inductive conclusions, because they are the results of physical experiments, are the fundamental method used by science in an attempt to understand the LAWS OF NATURE. Knowledge about the real Universe must come from physics and not from mathematics. Experience has always been the primary guide in human reasoning concerning physical facts.&lt;br /&gt;&lt;br /&gt;METAPHYSICAL MODELS are sophistic models which contain both mathematical characteristics and physical characteristics. These are mingled or mixed models. Neither mathematical deductions nor physical inductive conclusions can be produced from these models because they cannot exist in reality. These are pseudoscience models which result from “thought experiments”. These are purely imaginary mental creations. Any conclusions whatsoever that these models produce are completely irrelevant to anything. They cannot produce any valid understanding of reality. A sophist is someone who deceives people based on clever-sounding, but flawed arguments or explanations. However, these fallacious theories do produce popular imaginary science fiction tales about time travel (Back to the Future, motion picture) and spaceships that travel at the speed of light (Star Trek, motion picture).&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;We obviously lack a rigorous definition of what I'll call the "Pauli threshold", the point where an argument just gets so absurd that it's not even wrong. But I think it's clear that this particular nonsense is off the charts regardless of any metric we could possibly come up with.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;For someone who is supposedly a "mathematics graduate" it is stunning how ignorant those three paragraphs alone manage to be. Even the most superficial look at the history of physics and it's relationship to math deflates his claims easily. The differential and integral calculus were developed in large part as a framework for early classical mechanics, in addition to providing the basis of analytic function theory. Successive developments in latter include Fourier analysis, which gave us the Fourier transform and allows physicists to use such idealized objects as phase-shifted sinusoids to describe otherwise inaccessible quantum behavior. Need we bring up super-abstract Group Theory, which is pretty much indispensible in describing spacetime symmetries? Need we point out that the complex vector space, which includes those seemingly perfectly abstract "imaginary numbers", is an essential notion in quantum physics? For some generic thing's sake, you have no physics without mathematics! Mathematics and physics, far from being "inherently different", are so conceptually intertwined and contiguous as to be inseparable.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In addition to being ignorant of the history of science, it appears that he's behind on every development in the philosophy of science since, uh...Bacon? Science isn't purely inductive, it employs a combination of hypothetical, deductive and axiomatic reasoning at multiple levels. And for another thing, constructing a physical model necessarily employs mathematical reasoning within an axiomatic framework. The purpose of tests is to see if these abstract models &lt;i&gt;accurately predict reality&lt;/i&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I don't think I can bother with the rest of the article, the stupid is already burning through my skull. I'll leave to rest to other bloggers, &lt;a href="http://scienceblogs.com/pontiff/2007/12/a_central_nonpremise_of_quantu_1.php"&gt;Dave Bacon&lt;/a&gt; and "&lt;a href="http://skullsinthestars.com/2007/12/05/relativity-denialist-a-perfect-example-of-not-even-wrong-though-hes-actually-wrong-too/"&gt;gg&lt;/a&gt;" have already tackled much of it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-8246365350069241635?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/8246365350069241635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=8246365350069241635' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8246365350069241635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8246365350069241635'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/12/my-first-encounter-with-relativity.html' title='My First Encounter With a Relativity Denier, Verdict: Stupid'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-7602735527597946826</id><published>2007-12-01T14:55:00.000-05:00</published><updated>2007-12-01T17:53:09.490-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Proof'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Erdos-Szekeres, and The Mathematical Certainty of Structure</title><content type='html'>So, a couple of interesting results have come to light over the past week or so, and I'd like to discuss them here.&lt;br /&gt;&lt;br /&gt;First off, consider the following 101 random integers, generated using Mathematica, between 0 and 1000 for convenience to me.&lt;br /&gt;&lt;br /&gt;{458, 22, 856, 736, 354, 348, 843, 722, 112, 389, 790, 84, 154, 672, 263, 226, 185, 706, 985, 123, 161, 679, 349, 132, 562, 484, 576, 593, 503, 413, 895, 415, 227, 325, 791, 453, 386, 53, 772, 688, 765, 576, 644, 621, 404, 379, 5, 51, 684, 731, 286, 933, 111, 308, 758, 343, 664, 959, 659, 703, 817, 247, 817, 892, 923, 734, 305, 127, 340, 779, 412, 999, 264, 56, 825, 85, 477, 502, 603, 960, 496, 751, 363, 403, 419, 738, 670, 778, 271, 715, 932, 597, 899, 249, 228, 430, 891, 185, 23, 612, 544}&lt;br /&gt;&lt;br /&gt;Going through in order, without even looking, I guarantee that there is a subsequence in that sequence of at least length 11 that is monotonic, either each term is greater than or equal to the next, or each term is less than or equal to the next.&lt;br /&gt;&lt;br /&gt;Starting with 22, we can pick out, as convenient&lt;br /&gt;&lt;br /&gt;{22, 112, 123, 132, 227, 325, 386, 404, 502, 670, 715, 932}&lt;br /&gt;&lt;br /&gt;Even better, we managed to get a 12 length sequence.&lt;br /&gt;&lt;br /&gt;At this point, you're probably wondering what it all means.&lt;br /&gt;&lt;br /&gt;The point is that, repeat the experiment with any such sequence of 101 random numbers, and the result will always be the same. You will /always/ be able to find a monotonic subsequence of length 11. No matter what.&lt;br /&gt;&lt;br /&gt;In general, this result is the Erdos-Szekeres Theorem. The idea is that given an arbitrary sequence of integers of length n&lt;sup&gt;2&lt;/sup&gt; + 1, there always exists a monotonic subsequence of length n + 1.&lt;br /&gt;&lt;br /&gt;And now, proof. This is kind of technical, so don't feel poorly if you'd like to skip to the end, where I finally make my point. The point is actually independent of the proof, but whatever :)&lt;br /&gt;&lt;br /&gt;Proof&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;To begin with, we have a sequence,&lt;br /&gt;&lt;center&gt;&lt;br /&gt;{a&lt;sub&gt;1&lt;/sub&gt;, a&lt;sub&gt;2&lt;/sub&gt;, ..., a&lt;sub&gt;n&lt;sup&gt;2&lt;/sup&gt;&lt;/sub&gt;, a&lt;sub&gt;n&lt;sup&gt;2&lt;/sup&gt;+1&lt;/sub&gt;}&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;So take each a&lt;sub&gt;i&lt;/sub&gt; in the sequence, in order. For each, consider the longest monotonic increasing subsequence that &lt;i&gt;starts&lt;/i&gt; at a&lt;sub&gt;i&lt;/sub&gt;. We'll refer to this subsequence as L(a&lt;sub&gt;i&lt;/sub&gt;). Note that if L(a&lt;sub&gt;i&lt;/sub&gt;) is of length greater than or equal to n, for any a&lt;sub&gt;i&lt;/sub&gt;, this gives us a monotonic increasing subsequence of length at least n + 1, and we're done. So we have to assume that L(a&lt;sub&gt;i&lt;/sub&gt;) is of length less than or equal to n for all i.&lt;br /&gt;&lt;br /&gt;This means that each subsequence L(a&lt;sub&gt;i&lt;/sub&gt;) has a length between 1 and n. Note too, that because each subsequence is different (each starts at a different a&lt;sub&gt;i&lt;/sub&gt;), there are n&lt;sup&gt;2&lt;/sup&gt; + 1 many subsequences. So imagine sorting the sequences by length. Distributing n&lt;sup&gt;2&lt;/sup&gt; + 1 many sequences over n many lengths, there must be some length such that at least n + 1 many subsequences have that length. We'll call that length t.&lt;br /&gt;&lt;br /&gt;A bit of notation. We have a sequence of length n&lt;sup&gt;2&lt;/sup&gt;+1, which we could refer to an arbitrary element of as a&lt;sub&gt;i&lt;/sub&gt;. Suppose we wanted to refer to a specific subsequence. For example, {a&lt;sub&gt;3&lt;/sub&gt;, a&lt;sub&gt;5&lt;/sub&gt;, a&lt;sub&gt;12&lt;/sub&gt;}. A way to think of this more compactly is to refer to the elements of the subsequence as a&lt;sub&gt;k(j)&lt;/sub&gt;, where k(1) = 3, k(2) = 5, k(3) = 12. In general then, I can refer to subsequences of the main sequence as a&lt;sub&gt;k(j)&lt;/sub&gt;, where j goes from 1 to the length of the subsequence.&lt;br /&gt;&lt;br /&gt;Consider all the i's such that L(a&lt;sub&gt;i&lt;/sub&gt;) is of length t. As I said, there are at least n + 1 of these. Consider k(j) such that k(1) is the smallest i, k(2) is the next largest, and so on to k(n+1). a&lt;sub&gt;k(j)&lt;/sub&gt; is then an a subsequence of the original sequence of length n + 1.&lt;br /&gt;&lt;br /&gt;I argue that {a&lt;sub&gt;k(j)&lt;/sub&gt;} is monotonically decreasing, which is to say that a&lt;sub&gt;k(1)&lt;/sub&gt; &amp;gt = a&lt;sub&gt;k(2)&lt;/sub&gt; &amp;gt= ... &amp;gt= a&lt;sub&gt;k(n + 1)&lt;/sub&gt;.&lt;br /&gt;&lt;br /&gt;Assume not, that we have k(j) &amp;lt k(i) such that a&lt;sub&gt;k(j)&lt;/sub&gt; &amp;lt a&lt;sub&gt;k(i)&lt;/sub&gt;. We know that L(a&lt;sub&gt;k(j)&lt;/sub&gt;) and L(a&lt;sub&gt;k(i)&lt;/sub&gt;) are both of length t. But since  L(a&lt;sub&gt;k(j)&lt;/sub&gt;) is the longest monotonically increasing subsequence starting at position k(j), as a&lt;sub&gt;k(j)&lt;/sub&gt; &amp;lt a&lt;sub&gt;k(i)&lt;/sub&gt;, a&lt;sub&gt;k(i)&lt;/sub&gt; must be included in L(a&lt;sub&gt;k(j)&lt;/sub&gt;). Further, all of L(a&lt;sub&gt;k(i)&lt;/sub&gt;) must be included in L(a&lt;sub&gt;k(j)&lt;/sub&gt;). This gives us then that L(a&lt;sub&gt;k(j)&lt;/sub&gt;) is actually longer than L(a&lt;sub&gt;k(i)&lt;/sub&gt;), since L(a&lt;sub&gt;k(j)&lt;/sub&gt;) includes all of L(a&lt;sub&gt;k(i)&lt;/sub&gt;), and L(a&lt;sub&gt;k(i)&lt;/sub&gt;) at the very least cannot include a&lt;sub&gt;k(j)&lt;/sub&gt;. This contradicts the fact that both L sequences are of length t.&lt;br /&gt;&lt;br /&gt;Therefore, we have that for all k(j), {a&lt;sub&gt;k(j)&lt;/sub&gt;} is in fact monotonically decreasing.&lt;br /&gt;&lt;br /&gt;Therefore we have a monotonic sequence of length n + 1. And we are done.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;So, the point is that Erdos-Szekeres guarantees that, independent of the sequence itself, any n&lt;sup&gt;2&lt;/sup&gt; + 1 length sequence has a monotonic subsequence of length n.&lt;br /&gt;&lt;br /&gt;This is is quite exceptional to me. The point of it all is that, within the sea of randomness that is ever possible sequence of a given length, there is a mathematical guarantee of order.&lt;br /&gt;&lt;br /&gt;This shows up other places as well. For example, Ramsey theory guarantees that, if you invite 6 people to a party, no matter what people you invite, at least three of them will all know each other or all not know each other. Similarly, in a 49 person party, you are guaranteed a group of five people that all know or all don't know each other.&lt;br /&gt;&lt;br /&gt;Islands of guaranteed stability within realms of what can only be described as chaos.&lt;br /&gt;&lt;br /&gt;The reason all this interests me is that of late, on several fronts, there has been a question of order. Order in nature and the physical world, for example. Intelligent Design people maintain that order cannot arise from nothing. There's the question of the seeming order of the physical laws of the universe. Where does all this order come from? I don't claim to know the answer, but what this seems to suggest is that in any mathematical system, order might well be unavoidable. Even in a system that is consistently unpredictable, that behavior itself by the fact of it being described, has some degree of order. The Mathematical Certainty of Order.&lt;br /&gt;&lt;br /&gt;I don't know if that's valid at all, but it certainly sounds nice.&lt;br /&gt;&lt;br /&gt;Discuss.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-7602735527597946826?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/7602735527597946826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=7602735527597946826' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/7602735527597946826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/7602735527597946826'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/12/erdos-szekeres-and-mathematical.html' title='Erdos-Szekeres, and The Mathematical Certainty of Structure'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-2059425639621161588</id><published>2007-11-10T11:16:00.000-05:00</published><updated>2007-11-10T11:17:25.881-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Problems'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>A Sequence Of Interest</title><content type='html'>This is just an interesting problem that came up the other day, and I rather enjoyed my solution to it.&lt;br /&gt;&lt;br /&gt;We have a sequence,&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20s_1%20=%201" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20s_%7Bn+1%7D%20=%20%5Csqrt%7Bs_n%20+%20s_%7Bn-1%7D%20+%20...%20+%202%20+%201%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Our goal is the value of &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Cfrac%7Bs_n%7D%7Bn%7D" align="middle" border="0" /&gt; as n goes to infinity.&lt;br /&gt;&lt;br /&gt;For those interested, the first few values are approximately 1, 1.414, 1.848, 2.294, 2.749, ... The exact form of the values quickly becomes a mess of nested roots I wouldn't want to subject anyone to.&lt;br /&gt;&lt;br /&gt;The first thing to do is a rather nice substitution, putting in the definition of &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?s_n" align="middle" border="0" /&gt; to achieve&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20s_%7Bn%20+%201%7D%20=%20%5Csqrt%7Bs_n%20+%20%7Bs_n%7D%5E2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Several things become obvious right away. Most importantly, perhaps, is that the sequence is increasing. This is pretty clear from the numeric values I gave for the sequence, but this verifies it since&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Csqrt%7Bs_n%20+%20%7Bs_n%7D%5E2%7D%20%3E%20s_n" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Giving&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?s_%7Bn+1%7D%20%3E%20s_n" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;That in hand, I would like to generalize a bit and look at the function&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7Bx%20+%20x%5E2%7D%20-%20x" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Specifically, I want to think about its behavior as x goes to infinity. Just straight up plugging in infinity is rather unhelpful, since you get infinity - infinity, but with some cunning manipulation ... observe.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7Bx%20+%20x%5E2%7D%20-%20x%20=%20%5Cfrac%7B%28%5Csqrt%7Bx%20+%20x%5E2%7D%20-%20x%29%28%5Csqrt%7Bx%20+%20x%5E2%7D%20+%20x%29%7D%7B%5Csqrt%7Bx%20+%20x%5E2%7D%20+%20x%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7Bx%20+%20x%5E2%7D%20-%20x%20=%20%5Cfrac%7Bx%20+%20x%5E2%20-%20x%5E2%7D%7Bx%5Csqrt%7B%5Cfrac%7B1%7D%7Bx%7D%20+%201%7D%20+%20x%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7Bx%20+%20x%5E2%7D%20-%20x%20=%20%5Cfrac%7Bx%7D%7Bx%5Csqrt%7B%5Cfrac%7B1%7D%7Bx%7D%20+%201%7D%20+%20x%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7Bx%20+%20x%5E2%7D%20-%20x%20=%20%5Cfrac%7B1%7D%7B%5Csqrt%7B%5Cfrac%7B1%7D%7Bx%7D%20+%201%7D%20+%201%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Cfrac%7B1%7D%7B%5Csqrt%7B%5Cfrac%7B1%7D%7Bx%7D%20+%201%7D%20+%201%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;When I first wrote up this problem to turn it (it's for a class), once I got to the fraction representation, I was able to use L'Hopital's rule to solve this. As such, I titled my proof for Captain Bohman 'A Sequence of Interest : or How I Learned to Stop Worrying and Love L'Hopital'. Unfortunately, I then came up with the much nicer substitution you see above, which removes the need for L'Hopital, and thus ruins what is otherwise a great title. Just a personal side note.&lt;br /&gt;&lt;br /&gt;But now we have a much nicer form of the expression, and we can do many things with it. For example,&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Clim_%7Bx%20%5Cto%20%5Cinfty%7D%20%5Cfrac%7B1%7D%7B%5Csqrt%7B%5Cfrac%7B1%7D%7Bx%7D%20+%201%7D%20+%201%7D%20=%20%5Cfrac%7B1%7D%7B%5Csqrt%7B1%20+%200%7D%20+%201%7D%20=%20%5Cfrac%7B1%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Thus,&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Clim_%7Bx%20%5Cto%20%5Cinfty%7D%20%5Csqrt%7Bx%20+%20x%5E2%7D%20-%20x%20=%20%5Cfrac%7B1%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Which I find is a fascinating limit. Really it's why I like this problem so much.&lt;br /&gt;&lt;br /&gt;But before we go back to the sequence, a couple of things to note. As x increases, &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Cfrac%7B1%7D%7Bx%7D" align="middle" border="0" /&gt; is strictly decreasing, which means that &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Cfrac%7B1%7D%7B%5Csqrt%7B%5Cfrac%7B1%7D%7Bx%7D%20+%201%7D%20+%201%7D" align="middle" border="0" /&gt; is strictly increasing. Since at x = 0 the function has the value 0, it is strictly increasing, and the limit as x goes to infinity is 1/2, the function increases from 0, continuously passes through all values from 0 to 1/2, finally reaching 1/2 very far from now. Just keep that in mind.&lt;br /&gt;&lt;br /&gt;And why is all this important? Because if we jump back to our sequence, and look at successive differences of terms, we get&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20s_%7Bn+1%7D%20-%20s_n%20=%20%5Csqrt%7Bs_n%20+%20%7Bs_n%7D%5E2%7D%20-%20s_n" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Since, as we discussed, &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?s_n" align="middle" border="0" /&gt; is increasing, the limit can be applied to say&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Clim_%7Bn%20%5Cto%20%5Cinfty%7D%20s_%7Bn+1%7D%20-%20s_n%20=%20%5Cfrac%7B1%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And we can use facts about the limit to say nice things about those differences. For example, the successive differences are strictly increasing, and increase to 1/2. This is important, because it means that every difference is bounded from above by 1/2.&lt;br /&gt;&lt;br /&gt;And that is what we can use do the following. Because 1/2 is greater than every successive difference, not that we can do the following&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20s_2%20%3C%20s_1%20+%20%5Cfrac%7B1%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20s_3%20%3C%20s_2%20+%20%5Cfrac%7B1%7D%7B2%7D%20%3C%20s_1%20+%20%5Cfrac%7B1%7D%7B2%7D%20+%20%5Cfrac%7B1%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20s_4%20%3C%20s_1%20+%20%5Cfrac%7B1%7D%7B2%7D%20+%20%5Cfrac%7B1%7D%7B2%7D%20+%20%5Cfrac%7B1%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20..." align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20s_n%20%3C%20s_1%20+%20%28n%20-%201%29%5Cfrac%7B1%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Since &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20s_1%20=%201" align="middle" border="0" /&gt;, we have a rather nice upper bound on &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?s_n" align="middle" border="0" /&gt;,&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20s_n%20%3C%20%28n+1%29%5Cfrac%7B1%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;This will come in handy. Remember that one.&lt;br /&gt;&lt;br /&gt;Now we want to bound from below. This gets a little trickier.  Remember how &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Csqrt%7Bx%20+%20x%5E2%7D%20-%20x" align="middle" border="0" /&gt; increased smoothly from 0 to 1/2? As I pointed out, the successive differences do the same thing, though much less smoothly. That is to say, given some value between 0 and 1/2, we'll call it f, I can find an N such that for any n greater than N,&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20s_%7Bn%20+%201%7D%20-%20s_n%20%3E%20f" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;That is, any successive differences after N will be bound from below by f. We can then bound the sequence from below, like so. For convenience, I'm going to say that f equals p*(1/2), for some value of p between 0 and 1. Though obviously p is less than 1. So, given a value of p, I can find an N such that&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20s_%7BN%20+%201%7D%20-%20s_N%20%3E%20p%5Cfrac%7B1%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Or, more nicely,&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20s_%7BN+1%7D%20%3E%20s_N%20+%20p%5Cfrac%7B1%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;But remember, all successive differences there on are also bound by p*(1/2), so&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20s_%7BN+2%7D%20%3E%20s_%7BN+1%7D%20+%20p%5Cfrac%7B1%7D%7B2%7D%20%3E%20s_N%20+%20p%5Cfrac%7B1%7D%7B2%7D%20+%20p%5Cfrac%7B1%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20s_%7BN+2%7D%20%3E%20s_N%20+%202p%5Cfrac%7B1%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Extrapolating outward, we get, for any positive integer k&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20s_%7BN+k%7D%20%3E%20s_N%20+%20k%20p%20%5Cfrac%7B1%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And that gives us a lower bound, starting from N and going onwards.&lt;br /&gt;&lt;br /&gt;Now we can combine our bounds to say, for a given value of p and the appropriately chosen value of N,&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20s_N%20+%20k%20p%20%5Cfrac%7B1%7D%7B2%7D%20%3C%20s_%7BN+k%7D%20%3C%20%28N%20+%20k%20+1%29%5Cfrac%7B1%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Now things start falling into place. We just just follow our noses. Start by dividing through by N + k.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Cfrac%7Bs_N%7D%7BN%20+%20k%7D%20+%20%5Cfrac%7Bk%7D%7BN%20+%20k%7D%20p%20%5Cfrac%7B1%7D%7B2%7D%20%3C%20%5Cfrac%7Bs_%7BN+k%7D%7D%7BN%20+%20k%7D%20%3C%20%5Cfrac%7BN%20+%20k%7D%7B2%28N%20+%20k%29%7D%20+%20%5Cfrac%7B1%7D%7B2%28N%20+%20k%29%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Cfrac%7Bs_N%7D%7BN%20+%20k%7D%20+%20%5Cfrac%7Bk%7D%7BN%20+%20k%7D%20p%20%5Cfrac%7B1%7D%7B2%7D%20%3C%20%5Cfrac%7Bs_%7BN+k%7D%7D%7BN%20+%20k%7D%20%3C%20%5Cfrac%7B1%7D%7B2%7D%20+%20%5Cfrac%7B1%7D%7B2%28N%20+%20k%29%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;With that in hand, we can start discussing what happens as k increases. Note that N is constant, so as k increases, &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Cfrac%7Bs_N%7D%7BN%20+%20k%7D" align="middle" border="0" /&gt; is a constant divided by a larger and larger value, and it goes to 0. Related, as k goes to infinity, &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Cfrac%7Bk%7D%7BN%20+%20k%7D" align="middle" border="0" /&gt; is essentially k/k, and will go to 1. On the other side, &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Cfrac%7B1%7D%7B2%28N%20+%20k%29%7D" align="middle" border="0" /&gt; is a constant divided by an increasing value, so it will go to 0 as well. So as k increases to infinity, you're left with&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20p%20%5Cfrac%7B1%7D%7B2%7D%20%3C%20%5Clim_%7Bk%20%5Cto%20%5Cinfty%7D%20%5Cfrac%7Bs_%7BN+k%7D%7D%7BN%20+%20k%7D%20%3C%20%5Cfrac%7B1%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Which is the same as saying, for exceptionally large n,&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20p%20%5Cfrac%7B1%7D%7B2%7D%20%3C%20%5Clim_%7Bn%20%5Cto%20%5Cinfty%7D%20%5Cfrac%7Bs_n%7D%7Bn%7D%20%3C%20%5Cfrac%7B1%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Which is quite nice! Basically we've squeezed the ratio between the ratios of the upper and lower bounds of the sequence, and squeezed the limit of the ratio to something between p*(1/2) and 1/2. Note though that p was said to be less than 1, so p*(1/2) is less than 1/2. So the limit in the bound above could actually be less than 1/2. However, notice that this derivation is valid for any value of p less than 1, and so the inequality above must be valid for any value of p less than 1. So I can essentially take the above bound, and squeeze p towards 1 as close as I want, which pushes the ratio closer and closer to 1/2 before finally nailing it there.&lt;br /&gt;&lt;br /&gt;And we get&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Clim_%7Bn%20%5Cto%20%5Cinfty%7D%20%5Cfrac%7Bs_n%7D%7Bn%7D%20=%20%5Cfrac%7B1%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And so it's done.&lt;br /&gt;&lt;br /&gt;Probably much more loquacious than need be, but I'd hate to think I lost anyone. Hope you enjoyed that as much as I.&lt;br /&gt;&lt;br /&gt;*wag*&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-2059425639621161588?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/2059425639621161588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=2059425639621161588' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2059425639621161588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2059425639621161588'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/11/sequence-of-interest.html' title='A Sequence Of Interest'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-4158213749326345207</id><published>2007-10-28T14:15:00.000-04:00</published><updated>2007-10-28T14:16:17.788-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>The Probabilistic Method</title><content type='html'>Now here is something quite cool. The probabilistic method.&lt;br /&gt;&lt;br /&gt;The idea is this, in glib summary, that you prove something exists by proving that the probability of it existing is greater than 0, or that the probability of it not existing is less than one.&lt;br /&gt;&lt;br /&gt;There are many different ways to approach this really, though they all amount to the same thing. You consider a distribution of mathematical objects, and you're interested in one with a particular property. You imagine picking one of those objects from that random distribution, and show that the probability of picking the one your after, or one of the type your after, is greater than zero, or the probability of not picking it is less than one. The idea is that if there is a probability of you picking it, then it must exist /somewhere/ in the set. You don't know where, but it's got to be there somewhere or you would have no probability of finding it.&lt;br /&gt;&lt;br /&gt;It's rather silly in many ways. For example, even though you prove that something exists, especially in this way, gives you no insight into how to find it. It's completely non-constructive, but the logic of the approach is irrefutable.&lt;br /&gt;&lt;br /&gt;But I suppose it is best taught by example.&lt;br /&gt;&lt;br /&gt;First off, a bit on graph theory.&lt;br /&gt;&lt;br /&gt;A graph is a collection of things. Objects. They can be ... most anything really. These are called vertices. The important part of the graph is that it also contains connections, or edges between the vertexes. A good example is a map. A map can be modeled as a graph, were the vertices are cities and edges the roads between them. But the idea of a graph can be extended and used to apply to many things. As such, it's useful to study the abstract model of a graph, because any insights can then be applied to anything you can model with graphs.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_08B0rrzqpZ0/RyP6v-3PcQI/AAAAAAAAAMw/YTZgTDbq45w/s1600-h/GraphsLabeled_701.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_08B0rrzqpZ0/RyP6v-3PcQI/AAAAAAAAAMw/YTZgTDbq45w/s400/GraphsLabeled_701.gif" alt="" id="BLOGGER_PHOTO_ID_5126216503113249026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There are many nice questions you can ask about graphs. For example, graph colorings. Suppose you are going give each vertex of a graph a color. However, you don't want to connect any vertex to be connected to a vertex of the same color. For a given graph, what is the minimum number of colors needed to color it?&lt;br /&gt;&lt;br /&gt;That's actually a really interesting example. A quite famous ... issue ... in mathematics is the four color theorem. The idea is that given a map, any map, you can color the countries on the map such that no country is touching a country of the same color, with no more than four colors. This is actually a graph coloring question. The idea is you model each country as a vertex in your graph, and create edges between countries that touch each other. The problem is completely generalizable to graph theory. The nice thing about this is that you've taken a problem that can be overly complicated due to borders of countries being strange shapes, and all kinds of bizarre geometries, and turned it into something much more straight forward, a set of vertexes and connections between them. That is the beauty of abstract mathematics.&lt;br /&gt;&lt;br /&gt;For those interested in reading further, MarkCC has an &lt;a href="http://scienceblogs.com/goodmath/goodmath/graph_theory/"&gt;excellent set of posts&lt;/a&gt; on graph theory. Unfortunately the link lists them in reverse chronological orders, so for introductory graph theory posts you have to scroll all the way to the bottom and work your way up. Have at it :)&lt;br /&gt;&lt;br /&gt;But the problem I would like to address, with the probabilistic method, is that of dominating sets.&lt;br /&gt;&lt;br /&gt;Here we have a graph. Please excuse the crudeness.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_08B0rrzqpZ0/RyQHl-3PcRI/AAAAAAAAAM4/BtQuQt_nnjA/s1600-h/CrudeGraph.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_08B0rrzqpZ0/RyQHl-3PcRI/AAAAAAAAAM4/BtQuQt_nnjA/s400/CrudeGraph.jpg" alt="" id="BLOGGER_PHOTO_ID_5126230624965718290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Notice how one of the edges in this graph overlaps another, without a vertex between. This ok. The only think that matters about edges is the two vertices they connect. The more complicated the graph, the harder it is to draw sensibly on a surface like that.&lt;br /&gt;&lt;br /&gt;However, a dominating set is a set of vertices such that anything not in the set is connected to something in the set. For example, the set of all vertices in the graph is a dominating set because anything not in the set (which is nothing) is connected to something in the set. Below, I've circled vertices that compose a dominating set.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_08B0rrzqpZ0/RyQIou3PcSI/AAAAAAAAANA/iNr8DxAYoug/s1600-h/DominatingSet.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_08B0rrzqpZ0/RyQIou3PcSI/AAAAAAAAANA/iNr8DxAYoug/s400/DominatingSet.jpg" alt="" id="BLOGGER_PHOTO_ID_5126231771721986338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A given graph can have multiple dominating sets. A interesting question then is what is the size of the smallest dominating set for a given graph?&lt;br /&gt;&lt;br /&gt;For this exercise, I'm going to limit myself to r-regular graphs. An r-regular graph is a subtype of graph such that any vertex is necessarily connected to r many other vertexes. So, the question is this:&lt;br /&gt;&lt;br /&gt;Given an r-regular graph, what is the size of the smallest dominating set?&lt;br /&gt;&lt;br /&gt;And we're going to use the probabilistic method! The one you've been waiting for.&lt;br /&gt;&lt;br /&gt;Consider a random graph. That is to say, we have n vertices, and we are, at random, going to construct edges between them, with no restriction other than that the resultant graph is r-regular.&lt;br /&gt;&lt;br /&gt;Next we're going to perform an experiment. We're going to consider each of the n vertices, and with probability p, we are going to add them to set S1. After this is done, there should be, on average, p*n many elements in set S1, and (1 - p)*n vertexes remaining.&lt;br /&gt;&lt;br /&gt;Next, we go through the remaining (1 - p)*n vertexes. Considering each vertex, if there is /not/ an edge connecting it to something in S1, we add it to S2. After this, all the remaining vertices not in S1 or S2 will be connected to something in S1.&lt;br /&gt;&lt;br /&gt;So then consider the set S as the union of sets S1 and S2. S is a dominating set of the graph.&lt;br /&gt;&lt;br /&gt;Note that any dominating set of the graph can be constructed in this way. Assume that the graph has a given dominating set. In the first step of our experiment, there is every possibility that every vertex in that dominating set will be added to S1. On average, there will be n*p elements in S1, but it can happen that exactly the vertices of a dominating set are added to S1. In that case, since everything else is connected to S1, S2 will be empty, and S = S1, a dominating set.&lt;br /&gt;&lt;br /&gt;What we are going to look at though is, performing this experiment, on average how big will the resultant dominating set be?&lt;br /&gt;&lt;br /&gt;So we want to consider what the expected size of S is. We know that S1 and S2 share no elements, because S2 taken from the vertices not in S1. As such, we know that the size of S is the size S1 plus the size of S2.&lt;br /&gt;&lt;br /&gt;S1 will contain, on average, n*p vertices.&lt;br /&gt;&lt;br /&gt;But what's the expected size of S2? It's chosen from a population of (1 - p)*n vertices. But, given an element from that population, we'll call it w, what is the probability that it is added to S2? That is, the probability that it is not connected to anything in S1.&lt;br /&gt;&lt;br /&gt;So, given a single vertex w, what is the probability that it is not connected to S1?&lt;br /&gt;&lt;br /&gt;A given element of S1, u, what is the probability that u is not connected to w? We know that u is connected to r many things. The probability that any one of them is w is 1/(n - 1), because w is one out of the n - 1 remaining vertices. So the probability that u connects to w is r/(n - 1). Therefore the probability that u is /not/ connected to w is 1 - r/(n - 1).&lt;br /&gt;&lt;br /&gt;But that is for one element of S1. We want all elements of S1 not connected to w. The probability of this occurring is given by&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20P%28w%20is%20not%20connected%20to%20S1%29%20=%20%281%20-%20%5Cfrac%7Br%7D%7Bn%20-%201%7D%29%5E%7Bsize%20of%20S1%7D%20=%20%281%20-%20%5Cfrac%7Br%7D%7Bn%20-%201%7D%29%5E%7Bn*p%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Therefore, the expected size of S, the generated dominating set, is given by&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20n*p%20+%20n*%281%20-%20p%29*%281%20-%20%5Cfrac%7Br%7D%7Bn%20-%201%7D%29%5E%7Bn*p%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;That expression there is the fruit of our probabilistic labors. But now what can we do with it? Suppose for example we have that p = 1/2, so elements are inserted into S1 initially with a 50% chance. Then we have&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Cfrac%7Bn%7D%7B2%7D%20+%20%5Cfrac%7Bn%7D%7B2%7D*%7B%281%20-%20%5Cfrac%7Br%7D%7Bn%20-%201%7D%29%7D%5E%7Bn/2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Cfrac%7Bn%7D%7B2%7D*%281%20+%20%7B%281%20-%20%5Cfrac%7Br%7D%7Bn%20-%201%7D%29%7D%5E%7Bn/2%7D%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Looking at the above expression, &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%201%20+%20%7B%281%20-%20%5Cfrac%7Br%7D%7Bn%20-%201%7D%29%7D%5E%7Bn/2%7D" align="middle" border="0" /&gt; is going to be consistently greater than one, so with p = 1/2, you will expect on average a dominating set of size slightly greater than n/2.&lt;br /&gt;&lt;br /&gt;What does this mean? If the expected size is a given value, then there must be a dominating set with size less than that which has some probability of occuring. What this says then is that there exists a dominating set whose size is at most n/2*(all that stuff). What this shows then is that, for any r-regular graph with n vertices, the minimum dominating set will have size less than or equal to n/2*(stuff).&lt;br /&gt;&lt;br /&gt;Can we improve this, though? The idea is, can we modify our experiment to produce a better result. The only parameter we have to play with, without changing the actual structure of our experiment, is p. By choosing appropriate values of p, we can minimize the expression for the expected value of the size of the dominating set. Minimizing that, as before, since that is the expected size of the dominating set, there must be dominating sets with size less than or equal that.&lt;br /&gt;&lt;br /&gt;But how do we know that this approach is valid, really? Well, we can test it for known cases. For example, consider a graph of r + 1 vertices, where each vertex is connected to every other vertex. Clearly this fits the r-regular restriction. In this case also, a single vertex is a dominating set, because all vertices are connected to every other vertex. But what does our expression give in that case? Letting n = r + 1,&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28r%20+%201%29*p%20+%20%28r%20+%201%29*%281%20-%20p%29*%7B%281%20-%20%5Cfrac%7Br%7D%7Br%20+%201%20-%201%7D%29%7D%5E%7B%28r%20+%201%29*p%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28r%20+%201%29*p%20+%20%28r%20+%201%29*%281%20-%20p%29*%7B%281%20-%20%5Cfrac%7Br%7D%7Br%7D%29%7D%5E%7B%28r%20+%201%29*p%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28r%20+%201%29*p%20+%20%28r%20+%201%29*%281%20-%20p%29*%7B%281%20-%201%29%7D%5E%7B%28r%20+%201%29*p%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28r%20+%201%29*p%20+%20%28r%20+%201%29*%281%20-%20p%29*%7B0%7D%5E%7B%28r%20+%201%29*p%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28r%20+%201%29*p" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Note, if we had chosen that p = 1/(r + 1), the expected size of the dominating set would be 1, which confirms what we already knew, the graph has a dominating set of size 1.&lt;br /&gt;&lt;br /&gt;So ideally, we want to strictly minimize our expression with respect to p. One way to do this would be the typical calculus approach, finding the zeros of the derivative with respect to p. Unfortunately this produces an absolutely unintelligible, unsimplifiable mess, albeit a very nice upper bound on the size of the minimum dominating set. Given actual values of r and n, one can use that formula to calculate an explicit upper bound, but the general formula is rather ugly and uninteresting.&lt;br /&gt;&lt;br /&gt;However, in general, choosing a near optimal p value,&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20n*p%20+%20n*%28p%20-%201%29*%7B%281%20-%20%5Cfrac%7Br%7D%7Bn%20-%201%7D%29%7D%5E%7Bn*p%7D%20%5Cleq%20%5Cfrac%7B1%20+%20Ln%28r%29%7D%7Br%7D*n" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Which gives a much nicer upper bound, though not quite as tight as I would like. I'll leave that as an exercise to the interested reader.&lt;br /&gt;&lt;br /&gt;But what have we accomplished here, really? If you take the above inequality as true, and I do think it is, we've shown that for any r-regular graph with n vertices, it contains a dominating set of size less than or equal to (1 + Ln(r))/r*n. Because we started our experiment with a general r-regular graph, this holds true across all r-regular graphs. Notice though, we have made no assumptions or declarations about that dominating set, except proving that it exists.&lt;br /&gt;&lt;br /&gt;And that is the probabilistic method. Given a random distribution of objects, you prove that the probability of getting it is greater than 0. Therefore it must exist in the distribution, and it must exist period.&lt;br /&gt;&lt;br /&gt;I really like this. I often think of myself as a math experimentalist, and this kind of approach, setting up an 'experiment' and looking at the implications of the outcomes rather appeals to me.&lt;br /&gt;&lt;br /&gt;Anyway. I hope that was informative. And that I didn't muck anything up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-4158213749326345207?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/4158213749326345207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=4158213749326345207' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/4158213749326345207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/4158213749326345207'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/10/probabilistic-method.html' title='The Probabilistic Method'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_08B0rrzqpZ0/RyP6v-3PcQI/AAAAAAAAAMw/YTZgTDbq45w/s72-c/GraphsLabeled_701.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-3023037979919582407</id><published>2007-10-26T22:04:00.001-04:00</published><updated>2007-10-26T22:04:59.844-04:00</updated><title type='text'>Cranks Cluedo: The Murder of Science with Pseudomathematically Enhanced Ignorance.</title><content type='html'>(Cross Posted at &lt;a href="http://canofpowerup.blogspot.com/2007/10/cranks-cluedo-murder-of-science-with.html"&gt;PowerUp&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;[Okay folks, this is the neat thing I mentioned from a while back. The blogger with whom I am collaborating on it is &lt;a href="http://sunclipse.org/"&gt;Blake Stacey&lt;/a&gt;. The basic idea is to provide a series of posts debunking specific misuses of science among cranks, in a way that is analogous to the Hoofnagle's &lt;a href="http://scienceblogs.com/denialism/deck.php"&gt;Denialist Deck of Cards&lt;/a&gt;. For our game, we go with a Clue Format, and we call this series &lt;i&gt;Cranks Cluedo&lt;/i&gt;. The Dossier has three parameters: "Who?", describing the perpetrating crank; "What Fallacy?" describing the rhetorical device or logical fallacy involved; and finally, "What Field?", describing the field of science the perpetrating crank abuses. Blake will be doing quantum woo for his first post in the series, I focus on creationists in abuses of probability and related concepts.]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DOSSIER&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Who?:&lt;/span&gt; Creationists.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What Fallacy?:&lt;/span&gt; The Argument from Augmented Ignorance.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What Field?:&lt;/span&gt; Probability and Optimization Theory.&lt;br /&gt;&lt;br /&gt;Ignorance, though much maligned, is a natural aspect of the human condition. We are all ignorant of more subjects than we can ever hope to be knowledgeable in. As the saying goes, “ask me how to fix my car, and I'm completely in the dark.” But it is equally true that ignorance is by no means a reason to declare something a priori impossible. For instance, if my car mechanic informs me that my car is not starting because of a loose spark plug, I cannot dismiss this simply because I do not understand how such a small part can disrupt the functioning of such a complex device. But this utterly fallacious argument, or at least something similar to it, underlies the claims of many varieties of creationist when they assert that evolution involves prohibitively improbable events.&lt;br /&gt;&lt;br /&gt;Creationists use a special case of the argument from ignorance. Here, I informally denote it as the argument from augmented ignorance. Whereas the garden variety appeal to ignorance exploits genuine (which is not to say necessarily excusable) ignorance in a given instance, appeals to augmented ignorance use a myriad of clever rhetorical ploys to amplify ignorance beyond proportion. When creationists appeal to the “low probability” of evolutionary outcomes, they typically use unnecessarily turgid mathematical jargon and notation to gloss over important details of evolution. Nowhere is this better illustrated than in the &lt;a href="http://www.talkorigins.org/indexcc/CB/CB010.html"&gt;classical creationist appeal to probability&lt;/a&gt;, conveniently provided by the &lt;a href="http://www.talkorigins.org/indexcc/list.html"&gt;TalkOrigins Index to Creationist Claims&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The proteins necessary for life are very complex. The odds of even one simple protein molecule forming by chance are 1 in 10&lt;sup&gt;113&lt;/sup&gt;, and thousands of different proteins are needed to form life.&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Setting aside the usual conflation of evolution and abiogenesis, even this concise assertion manages to replicate every fallacy in the creationist probability playbook. It is nothing but a regurgitation of numbers without any consideration of whether the mathematical model that contextualizes them provides accurate predictions in the physical world. Unfortunately, it doesn't. The two basic false assumptions that render it moot are as follows:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;The Assumption of Uniformly Distributed Outcomes:&lt;/span&gt; Or less formally, assuming that all outcomes in the sample space of a random experiment are equally likely. The process of assembling proteins above is assumed to be a completely unguided and effectively random process, thus ignoring its underlying physics and chemistry. An analogous but more basic scenario in high school level chemistry would be to “randomly” pop balloons of hydrogen and oxygen and calculate the odds of them “randomly” assembling the same molecule (H2O). Such an assumption is patently absurd, as the probability density is clearly concentrated in a specific outcome.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;The Assumption of Strictly Sequential, Unweighted Trials:&lt;/span&gt; The assumption that the process of creating the proteins is a one-dimensional sequence of unweighted trials. In a realistic biological scenario, concurrency would have to play a significant role, as would contingency and building on past successes.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Expanding on the invocation of these fallacies in more refined instances of the argument from augmented ignorance helps to illuminate its problematic nature. In one form or another, almost all creationist probability arguments replicate them.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Uniformity is a Force That Gives Us Meaning&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Probability theory uses methods analogous to measuring the dispersal and concentration of physical objects. This is enabled by the important concept of a “random variable”, which is a function X that maps each outcome in a random experiment S to the real numbers. Two broad classes of random variables are discrete random variables, where X is conceived of as a stepwise function, and continuous random variables, where X is conceived of as a continuous function able to assume any real numbered value. In the continuous case (chosen here because of its intuitive value) a uniform probability distribution in an arbitrary interval [a, b] assumes a value 1/x for all a \&lt;= x \&lt;= b (and a value of 0 for any argument outside the interval). A more substantial statement to this effect would be that a probability distribution function of 1/b-a represents a uniform distribution if it yields a derivative of unity across the entire interval. The latter bit is known as the probability density function. Intuitively, it should be obvious that a continuous function assuming a constant value of 1 represents no mass concentrations of probability in favor of any outcome, as illustrated by the second graph below.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/28631451@N00/1766821607/" title="Photo Sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2271/1766821607_b17335b5c2_m.jpg" alt="800px-Uniform_distribution_CDF" align="middle" height="180" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/28631451@N00/1767667050/" title="Photo Sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2102/1767667050_ef260c2092_m.jpg" alt="800px-Uniform_distribution_PDF" align="middle" height="180" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;(Images Courtesy of &lt;a href="http://commons.wikimedia.org/wiki/Main_Page"&gt;Wikimedia Commons&lt;/a&gt;.)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Uniformity is a useful assumption in many scenarios encountered in probability theory, but as a concept it often fails to accurately map the real world. Usually it is tantamount to assuming pure randomness, while it should be obvious that many measurable processes can be constrained to a large degree. One can always describe an arbitrary non-uniform distribution function, and several recur often enough to be given names of their own (e.g., binomial distributions, Poisson distributions, etc.). In an example considered above, the outcomes of the experiment wherein one pops balloons of hydrogen and oxygen are certainly not uniformly distributed. One could in the abstract conceive of individual atoms as discrete objects whose combinatorial outcomes are uniformly distributed across all possible combinations of &lt;i&gt;n&lt;/i&gt; atoms. This would be absurd, for obvious reasons. A mathematical model which has no predictive value in its specialized scenario fails, and ignoring known principles of physics and chemistry is guaranteed to engender such a failure.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;However, whereas such a thing would be meaningless to scientists interested in accurately describing reality, the crank often uses it as a tactic in declaring that the scenarios postulated by mainstream science are impossible. This is usually a perfect replication of the argument from augmented ignorance, because it uses unfounded assumptions to amplify doubts and give a semi-convincing aura of legitimacy to their own notions. Consider this &lt;a href="http://www.designinference.com/documents/2005.03.Searching_Large_Spaces.pdf"&gt;bit of pablum&lt;/a&gt; from one William Dembski:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;Most searches that come up in scientific investigation occur over spaces that are far too large to be searched exhaustively. Take the search for a very modest protein, one that is, say, 100 amino acids in length (most proteins are at least 250 to 300 amino acids in length). The space of all possible protein sequences that are 100 amino acids in length has size 20&lt;sup&gt;100&lt;/sup&gt;, or approximately 1.27×10&lt;sup&gt;130&lt;/sup&gt;. Exhaustively searching a space this size to find a target this small is utterly beyond not only present computational capacities but also the computational capacities of the universe as we know it. Seth Lloyd (2002), for instance, has argued that 10&lt;sup&gt;120&lt;/sup&gt; is the maximal number of bit operations that the known, observable universe could have performed throughout its entire multi-billion year history.&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Dembski implicitly invokes uniform distribution in the above paragraph, but if you follow the link you will see that he explicitly invokes the concept for much of the paper, in addition to rambling on about searches and optimization problems (which we'll get to soon). But even setting aside the assumptions of computational searches, one doesn't have to assume that the space of proteins 100 amino acids in length is a uniformly distributed space of combinations. Biochemistry, like all chemistry, is not random but constrained by the physics underlying its operation. In addition, there is no reason to assume an exhaustive traversal of such a space is necessary at all. In evolution, what you want is a functional protein, which hardly requires an exhaustive evaluation of all possible forms that said protein can take.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The latter flaw alludes to our discussion of flaws in the equivalence drawn by Dembski between real world evolutionary biology and the various algorithms inspired by that process in solving optimization problems. His reasoning is fundamentally flawed on several levels.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Searching For an Accurate Analogy&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Since the 2002 publication of No Free Lunch, Dembski has been harping on a particular invocation of optimization theoretic concepts. His claim is essentially that the results known as the No Free Lunch (NFL) theorems, originally derived by David Wolpert and William Macready, show that evolutionary processes do not perform better than randomness. The actual result of the NFL theorems is that given the task of optimizing (i.e., locating minima or maxima in) an arbitrary function f(x), the space of potential domains where any particular technique outperforms another is less than or equal to the potential domains where it does not. Thus, averaged over all possible domains, no optimization technique will ever be guaranteed to perform better than a random walk.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;While the technical statement above may seem haughty, it can actually be understood as relatively mundane statement of mathematical reality. As Olle Haggastrom has pointed out in &lt;a href="http://www.math.chalmers.se/%7Eolleh/Dembski.pdf"&gt;his own review of Dembski&lt;/a&gt;, an intuitive way of understanding the NFL theorems is through the following process: shuffle a deck of cards and spread them face down on a table. The NFL theorems are essentially another way of saying that, when completely ignorant of the structure or layout of the cards on the table, no sequential, deterministic process is guaranteed to find the ace of spades in fewer steps than randomly checking the cards manually.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Even assuming that evolution can be reasonably modeled as a search as considered by the NFL theorems, the analogy ignores one of the principal reasons that, despite the NFL results being well established, research in optimization theory is still incredibly lucrative. In most practical optimization problems, there is some degree of known structure than can be exploited to produce a useful optimization method. In the case of evolution, almost all scenarios involve existing templates and highly constrained criteria for selection (at least, more highly than randomness). For instance, in an environment where food is scarce, organisms that rely on the ubiquity of energy sources are almost automatically winnowed out. The environment is simply unfavorable to populations containing such organisms, weighting particular outcomes in favor of smaller, more resilient organisms.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;It is also worth noting that the analogy between evolutionary algorithms and real world evolution is in a sense itself faulty. While evolutionary algorithms are usually specialized for optimization scenarios where a global optimum must be approximated, the results of real world evolution are far more analogous to what would be expected through traditional local search and hill-climbing methods. Biological and ecological scenarios only require a functional solutions, which in optimization theoretic terms can at best be described locally optimal. There is no necessity for a global optimum in biological evolution. While this doesn't in itself negate the applicability of NFL (this will become obvious in the next section), it does show that the two scenarios are not always as conceptually contiguous as it would seem.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;However, the first flaw is far more instructive when stated in a more mathematical fashion. When uprooted it becomes obvious just how absurd Dembski's claims regarding NFL and real world evolution are.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Uniformity Revisited: Pure Noise&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Olle Haggastrom provides us with this keen insight in &lt;a href="http://www.math.chalmers.se/%7Eolleh/reply_to_Dembski.pdf"&gt;a later reply to Dembski&lt;/a&gt; (with the latter being joined at the time by Robert Marks): the NFL is only applicable when the “Pure Noise” condition is met. “Pure Noise” stipulates that for each function f: V --\&gt; S, each element v of V is chosen randomly according to uniform distribution on V, and each f(v) is chosen randomly according to uniform distribution on S. In search specific lingo, this is another way of saying that all permutations of an evaluation function are equally likely. The core assumption in both statements is that of pure randomness, under which it would be correct to say that no algorithm outperforms another.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The retort to Dembski is thus obvious, and one that often has been made to less sophisticated creationists: evolution is not randomness, and thus NFL is not applicable (at least no directly). But just to take the argument further, when taking Dembski's logic to its proper conclusion we would have to toss away more than simply evolution. The “Pure Noise” model is applicable to all algorithms designed to operate over search spaces, and evolution isn't the only natural process to inspire an algorithm of this sort. Two more that come to mind are simulated annealing, which simulates a thermodynamic system (more specifically, cooling and crystallization) and ACO, which simulates the behavior of ant-colonies.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In the most general form, simulated annealing used an initially high parameter &lt;i&gt;T&lt;/i&gt; which gradually decreases upon successive evaluations of better solutions to an optimization problem. &lt;i&gt;T&lt;/i&gt; here is usually used to represent temperature, and the goal of simulated annealing is to reach an abstract analogue of the “ground state” in a thermodynamic system (i.e., the global optimum). Its counterpart in local search problems is often called “rapid quenching”, an analogy to the fact that rapid cooling of crystals usually preserves irregularities in the structure (i.e., you only get a local optimum). Ant-Colony Optimization (ACO) uses simulated populations of ants which leave simulated pheromone trails to narrow down the space of feasible solutions (analogous to how real ant-colonies narrow down supply routes). If “Pure Noise” were satisfied in either case, you lose all structure. Temperature never decreases and pheromone trails never accumulate. Everything would “melt” in your simulated annealing algorithm, and your abstract ants would all lose their way and die in the absence of mutual support from the nest. Or, if we're considering all algorithms, it would seem that the universe has no structure whatsoever.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Behold, the power of unfounded assumptions.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-3023037979919582407?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/3023037979919582407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=3023037979919582407' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/3023037979919582407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/3023037979919582407'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/10/cranks-cluedo-murder-of-science-with.html' title='Cranks Cluedo: The Murder of Science with Pseudomathematically Enhanced Ignorance.'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2271/1766821607_b17335b5c2_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-3929200613385104736</id><published>2007-10-07T02:35:00.001-04:00</published><updated>2007-10-07T02:58:38.178-04:00</updated><title type='text'>Shermer Howler</title><content type='html'>(Cross-Posted from &lt;a href="http://canofpowerup.blogspot.com/2007/10/shermer-howler.html"&gt;PowerUp&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;Michael Shermer's &lt;a href="http://www.sciam.com/article.cfm?articleID=FAD36DC2-E7F2-99DF-31C4971823C95F5F&amp;chanID=sa006&amp;colID=13"&gt;latest column in Scientific American&lt;/a&gt; deals with artificial rankings of importance among the sciences from "hard" to "soft", and science writing from "technical" to "popular". I have to say I agree with the overall thesis that these rankings are rather artificial and not totally necessary. But that said, I don't agree with the way Shermer challenged the notion. When given the choice of how to do so, I can imagine two broad classes of options:&lt;br /&gt;&lt;br /&gt;1. Make the modest, non-grandiose and largely accurate suggestion that the ranking system is flawed because all scientific knowledge is important and all disciplines deal with problems of varying complexity and difficulty; Or,&lt;br /&gt;&lt;br /&gt;2. Propose a &lt;i&gt;new&lt;/i&gt; ranking system that makes the extravagant, grandiose and gobsmackingly stupid claim to "precisely reverse" the order, making the social sciences the hard sciences and the physical sciences total weaksauce. (Giving lip-service to option #1 is also optional.)&lt;br /&gt;&lt;br /&gt;Now to unveil Shermer's decision:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;I have always thought that if there must be a rank order (which there mustn’t), the current one is precisely reversed. The physical sciences are hard, in the sense that calculating differential equations is difficult, for example. The variables within the causal net of the subject matter, however, are comparatively simple to constrain and test when contrasted with, say, computing the actions of organisms in an ecosystem or predicting the consequences of global climate change. Even the difficulty of constructing comprehensive models in the biological sciences pales in comparison to that of modeling the workings of human brains and societies. By these measures, the social sciences are the hard disciplines, because the subject matter is orders of magnitude more complex and multifaceted.&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;I'm sure that &lt;a href="http://sunclipse.org"&gt;Blake&lt;/a&gt; and the rest of his physics friends will be glad to hear how “simple” constraining and testing a theory of quantum gravity is. But in the field of my pursuits, computer science, one would think it would be even easier. After all, physicists have to deal much more directly with the constraints of physical systems. We deal with abstract problems, abstract units of reduction and abstract models within which said problems are subordinated to feasible computations. Yet we still lack a rigorous proof that P != NP, that there exist one-way functions, or even that NP-complete problems would be approximately as hard for quantum computers as they are for classical computers. We don't even know &lt;i&gt;how&lt;/i&gt; we would go about rigorously proving any of these assertions. Even the central principle of computer science, the &lt;a href="http://en.wikipedia.org/wiki/Church-Turing_thesis"&gt;Church-Turing thesis&lt;/a&gt;, lacks a rigorous axiomatization from which we could prove it, leaving it at least somewhat open to revision. A stronger version of the CT thesis, which posits that any Turing equivalent computing device generates the same problem classes as any other, is strongly called into question by the existence of polynomial-time quantum algorithms for factoring integers and solving various hidden subgroup problems (e.g., discrete logarithms).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;“Simple”, indeed.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;And not to nitpick, but Shermer's use of calculating differential equations as an example of a hard problem is in my mind exceedingly poor. You encounter differential equations by second semester calculus at the latest, so I would call them an intermediate topic. Or if I could have some wiggle-room, I'd call them a topic of varying difficulty. We still haven't proven the universality of &lt;a href="http://www.google.com/url?sa=t&amp;ct=res&amp;cd=6&amp;url=http%3A%2F%2Fmathworld.wolfram.com%2FNavier-StokesEquations.html&amp;ei=zHMIR4yaOYSwebKP1KcF&amp;usg=AFQjCNGqM9-hLArBcJfla2wzp8wOTS-UmQ&amp;sig2=GNhyD1cak8GTJmcrziZo2g"&gt;Navier-Stokes&lt;/a&gt; in three dimensions, nor global regularity (e.g., no jumps of discontinuity) in the case that solutions in such dimensions always exist.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-3929200613385104736?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/3929200613385104736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=3929200613385104736' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/3929200613385104736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/3929200613385104736'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/10/shermer-howler.html' title='Shermer Howler'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-2550713877185881166</id><published>2007-10-05T00:43:00.000-04:00</published><updated>2007-10-05T00:45:57.358-04:00</updated><title type='text'>Dembski's Gremlin Theory of Induction</title><content type='html'>(Foxy's &lt;a href="http://greedygreedyalgorithms.blogspot.com/2007/10/dembski-money-quote.html"&gt;latest&lt;/a&gt; here reminded me that this should have been cross-posted from &lt;a href="http://canofpowerup.blogspot.com/2007/09/dembskis-gremlin-theory-of-induction.html"&gt;PowerUp&lt;/a&gt;, but I forgot. Oh well, better late than never.)&lt;br /&gt;&lt;br /&gt;Abbie has &lt;a href="http://endogenousretrovirus.blogspot.com/2007/09/creationism-is-like-gremlins-bowling-in.html"&gt;her latest post&lt;/a&gt; up describing her experience of Dembski. This is pretty much the first post in the series that has any relevance to my particular area of study (I'm not a biophreak, unlike most of those who post at ERV). You'll likely not be surprised that Dembski managed to bend over and fart out some pseudomathematical silliness before the day was done. But this pseudomath is &lt;i&gt;extra&lt;/i&gt; special, as it doesn't even approach the level of coherence. Quoth Dembski (or ERV quoting Dembski):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Dembski-- Whe whe whe we can do a Bayesian analysis! Ahhh, your and my probabilities of a designer are very different. So it would be better to have a methodology that didnt require probabilities for a designer.&lt;br /&gt;&lt;br /&gt;*audience laughs again*&lt;br /&gt;&lt;br /&gt;Dembski-- Weh we can do a Bayesian sort of thing, given to me it is infinitesimally small I mean, you know, I mean... Here is a standard example.. weeh ehhh beyhh... we need to do this for the sake of the audience. Eeeh you hear some sound up in the attic, you know? Sounds like gremlins, ehh, bowling. Bowling. Gremlins bowling. Thats ahh, would be ahhh, you know, that would explain it. Eh eh, highly unlikely that you know. If there are gremlins up there, bowling, then that would explain the sound. But whats the prior likelihood of there being gremlins? Its highly improbable. So even though if there were gremlins it would explain that, the high improbability that there are gremlins means dont give that explanation a second thought. I think thats how the design hypothesis works for you. For others it doesnt work that way. Okay? So in a sense, if were going to decide this issue, its not going to be on the basis of assigning some sort of prior probability of design. You have to look at the actual improbabilities of this evolutionary system. The thing is, nobody that I see has been trying to do that sort of move. I mean, Richard Dawkins does not try to look at the prior improbability of god, hes trying to say "Look, its highly probable you get these systems because when you do the analysis, Darwinism is a strategy that can climb Mount Improbable", thats his whole point!&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Okay, so he's doing a Bayesian analysis without assigning a prior probability to what is (presumably) the "design hypothesis". Let us recapitulate elementary statistics and probability. Here is Bayes rule.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Pr(&lt;i&gt;H&lt;/i&gt;&lt;sub&gt;i&lt;/sub&gt;|&lt;i&gt;D&lt;/i&gt;) = Pr(&lt;i&gt;D&lt;/i&gt;|&lt;i&gt;H&lt;/i&gt;&lt;sub&gt;i&lt;/sub&gt;)P(&lt;i&gt;H&lt;/i&gt;&lt;sub&gt;i&lt;/sub&gt;)/Pr(&lt;i&gt;D&lt;/i&gt;)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;That P(&lt;i&gt;H&lt;/i&gt;&lt;sub&gt;i&lt;/sub&gt;) thing in that little relation is known as the "prior" probability. It is typically understood as the probability of &lt;i&gt;H&lt;/i&gt;&lt;sub&gt;i&lt;/sub&gt; being true before the observation of any data. The "posterior" probability, however, is the conditional probability Pr(&lt;i&gt;H&lt;/i&gt;&lt;sub&gt;i&lt;/sub&gt;|&lt;i&gt;D&lt;/i&gt;) of &lt;i&gt;H&lt;/i&gt;&lt;sub&gt;i&lt;/sub&gt; being true after the observation of data set &lt;i&gt;D&lt;/i&gt;. So you may find yourself wondering how the hell Dembski is doing a Bayesian analysis when the hypothesis he obviously favors (design) lacks the assignment of something fundamental to Bayesian analysis. ERV hit it in her post:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;What I liked about this exchange is that it once again demonstrates that IDC is a negative argument. THEY dont have to provide probabilities of a designer. They just have to declare an evolutionary system impossible and declare victory.&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;It's what I and several other people have been saying all along about Dembski and his charlatanry. What he intends to do is eliminate other existing and mutually exclusive hypotheses so that he can assert that "design" is an alternative. If you take a course in logic, rhetoric and exposition, you'll learn that this little shuffle is known as an "argument from ignorance". In theological circles, the same tactic is known as a "god in the gaps" argument. Either way, it's an elementary fallacy. Unfortunately for the cause of reason Dembski has been able to make a career out of dressing this fallacy up to look like unimpeachable mathematics to the faithful.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I also find it funny that he tacitly admitted that the "designer" was comparable to gremlins. Funny little man, that Dembski.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-2550713877185881166?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/2550713877185881166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=2550713877185881166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2550713877185881166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2550713877185881166'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/10/dembskis-gremlin-theory-of-induction.html' title='Dembski&apos;s Gremlin Theory of Induction'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-2298729074463425969</id><published>2007-10-02T18:21:00.000-04:00</published><updated>2007-10-02T18:25:28.728-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Science'/><title type='text'>Dembski Money Quote</title><content type='html'>Bill Dembski is of course one of the guiding lights of intelligent design. Such as it is. And in a recent Q&amp;A that &lt;a href=http://endogenousretrovirus.blogspot.com/2007/09/creationism-is-like-gremlins-bowling-in.html&gt;ERV&lt;/a&gt; is reporting on, he let loose with this one comment that really, absolutely, I think, must be highlighted and shared with everyone. On discussing the probability of there being a designer versus the probability that we don't know everything, and how to weigh these probabilities, Dembski offered&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;So it would be better to have a methodology that didn't require probabilities for a designer.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;Yes.&lt;br /&gt;&lt;br /&gt;Fortunately Bill, we've got one all ready for you.&lt;br /&gt;&lt;br /&gt;If these people refuse to listen to what they themselves are saying, I don't see why anyone listens to them at all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-2298729074463425969?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/2298729074463425969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=2298729074463425969' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2298729074463425969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2298729074463425969'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/10/dembski-money-quote.html' title='Dembski Money Quote'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-1648894867143951855</id><published>2007-09-23T14:33:00.000-04:00</published><updated>2007-09-23T15:51:49.550-04:00</updated><title type='text'>A New Candidate for a One-Way Function</title><content type='html'>(Cross-Posted at &lt;a href="http://canofpowerup.blogspot.com/2007/09/new-candidate-for-one-way-function.html"&gt;PowerUp&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;One-way functions are one of the most interesting and perplexing phenomena in theoretical computer science. We haven't yet proven they exist, but we're pretty sure that they do on an empirical basis (in much the same way we believe, tentatively and on empirical grounds, that P != NP). Simply put, a one-way function is a function with an output for which a reversal is "hard", i.e., cannot be accomplished in polynomial time.  If the existence of one-way functions were proven, we could analytically deduce that P != NP (because it would entail a problem that has no polynomial time solution, i.e, function reversal) as well as the existence of many "primitive" objects in cryptography. Current candidates for one-way functions include discrete logarithms, integer factorization and modular exponentiation.&lt;br /&gt;&lt;br /&gt;Well, I believe I have discovered a new candidate for a one-way function. I call it "wishful thinking exponentiation", and it computes the increase in intellectual dishonesty that occurs when one attempts to synthesize religious pablum with science and mathematics. I consider it likely that this function is one way, since locating the preimage (sanity) is a problem for which I am unable to deduce a feasible solution.&lt;br /&gt;&lt;br /&gt;For those curious about what I am talking about, look &lt;a href="http://www.thefaithequation.com/"&gt;here&lt;/a&gt;. &lt;a href="http://recursed.blogspot.com/2007/09/faithmb-ignorance-intellectual.html"&gt;Jeffrey Shallit&lt;/a&gt; has done his part in dismantling a bit of religious and pseudomathematical silliness called "The Faith Equation", a book by a fellow named Marvin Bittinger. To see a sample of the idiocy, look at &lt;a href="http://www.thefaithequation.com/moreMathDepth.pdf"&gt;this pdf&lt;/a&gt;, where he spills a lot of pixels explaining a conditional probability model for the "fulfillment" of Biblical "prophecies". This is pretty much a classic case of the "argument from meaningless numbers". If you build enough unfounded assumptions into a probability model, you can get any desired result. This is however at the expense of your model having any capability to produce a quantity with any plausible analogue in reality. In this case, Bittinger appears to make the usual Christian apologist assumption that there are lots of fulfilled Biblical prophesies (and that these apparent fulfillments are not the product of retrofitting) and attach numbers to it, giving it that all important veneer of mathematical erdution.&lt;br /&gt;&lt;br /&gt;Probability is a popular tool among pseudomathematical charlatans precisely because it is &lt;i&gt;that&lt;/i&gt; easy to hide your assumptions and make it look like you are making meaningful statements when you have an audience without a sufficient background in the subject matter. We've long been familiar with Dembski's charades that purport to show "Intelligent Design" through codswallop such as "Specified Complexity", as well as classical creobot attempts with less refined pseudomathematical jargon. We can now add Bittinger to our list.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-1648894867143951855?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/1648894867143951855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=1648894867143951855' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1648894867143951855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1648894867143951855'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/09/new-candidate-for-one-way-function.html' title='A New Candidate for a One-Way Function'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-5239560558691439964</id><published>2007-09-20T15:16:00.000-04:00</published><updated>2007-09-23T14:41:29.323-04:00</updated><title type='text'>Why Knowing Sorting Algorithms is Still Useful: Broad-Phase Collision Detection</title><content type='html'>(Cross Posted over at &lt;a href="http://canofpowerup.blogspot.com/2007/09/why-knowing-sorting-algorithms-is-still.html"&gt;PowerUp&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;One of the most interesting things about programming is the ephemeral nature of the techniques used. Just look at languages, for instance; C falls out of favor to C++ and C#, functional languages take followers from object-oriented languages, procedural languages make a comeback because of their ability to reduce computational overhead, and on and on. These sorts of sifting sands are also quite visible in the world of algorithms. Ask just about any code monkey about sorting algorithms and they are likely to respond with something to the effect of "OMG U N00B, NO 1 WRITEZ SORTING ALGORITHMS ANY MOAR LOL!!!" Which is largely true, just about every language in widespread use (e.g., Java, C#, the C++ STL, etc.) incorporates native support for the most common sorting algorithms, saving you the trouble of actually writing them yourself.&lt;br /&gt;&lt;br /&gt;Studying sorting algorithms in detail is often justified with the Knuthian philosophy that the best way to gain an appreciation of computations is to see them being implemented as close to the machine as possible. While I am myself a proponent of this philosophy, I have my own practical justification: knowing sorting algorithms is best for problems that require sorting "on the fly". An instance of such a problem lies in real-time physics simulation, i.e., broad-phase collision detection that uses "sort and sweep" methods.&lt;br /&gt;&lt;br /&gt;Broad-phase collision detection (henceforth, BPCD) is the first part of most methods for collision detection (the other being, predictably, narrow-phase collision detection). The idea of BPCD is that you want to be able to exclude or "cull" objects from iterations of collision detection procedures to reduce overhead. So, essentially, you have a computational meataxe that hacks off those objects that have no realistic chance of colliding. Then narrow-phase collision detection does the dirty work with the remaining objects to find out which ones actually do collide.&lt;br /&gt;&lt;br /&gt;Sort and sweep (henceforth, S&amp;amp;S) is one method for doing this. In the simplest form I can think of, S&amp;amp;S involves assigning "bounding volumes" to all objects in a scene and projecting them onto the x, y or z axis. One then assigns a one-dimensional interval [b&lt;sub&gt;i&lt;/sub&gt;, e&lt;sub&gt;i&lt;/sub&gt;] to each object that consists of the beginning and end of the bounding volume on the chosen axis. The values of each b&lt;sub&gt;i&lt;/sub&gt; and e&lt;sub&gt;i&lt;/sub&gt; are then inserted into a list of 2&lt;i&gt;n&lt;/i&gt; elements and sorted into ascending order (based upon their value along the chosen axis). The entire list is then traversed, with each b&lt;sub&gt;i&lt;/sub&gt; leading to the object being included and each &lt;i&gt;subsequent&lt;/i&gt; e&lt;sub&gt;i&lt;/sub&gt; leading to the object being excluded. The result of the algorithm is that only those objects with overlapping bounding volumes are included in the list of "active objects" for narrow-phase collision detection.&lt;br /&gt;&lt;br /&gt;I can think of two very big reasons why an intricate knowledge of sorting algorithms would be very helpful in this area:&lt;br /&gt;&lt;br /&gt;1. Collision detection on GPU's is attractive because the superior flop performance and data-parallelism of GPU's as opposed to CPU's (this is generally true of all forms of physics simulation, really). Using an S&amp;amp;S algorithm for BPCD on a GPU can take advantage of sorting networks due to the fact that they are, much like raytracing and scan-conversion, embarrassingly parallelizable processes. This could have many applications to collision detection in larger scenes,  perhaps with the added benefit of some means of interpolation for approximately similar comparisons in the sorting network.&lt;br /&gt;&lt;br /&gt;2. External sorting algorithms, originally invented for scenarios in which input and output targets for sorted data exceeded the internal memory of the system doing the sorting, could possibly have some applications for overcoming bandwidth limitation in sharing data between the CPU and the GPU. CPU's are still inherently superior devices for handling AI, game logic and other procedures that involve a large amount of branching logic. The problem is that the BUS capacity is not increasing at the same rate as either GPU's or CPU's are, leading to scenarios in which the conduit for data is dwarfed by the input and output targets. Whereas you'd have entire lists of collision data to be fed to the AI engine, for scenes exceeding BUS capacity it may be an attractive option to generate "runs" of data and merge them in caches (e.g., in either system memory or video memory for the CPU and GPU, respectively).&lt;br /&gt;&lt;br /&gt;Just a few ideas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-5239560558691439964?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/5239560558691439964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=5239560558691439964' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/5239560558691439964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/5239560558691439964'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/09/why-knowing-sorting-algorithms-is-still.html' title='Why Knowing Sorting Algorithms is Still Useful: Broad-Phase Collision Detection'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-7589919778977911032</id><published>2007-09-20T00:32:00.000-04:00</published><updated>2007-09-20T00:33:22.541-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Practical'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Centroidal Nonsense: Purple Haze</title><content type='html'>So ...&lt;br /&gt;&lt;br /&gt;... I've been busy ...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Anyway.&lt;br /&gt;&lt;br /&gt;Take a set of points. Jumping in for a little random Mathematica-ness, we get&lt;br /&gt;&lt;center&gt;&lt;br /&gt;{19, 24, 32, 42, 55, 63, 69, 75, 85, 99}&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;What we're interested in is the one number that is closest to all those numbers.&lt;br /&gt;&lt;br /&gt;Intuitively, you may suggest the average of those numbers. The average, being right in the middle, should be as close as possible to all the numbers right?&lt;br /&gt;&lt;br /&gt;The average is 56.3. If we take the sum of the absolute value of the differences between 56.3 and the numbers, we get that the 'total distance' is 219. Check that. So, we want to know if we can do better than that.&lt;br /&gt;&lt;br /&gt;To begin with, let's look at a plot of, given a value x, the 'total distance' of the set to x. The points were chosen from 0 to 100, so we're really only interested over that interval. The entire plot appears below.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_08B0rrzqpZ0/RvHx_kb6hVI/AAAAAAAAAMQ/UP3fADWeoZA/s1600-h/OneDPlot.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_08B0rrzqpZ0/RvHx_kb6hVI/AAAAAAAAAMQ/UP3fADWeoZA/s400/OneDPlot.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5112133126457034066" /&gt;&lt;/a&gt;&lt;br /&gt;Notice that the plot has a clear minimum, which occurs somewhere between 50 and 70. So we replot, looking more at that section. Notice though the apparent linearity of the graph right there, seeming to suggest a range of solutions.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_08B0rrzqpZ0/RvHyoUb6hWI/AAAAAAAAAMY/lSJutnBWIXY/s1600-h/OneDGraph2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_08B0rrzqpZ0/RvHyoUb6hWI/AAAAAAAAAMY/lSJutnBWIXY/s400/OneDGraph2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5112133826536703330" /&gt;&lt;/a&gt;&lt;br /&gt;Now we get a better idea of what's going on. The line across the bottom seems to represent a clear minimum. Notice however that it seems to occur in a line from 55 to 63. The average, 56.3 falls right in this range, suggesting that 219 is in fact the minimum value. But the line, going from 55 to 63, suggests that any value on that range would've produced the same distance of 219. Indeed, if we look at the 'total distance' of 60, it also produces 219.&lt;br /&gt;&lt;br /&gt;Now, there are two things of note here. Number one, the predicted distance minimizing point, the average, did produce the minimum distance. Is that always the case? Secondly, the minimizing values occurred between 55 and 63. Note that 55 and 63 are the two middle values of our set of numbers. Suppose we change the set of numbers to&lt;br /&gt;&lt;center&gt;&lt;br /&gt;{1, 2, 3, 42, 55, 63, 69, 75, 85, 99}&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;That shifts the average to 49.4, which gives a 'total distance' of 299.2. Notice though, that the 'middle two' numbers, 55 and 63 haven't changed. If we look at a plot of the new distance function for this new set of numbers,&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_08B0rrzqpZ0/RvH0q0b6hXI/AAAAAAAAAMg/6CKtPspLilA/s1600-h/OneDPlot3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_08B0rrzqpZ0/RvH0q0b6hXI/AAAAAAAAAMg/6CKtPspLilA/s400/OneDPlot3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5112136068509631858" /&gt;&lt;/a&gt;&lt;br /&gt;Notice the minimum distance still occurs from 55 to 63. Selecting 60 as a trial number again, we get 288 as the minimum distance, which certainly beats 299.2.&lt;br /&gt;&lt;br /&gt;So it seems that, at least given an even number of numbers, the distance minimizing points occur on a range between the middle two. If we think about this, discarding our original intuition about the average, it should make sense, since between those two points, moving left or right will increase the distance to all the points on one side the same amount it decreases the distance to the points on the other side.&lt;br /&gt;&lt;br /&gt;For the case of an odd number of numbers, the distance minimizing point should be the middle number itself. Were that number not included, we know that the distance minimizing point of the resulting even numbered set would be between the two 'middle points'. The middle number of the odd set occurs between those two, so it is a minimizing value of the smaller set. If we choose it, the distance to itself is 0, so it doesn't contribute anything more. Taking our set of numbers from above and adding 60 as a middle number, we plot the new distance function.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_08B0rrzqpZ0/RvH3XUb6hYI/AAAAAAAAAMo/12RuA6xHRRs/s1600-h/OddDPlot.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_08B0rrzqpZ0/RvH3XUb6hYI/AAAAAAAAAMo/12RuA6xHRRs/s400/OddDPlot.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5112139032037066114" /&gt;&lt;/a&gt;&lt;br /&gt;So the middle point is now exactly at 60, which is the middle value of the set.&lt;br /&gt;&lt;br /&gt;So now we have an approach for the one dimensional case. Tomorrow, if I have time, I'm going to try to expand this into the two dimensional case, which should allow a solution to be constructed for points in any dimension. It's all experimental though, so we'll see what happens.&lt;br /&gt;&lt;br /&gt;Late now though. More tomorrow, if I'm lucky.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-7589919778977911032?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/7589919778977911032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=7589919778977911032' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/7589919778977911032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/7589919778977911032'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/09/centroidal-nonsense-purple-haze.html' title='Centroidal Nonsense: Purple Haze'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_08B0rrzqpZ0/RvHx_kb6hVI/AAAAAAAAAMQ/UP3fADWeoZA/s72-c/OneDPlot.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-8437809730481039514</id><published>2007-08-26T14:34:00.001-04:00</published><updated>2007-08-26T14:35:16.012-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Proof'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Fibonacci, You Complete Me</title><content type='html'>Suppose you have a sequence of values, a&lt;sub&gt;0&lt;/sub&gt;, a&lt;sub&gt;1&lt;/sub&gt;, a&lt;sub&gt;2&lt;/sub&gt;, a&lt;sub&gt;3&lt;/sub&gt;, ... so on. That sequence is thought of as 'complete', if any positive integer can be expressed as the sum of unique members of that sequence.&lt;br /&gt;&lt;br /&gt;For example, let's consider the set of Fibonacci numbers.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;1, 2, 3, 5, 8, 13, 21, ....&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And so on. Taking 42, for example, we can write that as a sum of Fibonacci numbers.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;42 = 21 + 13 + 8&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Note that each Fibonacci number used in the sum is used only once. The question then is whether or not the Fibonacci set is complete. Can all positive integers be expressed as a Fibonacci sum?&lt;br /&gt;&lt;br /&gt;So, let's consider a number N. We'll assume it is expressible as the sum of some number of Fibonacci numbers. Now, look at the used Fibonacci numbers, from greatest to least. Any time a pair of consecutive Fibonacci numbers occurs, we will substitute in their sum, which is also a Fibonacci number. And we go down the line of the sum for N, replacing all Fibonacci pairs (from greatest to least), with the next Fibonacci number. We do this until there are no more pairs left in the sum. Now, in doing so, we have transformed one sum of Fibonacci numbers into a sum of different Fibonacci numbers, but the value the numbers sum to remains the same, N. Also of note is the fact that doing it this way, pairs from greatest to least, removes the possibility of using the same Fibonacci number twice. Imagine if the sum included 21, 13, and 8, all consecutive Fibonacci numbers. Replacing pairs from greatest to least, 21 + 13 + 8 = 34 + 8. Replacing pairs from least to greatest would give you 21 + 21. From greatest to least removes the possibility of overlap.&lt;br /&gt;&lt;br /&gt;Now, we have N as the sum of some number of Fibonacci numbers, none of which are consecutive pairs. Now, there are two cases to consider. In the first case, the Fibonacci numbers that sum to N includes the number 1. In that case, we know that the numbers can't include 2. If they did, then {1,2} would be a pair, and we know that the Fibonacci numbers are pair-less. So if the sum for N contains 1, then it does not contain 2. In that case, we can express N+1 as the sum of Fibonacci numbers, by taking 1 away from the sum for N, and replacing it with 2.&lt;br /&gt;&lt;br /&gt;In the second case, the sum for N does not contain 1. In that case, we can construct a sum of Fibonacci number for N+1 by merely adding 1 to the sum.&lt;br /&gt;&lt;br /&gt;So, if there exists a Fibonacci sum that sums to N, we can construct a Fibonacci sum that sums to N+1. Since there exists a Fibonacci sum for 1 (namely 1 = 1), this implies there exist sums for all positive integers. Therefore the set of Fibonacci numbers is complete.&lt;br /&gt;&lt;br /&gt;Not the most glamorous or well written of proofs, but I think it works : )&lt;br /&gt;&lt;br /&gt;I'll leave it to the interested reader to prove the set of powers of 2 is complete.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-8437809730481039514?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/8437809730481039514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=8437809730481039514' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8437809730481039514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8437809730481039514'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/08/fibonacci-you-complete-me.html' title='Fibonacci, You Complete Me'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-656688877548709315</id><published>2007-08-21T13:13:00.000-04:00</published><updated>2007-08-21T13:38:39.881-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>What the Hand Dare Seize the Fire?</title><content type='html'>Sometimes, I'm afraid I'm not a good blogger, as much as I hate that word. Afraid is probably the wrong word, but at the very least, I often ignore comments. Don't take that the wrong way, I just often don't know what to say ^.^&lt;br /&gt;&lt;br /&gt;But, a couple of times now, I've been asked how I do LaTeX on blogger. Tyler showed me this one. If you're running Firefox, install the add-on Greasemonkey. Then install &lt;a href="http://wolverinex02.googlepages.com/emoticonsforblogger2"&gt;this guy's script&lt;/a&gt;. In Blogger, in the 'Compose' frame, you then get a new button that says 'LaTeX'. Clicking on that then auto converts any LaTeX expressions into properly formatted ... whatevers.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;$$ \sqrt{2 + \sqrt{2 + \sqrt{2 + ... \sqrt{2} } } } $$&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Becomes&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7B2%20+%20%5Csqrt%7B2%20+%20%5Csqrt%7B2%20+%20...%20%5Csqrt%7B2%7D%20%7D%20%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Of course, if this fellow's script ever goes down, I will lose a large portion of the work I've done here. Oh well. Nothing gold can stay.&lt;br /&gt;&lt;br /&gt;Other programs I use include, of course, Mathematica. Mathematica is an excellent program for anyone serious about mathematics. Seriously - it's awesome. The only problem is it's a little pricey. Registered students can get it for $150 (I think, it's been a while since I checked), but the non-student version costs $2500. This is going to make me impossibly sad in a few years. They're currently at Mathematica 6, which definitely has it's perks, especially in the graphics department. For example, you can rotate 3D plots with your mouse, while you can't in 5.2. Generally though, I think I prefer the feel of 5.2 Mathematica, though, is simply fantastic.&lt;br /&gt;&lt;br /&gt;Here's something nice I stole from the helpfile on Mathematica 6.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;ParametricPlot3D[ {Sin[u] Sin[v] + 0.05 Cos[20 v], &lt;br /&gt;  Cos[u] Sin[v] + 0.05 Cos[20 u], Cos[v]}, {u, -Pi, Pi}, {v, -Pi, Pi},&lt;br /&gt;  MaxRecursion -&gt; 4, PlotStyle -&gt; {Orange, Specularity[White, 10]}, &lt;br /&gt; Axes -&gt; None, Mesh -&gt; None]&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Producing&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_08B0rrzqpZ0/RssXgL82Q2I/AAAAAAAAAMA/TKXi5Agz4ms/s1600-h/MathematicaBall.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_08B0rrzqpZ0/RssXgL82Q2I/AAAAAAAAAMA/TKXi5Agz4ms/s400/MathematicaBall.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5101196844658475874" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Something else that has been of special use lately is the &lt;a href=http://www.dynamicgeometry.com/index.php&gt;Geometer's Sketchpad&lt;/a&gt;. It's basically a program that let's you do geometric constructions. And I do enjoy my geometric constructions. This is the program I used to illustrate van Aubel's theorem, and here's a quick sketch of a triangle's circumcenter. Like, 10 steps total.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_08B0rrzqpZ0/RssZkL82Q3I/AAAAAAAAAMI/G2DUrI5d0VY/s1600-h/Circumcenter.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_08B0rrzqpZ0/RssZkL82Q3I/AAAAAAAAAMI/G2DUrI5d0VY/s400/Circumcenter.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5101199112401208178" /&gt;&lt;/a&gt;&lt;br /&gt;One of the nice things about this program is that it's dynamic. You can, for example, grab one of the points and drag it around, and watch how the changing position effects the whole construction. In the case of van Aubel, you can watch how changing the quadrilateral has no effect on the perpendicular segments of interest. It really demonstrates the flexibility of the theorem, which was verified in the proof. This program is also a little pricey, at 130$ for the regular version. However, according to the website, students can get it for $40 dollars. I got it for free about 6 years ago (a kind geometry teacher in a summer school program). So I'm running version 3.0 while they're up to 4.07.&lt;br /&gt;&lt;br /&gt;Other than those, a lot of what I do I just program for myself. Graphics I do especially in Java, because Java just makes it so easy, as much as I hate the stupid language. For my Java work, I'm generally partying in &lt;a href=http://www.eclipse.org/&gt;Eclipse&lt;/a&gt;. Other languages I use include C++ and &lt;a href=http://www.ruby-lang.org/en/&gt;Ruby&lt;/a&gt;. Ruby is nice, I feel, because it's quick and fun and readable. C++ is for the heavy duty stuff, mainly the data-intensive jobs. Fortunately I don't do those often.&lt;br /&gt;&lt;br /&gt;Of course, actually looking at all this stuff, it can be quite an investment unless you're lucky or a pirate (Arr!). Looking for open source (read -free-) alternatives, I came across &lt;a href=http://web.usna.navy.mil/~wdj/opensource_math.html&gt;this list&lt;/a&gt; of computer algebra systems. Of them, the most Mathematica-esque seems to be &lt;br /&gt;&lt;a href=http://maxima.sourceforge.net/&gt;Maxima&lt;/a&gt;, though &lt;a href=http://wiki.axiom-developer.org/FrontPage/&gt;Axiom&lt;/a&gt; seems quite exciting as well. I'll have to investigate those.&lt;br /&gt;&lt;br /&gt;Anyway, back to work now. Leaving in a few days, so I have to pack up my main computer and ship it back. This will impede me a little, but I hope to have at least one interesting math post before I go. Probably a geometry post. And, with any luck, Dean won't be a problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-656688877548709315?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/656688877548709315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=656688877548709315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/656688877548709315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/656688877548709315'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/08/what-hand-dare-sieze-fire.html' title='What the Hand Dare Seize the Fire?'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_08B0rrzqpZ0/RssXgL82Q2I/AAAAAAAAAMA/TKXi5Agz4ms/s72-c/MathematicaBall.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-2830474738740064251</id><published>2007-08-19T04:15:00.000-04:00</published><updated>2007-08-19T04:21:14.169-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Soddy Sequence Properties</title><content type='html'>That is an exciting title.&lt;br /&gt;&lt;br /&gt;I'm not exactly sure where to begin with this post. So ... I'll start with numbers of the following form.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7B%20a%20+%20b%20%5Csqrt%7B2%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Such that a and b are integers. Note though, that I've used root 2 rather than any other root because root 2 is best. Not the nicest of expressions. However, for some values of a and b, you can transform that expression into the following form.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20A%20+%20B%20%5Csqrt%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Where A and B are functions of a and b. For example, you have the following.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7B3%20-%202%20%5Csqrt%7B2%7D%7D%20=%20-1%20+%20%5Csqrt%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;If we take that in the general case, and assume a, b, A, and B are integers, we can do the following.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7B%20a%20+%20b%20%5Csqrt%7B2%7D%20%7D%20=%20A%20+%20B%20%5Csqrt%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20a%20+%20b%20%5Csqrt%7B2%7D%20=%20%7B%28A%20+%20B%20%5Csqrt%7B2%7D%20%29%7D%5E2" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20a%20+%20b%20%5Csqrt%7B2%7D%20=%20A%5E2%20+%202%20B%5E2%20+%202%20A%20B%20%5Csqrt%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Collecting then gives you&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20a%20=%20A%5E2%20+%202%20B%5E2" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20b%20=%202%20A%20B" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Solving those two equations for A and B yields some nasty nested roots, which don't necessarily help anything. However, if anything, the equation does tell is that, assuming all integers as we did, a must be positive. Note that the integer assumption is valid, because in the case of fractions we could simply add a coefficient to each side of the equations sufficient for canceling out denominators. So, integers suffice.&lt;br /&gt;&lt;br /&gt;What these equations do allow us to do, though, is to get an idea of how many nested root expressions there are. For example, consider every combination of A and B, over the values 1, 2, and 3. Applying the formula above, we get&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%201%20+%201%20%5Csqrt%7B2%7D%20=%20%5Csqrt%7B%203%20+%202%20%5Csqrt%7B2%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%201%20+%202%20%5Csqrt%7B2%7D%20=%20%5Csqrt%7B%209%20+%204%20%5Csqrt%7B2%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%201%20+%203%20%5Csqrt%7B2%7D%20=%20%5Csqrt%7B%2019%20+%206%20%5Csqrt%7B2%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%202%20+%201%20%5Csqrt%7B2%7D%20=%20%5Csqrt%7B%206%20+%204%20%5Csqrt%7B2%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%202%20+%202%20%5Csqrt%7B2%7D%20=%20%5Csqrt%7B%2012%20+%208%20%5Csqrt%7B2%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%202%20+%203%20%5Csqrt%7B2%7D%20=%20%5Csqrt%7B%2022%20+%2012%20%5Csqrt%7B2%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%203%20+%201%20%5Csqrt%7B2%7D%20=%20%5Csqrt%7B%2011%20+%206%20%5Csqrt%7B2%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%203%20+%202%20%5Csqrt%7B2%7D%20=%20%5Csqrt%7B%2017%20+%2012%20%5Csqrt%7B2%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%203%20+%203%20%5Csqrt%7B2%7D%20=%20%5Csqrt%7B%2027%20+%2018%20%5Csqrt%7B2%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Producing a maximum value of 27 for a and 18 for b. This means that of 27*18, or 486 possible pairs of a and b, only 9 of which are reducible in form. It should be clear then that only a tiny fraction of all nested root expressions will be reducible in this way.&lt;br /&gt;&lt;br /&gt;So ... it's a rare thing. Interestingly so.&lt;br /&gt;&lt;br /&gt;Now, take the following recursive formula.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20R_0%20=%201" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20R_%7Bn+1%7D%20=%20%5Cfrac%7B%202%20R_n%20%7D%7B%20%283%20R_n%20+%202%29%20+%202%20%5Csqrt%7B2%20R_n%20%283%20+%20R_n%29%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Generating the first couple of values of that function and simplifying them with Mathematica, we get the following.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20R_0%20=%201" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20R_1%20=%20-%5Cfrac%7B10%7D%7B7%7D%20+%20%5Cfrac%7B8%7D%7B7%7D%20%5Csqrt%7B2%7D%20=%200.187673..." align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20R_2%20=%20%5Cfrac%7B7%7D%7B17%7D%20-%20%5Cfrac%7B4%7D%7B17%7D%20%5Csqrt%7B2%7D%20=%200.0790086..." align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20R_3%20=%20%5Cfrac%7B58%7D%7B553%7D%20-%20%5Cfrac%7B24%7D%7B553%7D%20%5Csqrt%7B2%7D%20=%200.0435061.." align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And so on. But, this is the cool part. If you continue on down the sequence, every single value I've calculated has the form &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20A%20+%20B%20%5Csqrt%7B2%7D" align="middle" border="0" /&gt;. Every one of them. Now, we'll assume that the previous term has that form, and calculate the next term in the sequence. Simplifying, we get&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20R_%7Bn%20+%201%7D%20=%20%5Cfrac%7B%202%28A%20+%20B%20%5Csqrt%7B2%7D%29%20%7D%7B%202%20+%203%20A%20+%203%20B%20%5Csqrt%7B2%7D%20+%202%20%5Csqrt%7B2%20A%20%283%20+%20A%29%20+%204%20B%5E2%20+%202%283%20+%202%20A%29B%20%5Csqrt%7B2%7D%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Now, it is a bit messy, but the important think is that big nested root in the denominator. To reduce the whole expression into something of the form we're looking for, that nested root will have to be simplified as well. However, there is nothing about that formula that lends itself to simplification. For some values of A and B, it can't be simplified that way. So, the question is, what is it about the sequence, as it is defined, that seems to guarantee that each term will not contain a nested root?&lt;br /&gt;&lt;br /&gt;I think it's an interesting problem, but I'm not sure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-2830474738740064251?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/2830474738740064251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=2830474738740064251' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2830474738740064251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2830474738740064251'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/08/soddy-sequence-properties.html' title='Soddy Sequence Properties'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-1913381699292661431</id><published>2007-08-17T06:31:00.000-04:00</published><updated>2007-08-17T06:32:35.261-04:00</updated><title type='text'>Taking a Hiatus From Blogging</title><content type='html'>I have to take a break from blogging. As is usual for someone in my position, the end of summer has dumped a shitload of work onto my plate at once. I'm going to be very busy in meat space in the coming weeks, and won't have much time for quality updates anyway. So I figure that instead of constantly dumping filler into these spaces (my personal blog and TaFSaMAL, whichever you're reading) I'll just give a notice of absence and leave Foxy to do what he wishes with his posting privileges in the meantime.&lt;br /&gt;&lt;br /&gt;Of course, I'm not going to make the same stupid mistake I made the &lt;i&gt;last&lt;/i&gt; time I got overwhelmed with work and delete my blog(s) altogether. I have the foresight now to know I can't say away from the blogging scene forever, and the best case scenario is that I'll be back in around a month and a half. I'll probably also have time for occasional comments as well.&lt;br /&gt;&lt;br /&gt;Until then, have yourselves a good summer/fall transition.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-1913381699292661431?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/1913381699292661431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=1913381699292661431' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1913381699292661431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1913381699292661431'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/08/taking-hiatus-from-blogging.html' title='Taking a Hiatus From Blogging'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-8418239568073968802</id><published>2007-08-12T18:10:00.000-04:00</published><updated>2007-08-12T18:23:06.505-04:00</updated><title type='text'>Evolution and Mathematics</title><content type='html'>Having followed the "homepage" link left by a commenter by the name of "Jon" I came across &lt;a href="http://sum1ton.wordpress.com/2007/08/08/just-how-intrinsic-is-it-second-response/"&gt;this interesting post&lt;/a&gt; on the intrinsic-nature of mathematics (or rather the lack of it). An interesting point of his:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Certainly some things are entirely invented, such as notation and other things. But my position is a more evolutionary one. Consider a simple bacterium wandering on a two-dimensional substrate. It doesn’t really have any need for cognizance of the larger three-dimensional world because its motility is limited to that substrate. (And by cognizance I don’t mean consciousness, I just mean its ability to interact with its environment). And so, evolution plunks away giving the bacteria only what it needs to survive and reproduce. It may give it a way to sense the direction of polarized light, or a way to sense the chemicals of would-be competitors, or other beneficial attributes.&lt;br /&gt;&lt;br /&gt;......&lt;br /&gt;&lt;br /&gt;So my point is, mathematics really is intrinsic to how we work, because our brains obviously utilize it at some level. But the caveat to that is that this mathematics is still just an approximation. It’s the best solution given finite resources that evolution has provided to us. Like the bacterium, we, being three-dimensional creatures, only need a certain kind of software to operate in that three-dimensional world. So when I say mathematics isn’t intrinsic to the universe, I’m saying that the logical system that evolution provided to our brains to preform those subconscious computations is one based upon the trials and errors of our ancestors.&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;In essence I agree. Mathematics as a form of symbolic reasoning &lt;i&gt;about&lt;/i&gt; the universe of course isn't intrinsic to it. This is why I generally think that the Platonist/Nominalist dichotomy in metamathematics is pretty useless. We invent mathematical concepts to solve some given problem that corresponds to intrinsic properties of the universe. Think of things like "dimensionality". Of course, certain things are more contrived than others, but they are all a means of quantifying some aspect of something or other.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;One interesting question is why we envision mathematics the way we do in the first place. While we're all familiar with the questions of mathematics, the main way we think about those questions is algebraic. We generalize mathematical objects in terms of classes, subclasses, groups, fields, Galois extensions, etc. I remember Roger Penrose (I think) once chose to speculate on how an alien race evolving in different conditions would find some different way to be "mathematical". Could you understand those same algebraic truths in a more combinatorial fashion, for instance? Maybe there is something we simply aren't familiar with.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-8418239568073968802?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/8418239568073968802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=8418239568073968802' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8418239568073968802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8418239568073968802'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/08/evolution-and-mathematics.html' title='Evolution and Mathematics'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-2727283507854312667</id><published>2007-08-12T16:21:00.000-04:00</published><updated>2007-08-12T16:49:00.806-04:00</updated><title type='text'>Radiance Caching: A Technique for Rendering Fog</title><content type='html'>I just happened across &lt;a href="http://www.sciencedaily.com/releases/2007/08/070809125812.htm"&gt;this intriguing story&lt;/a&gt; in Science Daily about a new computational technique for rendering smoke and fog in real time. Doing so is one of those instances where it would seem that the amount of vector data you'd have to compute to render the scene, particularly for how the lighting reflects off the fog/smoke, was pretty much intractable. Typically fog and smoke scenes are rendered using minimal lighting data and instead using &lt;a href="http://cggmwww.csie.nctu.edu.tw/~danki/myweb/projects/hom/index.html"&gt;occlusion culling&lt;/a&gt; to approximate the visibility limitations induced by the fog/smoke. What some researchers at UC San Diego came up with, however, was a caching technique that allows you to compute a small amount of vector data for one point in the scene, and then interpolate that data into the surrounding area to save resources. That way, the vector data for how the light interacts with the fog doesn't have to be computed for all members of a set of fine, granular points in the scene. Some quotes from the story:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;“This is a huge computational savings. It lets you render explosions, smoke, and the architectural lighting design in the presence these kinds of visual effects much faster,” said Wojciech Jarosz, the UC San Diego computer science Ph.D. candidate who led the study.&lt;br /&gt;&lt;br /&gt;Today, rendering realistic computer generated images with smoke, fog, clouds or other “participating media” (some of the light is actually absorbed or reflected by the material, thus the term “participating”) generally requires a lot of computational heavy lifting, time or both. &lt;br /&gt;&lt;br /&gt;......&lt;br /&gt;&lt;br /&gt;With some existing computer graphics approaches, the system has to compute the lighting at every point along the smoky line of sight between your eyes and the person at the bar – and this leads to computational bottlenecks. The new approach from Wojciech Jarosz and colleagues from the UCSD Computer Science and Engineering Department of the Jacobs School avoids this problem by taking computational short cuts. Jarosz’s method, called “radiance caching,” makes it easier to actually create realistic images of smoky bars and other images where some material hanging in the air interacts with the light.&lt;br /&gt;&lt;br /&gt;With the new approach, when smoke, clouds, fog or other participating media vary smoothly across a scene, you can compute the lighting accurately at a small set of locations and then use that information to interpolate the lighting at nearby points. This approach, which is an extension of “irradiance caching,” cuts the number of computations along the line of sight that need to be done to render an image.&lt;/blockquote&gt; &lt;br /&gt;&lt;p&gt;Very interesting. I'll definitely have to see if I can get my hands on the technical write ups of the SIGGRAPH conference where they present this thing.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;At the same time, it all kind of pisses me off. A while back I had some ideas floating around of a means of rendering water caustics. Water caustics are similar to fog and smoke in this instance, as the amount of vector-data for how the light interacts with the water to produce those pretty reflexive effects is usually astoundingly complex. The first idea I had was to find a way to interpolate a small amount of cached or otherwise precomputed data to save some time. What I figured was that I could store topological k-adjacency data in a decque-like data structure through vertex/fragment shaders in GLSL. That way I figured I could pull out smaller values from one end and larger values from the other as necessary. I never finished developing the idea (hell, I never even really developed it that far), but maybe I was onto something.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-2727283507854312667?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/2727283507854312667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=2727283507854312667' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2727283507854312667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2727283507854312667'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/08/radiance-caching-technique-for.html' title='Radiance Caching: A Technique for Rendering Fog'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-7533418226143729105</id><published>2007-08-11T18:20:00.000-04:00</published><updated>2007-08-11T18:21:29.426-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Proof'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>More Geometry from the Foxen</title><content type='html'>So, with as little to do as I do do, I frequently find myself making use of the &lt;a href="http://mathworld.wolfram.com/cgi-bin/random.cgi"&gt;Random Maths&lt;/a&gt; script at &lt;a href="http://mathworld.wolfram.com/"&gt;Mathworld&lt;/a&gt;, and perusing varied and interesting maths. One of the problems with Mathworld though is that it frequently presents things as fact, with little to no indication of the proof or method of proof, as is the case with their page on &lt;a href="http://mathworld.wolfram.com/vanAubelsTheorem.html"&gt;van Aubel's Theorem&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;van Aubel's Theorem concerns the diagram below.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_08B0rrzqpZ0/Rr4ukyiyGbI/AAAAAAAAALo/IxasM1cC_IQ/s1600-h/vanAubel.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_08B0rrzqpZ0/Rr4ukyiyGbI/AAAAAAAAALo/IxasM1cC_IQ/s400/vanAubel.jpg" alt="" id="BLOGGER_PHOTO_ID_5097563037807810994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Given a random quadrilateral abcd, draw squares on all four sides of the figure. Connecting the centers of opposite squares, as done above, you produce two segments, BC and AD. van Aubel's theorem says that BC and AD will always be of equal length and perpendicular to each other.&lt;br /&gt;&lt;br /&gt;To prove this, you can do some neat things with complex numbers. For example, you can represent any point on a plane as a complex number. So the complex number b = x + i*y could be taken as the point (x,y). Using complex numbers in this way, you can use them as substitute vectors. Rotations also becomes very easy. For example, if you multiply a number by i, b*i for example, you get -y + i*x. This is a 90 degree counter clockwise rotation of the original number around the origin. So take the number 1. That can be viewed as the vector {1, 0}. Multiplying by i, you get i, which can be thought of as the vector {0, 1}. {0, 1} is a 90 degree rotation of {1,0}. And of course, when something is rotated, it maintains its original length. Keep that in mind.&lt;br /&gt;&lt;br /&gt;So, instead of points in the diagram above, imagine four random complex numbers, a, b, c, and d. In the case of a and b, the segment between them can be thought of b - a, a complex number pointing from a towards b. We can then represent the midpoint of segment ab as&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20a%20+%20%5Cfrac%7Bb%20-%20a%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;The addition of (b - a)/2 shifts a half way in the direction of b. What we want is the value of A, the center of that square. So, having gone halfway down the side of the square, we want to move into the square by the same amount. Multiplying (b - a)/2 by i, we get an imaginary number of the same length, rotated 90 degrees counter clockwise to the original direction we moved. Adding that will peg us right in the middle of the square. Thus we get, in the diagram above,&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20A%20=%20a%20+%20%5Cfrac%7Bb%20-%20a%7D%7B2%7D%20+%20%5Cimath%20%5Cfrac%7Bb%20-%20a%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Applying that same formula on all four sides, we get the positions of all the centers of the squares.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20A%20=%20a%20+%20%5Cfrac%7Bb%20-%20a%7D%7B2%7D%20+%20%5Cimath%20%5Cfrac%7Bb%20-%20a%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20B%20=%20b%20+%20%5Cfrac%7Bc%20-%20b%7D%7B2%7D%20+%20%5Cimath%20%5Cfrac%7Bc%20-%20b%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20C%20=%20c%20+%20%5Cfrac%7Bd%20-%20c%7D%7B2%7D%20+%20%5Cimath%20%5Cfrac%7Bd%20-%20c%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20D%20=%20d%20+%20%5Cfrac%7Ba%20-%20d%7D%7B2%7D%20+%20%5Cimath%20%5Cfrac%7Ba%20-%20d%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Now, the theorem says that AC and DB are equal in length, and at 90 degrees to each other. This is the same as saying that one is a 90 degree rotation of the other. If that is true, then (B - D) is a rotation of (C - A), which means that&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28B%20-%20D%29%20=%20%5Cimath%20%28C%20-%20A%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And to prove that, just start substituting.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28b%20+%20%5Cfrac%7Bc%20-%20b%7D%7B2%7D%20+%20%5Cimath%20%5Cfrac%7Bc%20-%20b%7D%7B2%7D%20-%20d%20-%20%5Cfrac%7Ba%20-%20d%7D%7B2%7D%20-%20%5Cimath%20%5Cfrac%7Ba%20-%20d%7D%7B2%7D%29%20=%20%5Cimath%20%28c%20+%20%5Cfrac%7Bd%20-%20c%7D%7B2%7D%20+%20%5Cimath%20%5Cfrac%7Bd%20-%20c%7D%7B2%7D%20-%20a%20-%20%5Cfrac%7Bb%20-%20a%7D%7B2%7D%20-%20%5Cimath%20%5Cfrac%7Bb%20-%20a%7D%7B2%7D%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%282b%20+%20c%20-%20b%20+%20%5Cimath%20c%20-%20%5Cimath%20b%20-%202d%20-%20a%20+%20d%0A-%20%5Cimath%20a%20+%20%5Cimath%20d%29%20=%20%5Cimath%20%282%20c%20+%20d%20-%20c%20+%20%5Cimath%20d%20-%20%5Cimath%20c%20-%202a%20-%20b%20+%20a%20-%20%5Cimath%20b%20+%20%5Cimath%20a%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28b%20+%20c%20+%20%5Cimath%20c%20-%20%5Cimath%20b%20-%20d%20-%20a%0A-%20%5Cimath%20a%20+%20%5Cimath%20d%29%20=%20%5Cimath%20%28c%20+%20d%20+%20%5Cimath%20d%20-%20%5Cimath%20c%20-%20a%20-%20b%20-%20%5Cimath%20b%20+%20%5Cimath%20a%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20b%20+%20c%20+%20%5Cimath%20c%20-%20%5Cimath%20b%20-%20d%20-%20a%0A-%20%5Cimath%20a%20+%20%5Cimath%20d%20=%20%5Cimath%20c%20+%5Cimath%20d%20-%20d%20+%20c%20-%20%5Cimath%20a%20-%20%5Cimath%20b%20+%20b%20-%20a" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And, as you can see, the same terms exist on each side, and the equation reduces to 0 = 0, true, verifying that one is the rotation of the other. Which in turn verifies that they are at 90 degrees to each other, and that they are of equal length. And because a, b, c, and d were general complex numbers, the same applies to any quadrilateral on the plane.&lt;br /&gt;&lt;br /&gt;Neat things, complex numbers. I am a fan.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-7533418226143729105?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/7533418226143729105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=7533418226143729105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/7533418226143729105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/7533418226143729105'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/08/more-geometry-from-foxen.html' title='More Geometry from the Foxen'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_08B0rrzqpZ0/Rr4ukyiyGbI/AAAAAAAAALo/IxasM1cC_IQ/s72-c/vanAubel.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-2542686449244614403</id><published>2007-08-08T19:10:00.001-04:00</published><updated>2007-08-08T19:10:21.449-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Proof'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Soddy Circle Derivation</title><content type='html'>Today we concern ourselves with the image below.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_08B0rrzqpZ0/RrnqziiyGYI/AAAAAAAAALQ/YInJl7vdRLc/s1600-h/Soddy1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_08B0rrzqpZ0/RrnqziiyGYI/AAAAAAAAALQ/YInJl7vdRLc/s400/Soddy1.jpg" alt="" id="BLOGGER_PHOTO_ID_5096362624513350018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;We have three main circles, all tangent to each other, forming a sort of triangle thing. Now, for any three circles in that configuration, there is one circle that can be placed on the inside of the three, tangent to each, and one on the outside tangent to each.&lt;br /&gt;&lt;br /&gt;The question then is what are the radii of those circles in terms of the radii of the three original circles? One tool we'll need is the &lt;a href="http://mathworld.wolfram.com/LawofCosines.html"&gt;Law of Cosines&lt;/a&gt;. Consider the triangle below,&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_08B0rrzqpZ0/RrnsxyiyGZI/AAAAAAAAALY/cfkvPl730aY/s1600-h/LawOfCosines.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_08B0rrzqpZ0/RrnsxyiyGZI/AAAAAAAAALY/cfkvPl730aY/s400/LawOfCosines.jpg" alt="" id="BLOGGER_PHOTO_ID_5096364793471834514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The Law of Cosines gives us the following&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20a%5E2%20+%20b%5E2%20-%202%20a%20b%20Cos%28C%29%20=%20c%5E2" align="middle" border="0" /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20a%5E2%20+%20c%5E2%20-%202%20a%20c%20Cos%28B%29%20=%20b%5E2" align="middle" border="0" /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20b%5E2%20+%20c%5E2%20-%202%20b%20c%20Cos%28A%29%20=%20a%5E2" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;So, consider this.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_08B0rrzqpZ0/RrntNCiyGaI/AAAAAAAAALg/aWGwoAa1Mvc/s1600-h/Soddy2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_08B0rrzqpZ0/RrntNCiyGaI/AAAAAAAAALg/aWGwoAa1Mvc/s400/Soddy2.jpg" alt="" id="BLOGGER_PHOTO_ID_5096365261623269794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is a closeup of the inner circle, with a triangle drawn through the centers of the three circles, and segments from the centers of those circles to the center of the inner Soddy circle. The radii of the circles are labeled a, b, and c. The radius of the inner circle I've attempted to label x. Now, the three segments from the vertexes of the triangle to the center triangle divide the circle into 3 arcs, which I've labeled A, B, and C.&lt;br /&gt;&lt;br /&gt;So, the main triangle is divided up into three obtuse triangles, with obtuse angles of A, B, and C. Applying the Law of Cosines to each triangle there, we get the following.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%7B%28x%20+%20a%29%7D%5E2%20+%20%7B%28x%20+%20b%29%7D%5E2%20-%202%28x%20+%20a%29%28x%20+%20b%29Cos%28C%29%20=%20%7B%28a%20+%20b%29%7D%5E2" align="middle" border="0" /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%7B%28x%20+%20a%29%7D%5E2%20+%20%7B%28x%20+%20c%29%7D%5E2%20-%202%28x%20+%20a%29%28x%20+%20c%29Cos%28B%29%20=%20%7B%28a%20+%20c%29%7D%5E2" align="middle" border="0" /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%7B%28x%20+%20b%29%7D%5E2%20+%20%7B%28x%20+%20c%29%7D%5E2%20-%202%28x%20+%20b%29%28x%20+%20c%29Cos%28A%29%20=%20%7B%28b%20+%20c%29%7D%5E2" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;We want to solve for x. Note too that we also have the fact that &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20A%20+%20B%20+%20C%20=%202%20%5Cpi" align="middle" border="0" /&gt;, thinking in radians. So, one approach would be to solve each of the LoC equations for A, B, and C, and then set the sum of those to 2 pi. The problem with this is that, in solving for A, B, and C, you'd be taking the ArcCos of huge expressions in terms of x, and then manipulating the sum of several ArcCos values. ArcCos is difficult to manipulate algebraically, which makes that route overly complicated, and not likely to bear anything useful.&lt;br /&gt;&lt;br /&gt;A better approach would be to solve for the cosine values themselves, and try to manipulate those into something useful.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20Cos%28A%29%20=%20%5Cfrac%7B%7B%28b%20+%20c%29%7D%5E2%20-%20%7B%28x%20+%20b%29%7D%5E2%20-%20%7B%28x%20+%20c%29%7D%5E2%7D%7B-2%28x%20+%20b%29%28x%20+%20c%29%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20Cos%28B%29%20=%20%5Cfrac%7B%7B%28a%20+%20c%29%7D%5E2%20-%20%7B%28x%20+%20a%29%7D%5E2%20-%20%7B%28x%20+%20c%29%7D%5E2%7D%7B-2%28x%20+%20a%29%28x%20+%20c%29%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20Cos%28C%29%20=%20%5Cfrac%7B%7B%28a%20+%20b%29%7D%5E2%20-%20%7B%28x%20+%20a%29%7D%5E2%20-%20%7B%28x%20+%20b%29%7D%5E2%7D%7B-2%28x%20+%20a%29%28x%20+%20b%29%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;So, let's think about Cos(A), Cos(B), Cos(C), and &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20A%20+%20B%20+%20C%20=%202%5Cpi" align="middle" border="0" /&gt;. Suppose we solve for A, &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20A%20=%202%5Cpi%20-%20%28B%20+%20C%29" align="middle" border="0" /&gt;, and take the cosine of that? We need to make use of an identity I don't think I'll justify for now,&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20Cos%28x%20+%20y%29%20=%20Cos%28x%29Cos%28y%29%20-%20Sin%28x%29Sin%28y%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;We take that and run with it.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20Cos%28A%29%20=%20Cos%282%5Cpi%20-%20%28B%20+%20C%29%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20Cos%28A%29%20=%20Cos%282%5Cpi%29Cos%28B%20+%20C%29%20-%20Sin%282%5Cpi%29Sin%28B%20+%20C%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20Cos%28A%29%20=%201*Cos%28B%20+%20C%29%20-%200*Sin%28B%20+%20C%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20Cos%28A%29%20=%20Cos%28B%20+%20C%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20Cos%28A%29%20=%20Cos%28B%29Cos%28C%29%20-%20Sin%28B%29Sin%28C%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;We're getting there. We now have Cos(A) completely in terms of trigonometric values of B and C. However, we aren't out of the woods yet. What we have is in terms of the sine of B and C as well. But, with the trigonometric identity &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20Cos%28x%29%5E2%20+%20Sin%28x%29%5E2%20=%201" align="middle" border="0" /&gt;, we can do the following.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20Cos%28A%29%20=%20Cos%28B%29Cos%28C%29%20-%20Sin%28B%29Sin%28C%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20Sin%28B%29Sin%28C%29%20=%20Cos%28B%29Cos%28C%29%20-%20Cos%28A%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%7B%28Sin%28B%29Sin%28C%29%29%7D%5E2%20=%20%7B%28Cos%28B%29Cos%28C%29%20-%20Cos%28A%29%29%7D%5E2" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%7BSin%28B%29%7D%5E2%20%7BSin%28C%29%7D%5E2%20=%20%7B%28Cos%28B%29Cos%28C%29%20-%20Cos%28A%29%29%7D%5E2" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%281%20-%20%7BCos%28B%29%7D%5E2%29%281%20-%20%7BCos%28C%29%7D%5E2%29%20=%20%7B%28Cos%28B%29Cos%28C%29%20-%20Cos%28A%29%29%7D%5E2" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Now we have one equation, strictly in terms of the cosine values of the angle, which is what we know.  I'll spare you a lot of the algebraic manipulations, but plugging the cosine values we have in and simplifying somewhat for a first step, we get&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%2016%20a%5E2%20x%5E2%20b%20c%20%5Cfrac%7B%28a%20+%20c%20+%20x%29%28a%20+%20b%20+%20c%29%7D%7B%7B%28x%20+%20a%29%7D%5E4%20%7B%28x%20+%20b%29%7D%5E2%20%7B%28x%20+%20c%29%7D%5E2%7D%20=%204%20%5Cfrac%7B%7B%28a%5E2%20b%20c%20-a%5E2%7B%28b%20+%20c%29%7D%20x%20+%20%7B%28b%20c%20-%20a%20b%20-%20a%20c%29%7D%20x%5E2%29%7D%5E2%7D%7B%7B%28x%20+%20a%29%7D%5E4%20%7B%28x%20+%20b%29%7D%5E2%20%7B%28x%20+%20c%29%7D%5E2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Dropping all the common denominators and things, expanding and simplifying and grouping, we can change that to the following.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20-%20%7B%28x%20+%20a%29%7D%5E2%20%7B%28%7B%28a%20b%20c%29%7D%5E2%20-%202%20a%20b%20c%20%7B%28a%20b%20+%20b%20c%20+%20c%20a%29%7D%20x%20+%20%28%7B%28a%20c%20+%20a%20b%20+%20b%20c%29%7D%5E2%20-%204%20a%20b%20c%20%28a%20+%20b%20+%20c%29%29%20x%5E2%29%7D%20=%200" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Now, we want to solve for x. x = -a is a solution to the above equation, due to the far left factor. But it is clearly not a useful solution, as the radius of the inner circle is much smaller than any of the three circles. So we can just toss that factor, as well as the negative sign, leaving a simple quadratic equation. Well ... simple is relative.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%7B%28a%20b%20c%29%7D%5E2%20-%202%20a%20b%20c%20%7B%28a%20b%20+%20b%20c%20+%20c%20a%29%7D%20x%20+%20%28%7B%28a%20c%20+%20a%20b%20+%20b%20c%29%7D%5E2%20-%204%20a%20b%20c%20%28a%20+%20b%20+%20c%29%29%20x%5E2%20=%200" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;At this point it should be noted that one of the reasons I'm skipping so many steps and not showing all my work is that the expressions involved are too large to conveniently displayed within the bounds of this website. Nevertheless, using the traditional quadratic formula and simplifying, we get the following.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20x%20=%20%28a%20b%20c%29%20%5Cfrac%7B%20%7B%28a%20c%20+%20a%20b%20+%20b%20c%29%7D%20%5Cpm%20%5Csqrt%7B4%20a%20b%20c%7B%28a%20+%20b%20+%20c%29%7D%7D%7D%7B%20%7B%28a%20c%20+%20a%20b%20+%20b%20c%29%7D%5E2%20-%204%20a%20b%20c%20%28a%20+%20b%20+%20c%29%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And that's pretty much it. Everything else is just simplification.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20x%20=%20%28a%20b%20c%29%20%7B%5B%5Cfrac%7B%20%7B%28a%20c%20+%20a%20b%20+%20b%20c%29%7D%20%5Cpm%20%5Csqrt%7B4%20a%20b%20c%7B%28a%20+%20b%20+%0Ac%29%7D%7D%7D%7B%20%7B%28a%20c%20+%20a%20b%20+%20b%20c%29%7D%5E2%20-%204%20a%20b%20c%20%28a%20+%20b%20+%20c%29%7D%5D%7D%20%7B%5B%5Cfrac%7B%7B%28a%20c%20+%20a%20b%20+%0Ab%20c%29%7D%20%5Cmp%20%5Csqrt%7B4%20a%20b%20c%7B%28a%20+%20b%20+%20c%29%7D%7D%7D%7B%7B%28a%20c%20+%20a%20b%20+%20b%20c%29%7D%20%5Cmp%20%5Csqrt%7B4%0Aa%20b%20c%7B%28a%20+%20b%20+%20c%29%7D%7D%7D%5D%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20x%20=%20%28a%20b%20c%29%20%7B%5B%5Cfrac%7B%20%7B%28a%20c%20+%20a%20b%20+%20b%20c%29%7D%5E2%20-%204%20a%20b%20c%7B%28a%20+%20b%20+%0Ac%29%7D%20%7D%7B%20%7B%28a%20c%20+%20a%20b%20+%20b%20c%29%7D%5E2%20-%204%20a%20b%20c%20%28a%20+%20b%20+%20c%29%7D%5D%7D%20%7B%5B%5Cfrac%7B1%7D%7B%7B%28a%20c%20+%20a%20b%20+%20b%20c%29%7D%20%5Cmp%20%5Csqrt%7B4%0Aa%20b%20c%7B%28a%20+%20b%20+%20c%29%7D%7D%7D%5D%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20x%20=%20%5Cfrac%7B%28a%20b%20c%29%7D%7B%7B%28a%20c%20+%20a%20b%20+%20b%20c%29%7D%20%5Cmp%20%5Csqrt%7B4%0Aa%20b%20c%7B%28a%20+%20b%20+%20c%29%7D%7D%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And there you have it. Plugging in the radii of the three circles will give you the radius of the inner circle. However, notice that there are two solutions for x, depending on whether you do plus or minus the root on bottom. Remarkably, while one solution is the radius of the inner circle, the other solution is the radius of the outer circle. I say remarkable because I cannot justify the geometry of it, but there is no doubt a straightforward explanation for it. But as I think this post has established, my geometric intuition is rather stunted. From what I can make out, the positive root on the bottom leads to the inner circle radius, and the negative root leads to the outer circle radius.&lt;br /&gt;&lt;br /&gt;Just to strip things down as much as possible, I like to recombine that solution into a single equation that doesn't have messy plus-minuses.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20x%20=%20%5Cfrac%7Ba%20b%20c%7D%7B%7B%28a%20c%20+%20a%20b%20+%20b%20c%29%7D%20%5Cmp%20%5Csqrt%7B4%0Aa%20b%20c%7B%28a%20+%20b%20+%20c%29%7D%7D%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Cfrac%7Ba%20b%20c%7D%7Bx%7D%20=%20%7B%28a%20c%20+%20a%20b%20+%20b%20c%29%7D%20%5Cmp%20%5Csqrt%7B4%0Aa%20b%20c%7B%28a%20+%20b%20+%20c%29%7D%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Cfrac%7Ba%20b%20c%7D%7Bx%7D%20-%20%7B%28a%20c%20+%20a%20b%20+%20b%20c%29%7D=%5Cmp%20%5Csqrt%7B4%0Aa%20b%20c%7B%28a%20+%20b%20+%20c%29%7D%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%7B%28%5Cfrac%7Ba%20b%20c%7D%7Bx%7D%20-%20%7B%28a%20c%20+%20a%20b%20+%20b%20c%29%7D%29%7D%5E2%20=%204%0Aa%20b%20c%7B%28a%20+%20b%20+%20c%29%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Which you can take as a general Soddy equation, the same equation I posted last night.&lt;br /&gt;&lt;br /&gt;Well ... I found it exciting, anyway : )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-2542686449244614403?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/2542686449244614403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=2542686449244614403' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2542686449244614403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2542686449244614403'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/08/soddy-circle-derivation.html' title='Soddy Circle Derivation'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_08B0rrzqpZ0/RrnqziiyGYI/AAAAAAAAALQ/YInJl7vdRLc/s72-c/Soddy1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-6944167189882777859</id><published>2007-08-08T03:29:00.000-04:00</published><updated>2007-08-08T03:32:49.424-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Soddy</title><content type='html'>&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%204%28a%20b%20c%28a%20+%20b%20+%20c%29%29%20=%20%7B%28%5Cfrac%7Ba%20b%20c%7D%7Bx%7D%20-%20%28a%20b%20+%20b%20c%20+%20a%20b%29%29%7D%5E2" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;An interesting equation, the derivation of which was quite exciting. This is to encourage me to write it up on the morrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-6944167189882777859?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/6944167189882777859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=6944167189882777859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/6944167189882777859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/6944167189882777859'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/08/soddy.html' title='Soddy'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-7081677739073280444</id><published>2007-08-07T14:29:00.000-04:00</published><updated>2007-08-07T14:30:03.595-04:00</updated><title type='text'>Don't Support the ESA</title><content type='html'>Last week came some &lt;a href="http://www.ice.gov/pi/news/newsreleases/articles/070801washington.htm"&gt;disturbing news&lt;/a&gt; about raids conducted by the ICE against sellers of mod chips. 32 places in 16 states were targeted for selling devices used to modify video game consoles. Now, you'd think that personal modification of a device bought legitimately on the free market would easily fall under fair use, especially when the purposes of such modifications include the ability to use import games (which are unfairly locked by regional codes) and expanding the functionality of the device (such as the ability to use it as a media center). Think again. You can't use them because such devices can potentially be used in the act of piracy. At least, that's what the &lt;a href="http://www.theesa.com/archives/2007/08/video_game_indu_11.php"&gt;ESA thinks&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;“Plain and simple, selling and distributing products to illegally bypass game consoles’ piracy protections is a crime with real-life consequences. This is not a game; we’re talking jail time. Enforcement initiatives of this scope send a clear message to both the public and pirate community that this illegal activity will not be tolerated," said Michael D. Gallagher, president of ESA, the trade association representing U.S. computer and video game publishers. "We commend Immigration and Customs Enforcement (ICE), the U.S. Department of Justice, and the participating U.S. Attorneys’ offices for targeting individuals and groups selling ‘mod-chips’ and pirated game software.”&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Never mind that making backup copies of games is a perfectly legal activity and those that wish to modify their consoles so as to be capable of doing so would also be engaging in a legitimate instance of fair use. No way, we must be able to stop the use of such devices &lt;i&gt;in toto&lt;/i&gt; because they can potentially be used in some nominally illegal activity. Next up, we shall lobby for legislation banning the sale and/or use of soldering irons used to install the chips (can't take any chances).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Folks, honestly, you really do have to worry about this sort of odious action. What's happening is our government, despite a myriad of legitimate "Homeland Security" measures it could be taking, using violence against it's own citizenry on behalf of the corporate establishment. That is the &lt;i&gt;very definition&lt;/i&gt; of fascism. Those who assured us that we wouldn't have to worry about &lt;a href="http://www.eff.org/IP/DMCA/"&gt;the DMCA&lt;/a&gt; and it's effective squashing of fair use rights should be eating a lot of crow about now.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;But the most important thing is that gamers all across America should know that the ESA is not their friend in any way, shape or form. Thus they should in no way lend their support to the organization. Simply put, they are propping up the obsolete legal construct of "copyright" and exploiting it for the creation of a protection racket, and are doing so no less than other big media fronts like the MPAA and the RIAA. They have no interest in protecting the rights and civil liberties of their customers. There are many other organizations out there that fight for consumers rights and software freedom, such as the &lt;a href="http://www.eff.org/"&gt;Electronic Frontier Foundation&lt;/a&gt;, &lt;a href="http://www.democraticmedia.org/"&gt;The Center for Digital Democracy&lt;/a&gt; and the &lt;a href="http://ww.fsf.org"&gt;Free Software Foundation&lt;/a&gt;. Corporate lobbying organizations don't deserve our support merely because of our nominal agreement on issues pertaining to the regulation of game content.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-7081677739073280444?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/7081677739073280444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=7081677739073280444' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/7081677739073280444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/7081677739073280444'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/08/dont-support-esa.html' title='Don&apos;t Support the ESA'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-8916071980468071860</id><published>2007-08-07T02:11:00.000-04:00</published><updated>2007-08-07T02:41:35.114-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>IFS Source Code</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_08B0rrzqpZ0/RrgTzSiyGXI/AAAAAAAAALI/pcyyfaPGdCg/s1600-h/RandomFractal.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_08B0rrzqpZ0/RrgTzSiyGXI/AAAAAAAAALI/pcyyfaPGdCg/s400/RandomFractal.jpg" alt="" id="BLOGGER_PHOTO_ID_5095844750241700210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;import java.awt.Color;&lt;br /&gt;import java.awt.Graphics2D;&lt;br /&gt;import java.awt.RenderingHints;&lt;br /&gt;import java.awt.image.BufferedImage;&lt;br /&gt;import java.io.BufferedOutputStream;&lt;br /&gt;import java.io.FileOutputStream;&lt;br /&gt;&lt;br /&gt;import com.sun.image.codec.jpeg.JPEGCodec;&lt;br /&gt;import com.sun.image.codec.jpeg.JPEGEncodeParam;&lt;br /&gt;import com.sun.image.codec.jpeg.JPEGImageEncoder;&lt;br /&gt;// Necessary and vital packages for image manipulation&lt;br /&gt;// The body of code relating to image manipulation in&lt;br /&gt;// this program I merely jacked from&lt;br /&gt;// http://schmidt.devlib.org/java/image-faq/example-image-io-code.html&lt;br /&gt;// Very nice site&lt;br /&gt;&lt;br /&gt;public class IFSD2&lt;br /&gt;{&lt;br /&gt;    public static void main(String[] banana) throws Exception&lt;br /&gt;    {&lt;br /&gt;        int width = 500, height = 500;&lt;br /&gt;        double xmin = -0.75, xmax = 0.75, ymin = -0.75, ymax = 0.75;&lt;br /&gt;        double dx = (xmax - xmin)/width, dy = (ymax - ymin)/height;&lt;br /&gt;        // Various things, width and height of image to be saved&lt;br /&gt;        // The range over which the system will be graphed&lt;br /&gt;        // dx and dy are useful for computing pixel locations from point values&lt;br /&gt;        //   on the graphed plane&lt;br /&gt;       &lt;br /&gt;        String fileName = "RandomFractal.jpg";&lt;br /&gt;        int points = 5000000;&lt;br /&gt;        // Name to be saved under, points to be plotted&lt;br /&gt;       &lt;br /&gt;        BufferedImage newImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);&lt;br /&gt;        // Create a new image with the specified dimensions&lt;br /&gt;        // and colour encoding&lt;br /&gt;       &lt;br /&gt;        Graphics2D graphics2D = newImage.createGraphics();&lt;br /&gt;        // the graphics object is what you use to actually draw&lt;br /&gt;        // on the image&lt;br /&gt;       &lt;br /&gt;        graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);&lt;br /&gt;        // No idea what this does, but it seems important&lt;br /&gt;       &lt;br /&gt;        graphics2D.setColor(Color.white);&lt;br /&gt;        graphics2D.fillRect(0, 0, width, height);&lt;br /&gt;        graphics2D.setColor(Color.black);&lt;br /&gt;        // This, in order, sets the paint colour to white&lt;br /&gt;        // whites out the body of the image, and then&lt;br /&gt;        // resets the color to black&lt;br /&gt;       &lt;br /&gt;        double px = 0, py = 0, nx, ny;&lt;br /&gt;        // the current point of the system will be&lt;br /&gt;        // saved in (px, py). The default is that&lt;br /&gt;        // you always start at (0,0)&lt;br /&gt;       &lt;br /&gt;        double p1a = r(), p1b = r(), p1c = r(), p1d = r(), p1e = r(), p1f = r();&lt;br /&gt;        double p1g = r(), p1h = r(), p1i = r(), p1j = r(), p1k = r(), p1l = r();&lt;br /&gt;       &lt;br /&gt;        double p2a = r(), p2b = r(), p2c = r(), p2d = r(), p2e = r(), p2f = r();&lt;br /&gt;        double p2g = r(), p2h = r(), p2i = r(), p2j = r(), p2k = r(), p2l = r();&lt;br /&gt;       &lt;br /&gt;        double p3a = r(), p3b = r(), p3c = r(), p3d = r(), p3e = r(), p3f = r();&lt;br /&gt;        double p3g = r(), p3h = r(), p3i = r(), p3j = r(), p3k = r(), p3l = r();&lt;br /&gt;       &lt;br /&gt;        double p4a = r(), p4b = r(), p4c = r(), p4d = r(), p4e = r(), p4f = r();&lt;br /&gt;        double p4g = r(), p4h = r(), p4i = r(), p4j = r(), p4k = r(), p4l = r();&lt;br /&gt;       &lt;br /&gt;        // For this IFS, I'm using 4 sets of rules of the form&lt;br /&gt;        // xnew = a*x^2 + b*x*y + c*y^2 + d*x + e*y + f&lt;br /&gt;        // ynew = g*x^2 + h*x*y + i*y^2 + j*x + k*y + l&lt;br /&gt;        // This generates as many necessary coefficients with random&lt;br /&gt;        // values, as defined by the function r(). Of course, in a&lt;br /&gt;        // pinch, you can make these linear by setting a, b, c, g, h, i&lt;br /&gt;        // in each case to 0. And you can do a specific IFS by&lt;br /&gt;        // specifying the coefficients you need.&lt;br /&gt;       &lt;br /&gt;        int x, y;&lt;br /&gt;       &lt;br /&gt;        double mark;&lt;br /&gt;       &lt;br /&gt;        // Loops the specified number of times to&lt;br /&gt;        // plot that many points&lt;br /&gt;        for(int i = 0; i &lt; points; i++)&lt;br /&gt;        {&lt;br /&gt;            x = (int)((px - xmin)/dx);&lt;br /&gt;            y = (int)((py - ymin)/dy);&lt;br /&gt;            // x and y hold the pixel location on the image file&lt;br /&gt;            // calculated from the point values&lt;br /&gt;           &lt;br /&gt;            graphics2D.drawLine(x, y, x, y);&lt;br /&gt;            // this draws a single black dot at that location&lt;br /&gt;           &lt;br /&gt;            mark = Math.random();&lt;br /&gt;            // select a random number between 0 and 1&lt;br /&gt;            // for choosing which rule to use&lt;br /&gt;           &lt;br /&gt;            nx = px; ny = py;&lt;br /&gt;            // store the point values to temporary variables&lt;br /&gt;           &lt;br /&gt;            // depending on the value of mark, between 0 and 1,&lt;br /&gt;            // one of the four rules is selected to calculate&lt;br /&gt;            // the new point value. Note that each rule has&lt;br /&gt;            // an equal probability of being chosen. You can&lt;br /&gt;            // change that as you see fit.&lt;br /&gt;            if( mark &lt;= 0.25 )&lt;br /&gt;            {&lt;br /&gt;                px = (p1a)*nx*nx + (p1b)*nx*ny + (p1c)*ny*ny + (p1d)*nx + (p1e)*ny + (p1f);&lt;br /&gt;                py = (p1g)*nx*nx + (p1h)*nx*ny + (p1i)*ny*ny + (p1j)*nx + (p1k)*ny + (p1l);&lt;br /&gt;            }&lt;br /&gt;            else if( mark &lt;= 0.50 )&lt;br /&gt;            {&lt;br /&gt;                px = (p2a)*nx*nx + (p2b)*nx*ny + (p2c)*ny*ny + (p2d)*nx + (p2e)*ny + (p2f);&lt;br /&gt;                py = (p2g)*nx*nx + (p2h)*nx*ny + (p2i)*ny*ny + (p2j)*nx + (p2k)*ny + (p2l);&lt;br /&gt;            }&lt;br /&gt;            else if( mark &lt;= 0.75 )&lt;br /&gt;            {&lt;br /&gt;                px = (p3a)*nx*nx + (p3b)*nx*ny + (p3c)*ny*ny + (p3d)*nx + (p3e)*ny + (p3f);&lt;br /&gt;                py = (p3g)*nx*nx + (p3h)*nx*ny + (p3i)*ny*ny + (p3j)*nx + (p3k)*ny + (p3l);&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                px = (p4a)*nx*nx + (p4b)*nx*ny + (p4c)*ny*ny + (p4d)*nx + (p4e)*ny + (p4f);&lt;br /&gt;                py = (p4g)*nx*nx + (p4h)*nx*ny + (p4i)*ny*ny + (p4j)*nx + (p4k)*ny + (p4l);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;       &lt;br /&gt;        // Everything below merely writes the image object to a file and saves it&lt;br /&gt;        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(fileName));&lt;br /&gt;        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);&lt;br /&gt;        JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(newImage);&lt;br /&gt;        param.setQuality(1.0f, false);&lt;br /&gt;        encoder.setJPEGEncodeParam(param);&lt;br /&gt;        encoder.encode(newImage);&lt;br /&gt;        out.close();&lt;br /&gt;        System.out.println("DONE");&lt;br /&gt;        System.exit(0);&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    public static double r(){ return (2*Math.random() - 1)/2; }&lt;br /&gt;    // Math.random() returns a random number between 0 and 1&lt;br /&gt;    // 2*Math.random() returns a random number between 0 and 2&lt;br /&gt;    // 2*Math.random() - 1 returns a random number between -1 and 1&lt;br /&gt;    // And I divide by 2 to give a range between -0.5 and 0.5 for all&lt;br /&gt;    // coefficients. This generally prevents the system from&lt;br /&gt;    // running too far off the range of the graph.&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-8916071980468071860?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/8916071980468071860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=8916071980468071860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8916071980468071860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8916071980468071860'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/08/ifs-source-code.html' title='IFS Source Code'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_08B0rrzqpZ0/RrgTzSiyGXI/AAAAAAAAALI/pcyyfaPGdCg/s72-c/RandomFractal.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-8729624735969312766</id><published>2007-08-06T14:41:00.000-04:00</published><updated>2007-08-06T14:42:11.359-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Mixing Number Theories</title><content type='html'>One of my favourite algorithms of all time is probably the &lt;a href="http://mathworld.wolfram.com/EuclideanAlgorithm.html"&gt;Euclidean Algorithm&lt;/a&gt;. I've discussed &lt;a href="http://foxmath.blogspot.com/2007/03/basics-euclidean-algorithm.html"&gt;this algorithm&lt;/a&gt; a few times &lt;a href="http://foxmath.blogspot.com/2007/03/behavior-of-euclids-algorithm.html"&gt;before&lt;/a&gt;. It's excellent. Unlike Euler's Algorithm, which is horrible.&lt;br /&gt;&lt;br /&gt;Basically, it's a method for finding the greatest common divisor of two numbers. Take two numbers, for example 42 and 28. Divide one by the other and take the remainder. Toss the larger number, and keep the remainder. And repeat until the remainder is 0.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;42 = 1*28 + 14&lt;br /&gt;&lt;br /&gt;28 = 2*14 + 0&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;When you reach a remainder of 0, whatever number you divided by last is your greatest common divisor. So 14 is the GCD of 42 and 28. Seeing as 42 = 14*3 and 28 = 14*2, that is clearly correct.&lt;br /&gt;&lt;br /&gt;So, very slick, very fast. Easy to implement.&lt;br /&gt;&lt;br /&gt;An interesting historical note though, and I don't recall where I learned this, is that in his &lt;a href="http://en.wikipedia.org/wiki/Euclid%27s_elements"&gt;Elements&lt;/a&gt;, Euclid expressed this algorithm in terms of subtraction of line segments. In this case here, imagine you have a line segment of length 42, and a line segment of length 28. You take away the shorter length from the longer, until you can't anymore. Consider instead here ... 42 and 38. You keep taking shorter lengths from longer lengths until you reach 0. The last length is the greatest common divisor.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;42 - 38 = 4&lt;br /&gt;&lt;br /&gt;38 - 4 = 34&lt;br /&gt;34 - 4 = 30&lt;br /&gt;...&lt;br /&gt;10 - 4 = 6&lt;br /&gt;6 - 4 = 2&lt;br /&gt;&lt;br /&gt;4 - 2 = 2&lt;br /&gt;2 - 2 = 0&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;So the GCD of 42 and 38 is 2. And this was computed 'geometrically' for lack of a better word. I find that interesting.&lt;br /&gt;&lt;br /&gt;I only bring this up because it's always struck me that Euclid's Algorithm, in the geometric sense, is of limited use, because of the difficulty of achieving exact integer length segments in reality. Mathematical abstractions of it are nice, but in practicality ... *shrug*&lt;br /&gt;&lt;br /&gt;Which of course leads me to wonder, what happens if you weren't to use integer lengths? That is, if you were to perform the algorithm on non-integer values. Now, it strikes me as obvious that if there is an exact whole number ratio between your values, even if they are non-integers, you have no issues. For example, consider 3/5 and 7/5. Neither are integer values, but you might as well just consider them as 3 and 7. But what if there is no whole number ratio? What results?&lt;br /&gt;&lt;br /&gt;So, let's consider 1 and &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7B2%7D" align="middle" border="0" /&gt;.&lt;br /&gt;&lt;br /&gt;Since root 2 is the larger value, we subtract 1 from root 2 until the result is smaller than 1.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7B2%7D%20-%201%20=%200.414214..." align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;That took one subtraction. Now that we have a value smaller than 1, we subtract that value from 1 until we get an even smaller value. While the value we have now is 0.414214..., I'm going to use the exact form, &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28%5Csqrt%7B2%7D%20-%201%29" align="middle" border="0" /&gt; for convenience.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%201%20-%20%28%5Csqrt%7B2%7D%20-%201%29%20=%200.585786..." align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%201%20-%202*%28%5Csqrt%7B2%7D%20-%201%29%20=%200.171573..." align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And with two subtractions, we now have a new smaller value.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%201%20-%202*%28%5Csqrt%7B2%7D%20-%201%29%20=%201%20-%202*%5Csqrt%7B2%7D%20+%202%20=%203%20-%202*%5Csqrt%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And again, we drop our largest value, 1, and take this new value. And we start subtracting again.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28%5Csqrt%7B2%7D%20-%201%29%20-%20%283%20-%202*%5Csqrt%7B2%7D%29%20=%200.242641..." align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28%5Csqrt%7B2%7D%20-%201%29%20-%202*%283%20-%202*%5Csqrt%7B2%7D%29%20=%200.0710678..." align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Two subtractions, and we have our smaller value again.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28%5Csqrt%7B2%7D%20-%201%29%20-%202*%283%20-%202*%5Csqrt%7B2%7D%29%20=%20%5Csqrt%7B2%7D%20-%201%20-%206%20+%204*%5Csqrt%7B2%7D%20=%20-7%20+%205*%5Csqrt%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Now, if you continue in this vein, you'll find that each new step takes two subtractions, producing a smaller value each time. I should probably prove that. One can well imagine that you'd take two subtractions each time until the new value reduced down to 0, well far in the future. Looking at the number of subtractions we've produced at each step, that would give 1, 2, 2, 2, 2... so on. This by itself is an interesting result, which I think will probably explain in a moment.&lt;br /&gt;&lt;br /&gt;But what is it we're doing really?&lt;br /&gt;&lt;br /&gt;We have a sequence of numbers.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7B2%7D,%201,%20-1%20+%20%5Csqrt%7B2%7D,%203%20-%202*%5Csqrt%7B2%7D,%20-7%20+%205*%5Csqrt%7B2%7D,%20..." align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Let's call this sequence of numbers C&lt;sub&gt;n&lt;/sub&gt;, so C&lt;sub&gt;0&lt;/sub&gt; = &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7B2%7D" align="middle" border="0" /&gt;, and so on. Notice that because of the way we're computing C&lt;sub&gt;n&lt;/sub&gt;, as n increases, C&lt;sub&gt;n&lt;/sub&gt; must approach 0. Notice too that all C&lt;sub&gt;n&lt;/sub&gt; are positive. Because of that pattern we had, subtracting twice one number from the previous to get the next, we get the formula&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20C_n%20=%20C_%7Bn-2%7D%20-%202*C_%7Bn-1%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;It gets a little funky at first, because the first subtraction just occurs once, but as every subtraction after occurs twice, that pattern is established.&lt;br /&gt;&lt;br /&gt;Next, imagine two sequences of integers, A&lt;sub&gt;n&lt;/sub&gt; and B&lt;sub&gt;n&lt;/sub&gt;. And we'll say that the following equation always holds.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7B2%7D*A_n%20+%201*B_n%20=%20C_n" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Looking at it that way, C&lt;sub&gt;n&lt;/sub&gt; is the sequence, in order, of positive linear combinations of 1 and root 2.&lt;br /&gt;&lt;br /&gt;Now, remember that as n increases, C&lt;sub&gt;n&lt;/sub&gt; goes to 0. This means that, at some distant future, we effectively have&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7B2%7D*A_n%20+%201*B_n%20=%200" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Manipulating, that gives us, as n increases&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Cfrac%7B-B_n%7D%7BA_n%7D%20=%20%5Csqrt%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;So if we can determine the sequences A&lt;sub&gt;n&lt;/sub&gt; and B&lt;sub&gt;n&lt;/sub&gt;, the limit of the ratio of those two values is the square root of 2.&lt;br /&gt;&lt;br /&gt;Neat.&lt;br /&gt;&lt;br /&gt;So, we have the formula&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20C_n%20=%20C_%7Bn-2%7D%20-%202*C_%7Bn-1%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;We can substitute in the A and B definition of C and do the following.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20C_n%20=%20C_%7Bn-2%7D%20-%202*C_%7Bn-1%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7B2%7D*A_n%20+%201*B_n%20=%20%28%5Csqrt%7B2%7D*A_%7Bn-2%7D%20+%201*B_%7Bn-2%7D%29%20-%202*%28%5Csqrt%7B2%7D*A_%7Bn-1%7D%20+%201*B_%7Bn-1%7D%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7B2%7D*A_n%20+%201*B_n%20=%20%5Csqrt%7B2%7D*A_%7Bn-2%7D%20+%201*B_%7Bn-2%7D%20-%202*%5Csqrt%7B2%7D*A_%7Bn-1%7D%20-%202*1*B_%7Bn-1%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7B2%7D*A_n%20+%201*B_n%20=%20%5Csqrt%7B2%7D*%7B%28A_%7Bn-2%7D%20-%202*A_%7Bn%20-%201%7D%29%7D%20+%201*%7B%28B_%7Bn-2%7D%20-%202*B_%7Bn-1%7D%29%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Grouping then gives us&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20A_n%20=%20A_%7Bn-2%7D%20-%202*A_%7Bn-1%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20B_n%20=%20B_%7Bn-2%7D%20-%202*B_%7Bn-1%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Familiar :) So now we have a formula for producing A's and B's. But to really calculate them, we need initial values as well. Looking at the C's we calculated, we can grab the first few values of A and B from the coefficients in C's. However, for those formula for A and B to apply, the similar formula needs to apply for C. This means we can only use values of C after the point where the double subtraction was already established, which occurs after &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Csqrt%7B2%7D%20-%201" align="middle" border="0" /&gt;. So we'll call that C&lt;sub&gt;0&lt;/sub&gt; for convenience.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20C_0%20=%20%5Csqrt%7B2%7D%20-%201;%20A_0%20=%201,%20B_0%20=%20-1" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20C_1%20=%203%20-%202*%5Csqrt%7B2%7D;%20A_1%20=%20-2,%20B_1%20=%203" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20C_2%20=%205*%5Csqrt%7B2%7D%20-%207;%20A_2%20=%205,%20B_2%20=%20-7" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;So now we have initial values! A&lt;sub&gt;0&lt;/sub&gt; = 1, A&lt;sub&gt;1&lt;/sub&gt; = -2. B&lt;sub&gt;0&lt;/sub&gt; = -1, B&lt;sub&gt;1&lt;/sub&gt; = 3. Using those initial values and the recurrence formula we worked out, we can now calculate successive values of each sequence. Here are the first ten of each.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;A&lt;sub&gt;n&lt;/sub&gt; = 1, -2, 5, -12, 29, -70, 169, -408, 985, -2378, 5741, ...&lt;br /&gt;&lt;br /&gt;B&lt;sub&gt;n&lt;/sub&gt; = -1, 3, -7, 17, -41, 99, -239, 577, -1393, 3363, -8119, ...&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Notice how the third values, 5 and -7, correspond to the next values we'd already worked out. Validation!&lt;br /&gt;&lt;br /&gt;And now the test, we look at -B&lt;sub&gt;n&lt;/sub&gt;/A&lt;sub&gt;n&lt;/sub&gt;.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Cfrac%7B-B_n%7D%7BA_n%7D" align="middle" border="0" /&gt; = 1., 1.5, 1.4, 1.41667, 1.41379, 1.41429, 1.4142, 1.41422, 1.41421, ...&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And that clearly is approaching the square root of two. Very neat. Very neat.&lt;br /&gt;&lt;br /&gt;One might even say ... fantastic :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-8729624735969312766?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/8729624735969312766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=8729624735969312766' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8729624735969312766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8729624735969312766'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/08/mixing-number-theories.html' title='Mixing Number Theories'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-606801992987881378</id><published>2007-08-05T00:33:00.000-04:00</published><updated>2007-08-05T00:50:01.101-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pictures'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Iterated Function Teaser</title><content type='html'>After MarkCC talked about &lt;a href=http://scienceblogs.com/goodmath/2007/08/iterated_function_systems_and_1.php&gt;iterated function systems&lt;/a&gt;, my curiosity was naturally piqued, as it usually is by pretty things. I'd read his post, though I think I'm going to make one of my own. Anyway, below is the traditional fern fractal produced by an IFS. Simple mathematical formula, very neat result.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_08B0rrzqpZ0/RrVUkSiyGUI/AAAAAAAAAKw/Rfqm4ssGNTE/s1600-h/Fern.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_08B0rrzqpZ0/RrVUkSiyGUI/AAAAAAAAAKw/Rfqm4ssGNTE/s400/Fern.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5095071535869335874" /&gt;&lt;/a&gt;&lt;br /&gt;I worked out a small java generator to dish out similar pictures based on random parameters. The one above is derived from very specific values, which makes me a little skeptical of its implications, but that's a thought for a later post.&lt;br /&gt;&lt;br /&gt;Here is another one I thought was kind of neat.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_08B0rrzqpZ0/RrVVICiyGVI/AAAAAAAAAK4/YQzbzci4CpA/s1600-h/RandomFractal2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_08B0rrzqpZ0/RrVVICiyGVI/AAAAAAAAAK4/YQzbzci4CpA/s400/RandomFractal2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5095072150049659218" /&gt;&lt;/a&gt;&lt;br /&gt;Generated at random, there's much less specific structure as with the leaf fractal. However, there seems to be a definite star pattern. Also, if you examine the picture, the star pattern seems to be repeated, at different orientations in the picture. To me, it almost looks like there are several similar 'stars' in space, and this picture is a projection of the three dimensional figure. Which is interesting.&lt;br /&gt;&lt;br /&gt;Now, none of this ought to make sense just yet, but the above images were generated with /linear/ iterated function systems. I'm much more of a non-linear sort of fox, so below is a randomly generated non-linear system, with degree two polynomials.&lt;br /&gt;&lt;br /&gt;But it looks neat, and that's the important thing.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_08B0rrzqpZ0/RrVWmSiyGWI/AAAAAAAAALA/rtWntowb8og/s1600-h/RandomFractalD2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_08B0rrzqpZ0/RrVWmSiyGWI/AAAAAAAAALA/rtWntowb8og/s400/RandomFractalD2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5095073769252329826" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Notice the way that in the linear cases as above, we largely are dealing with lines. Go figure. But introduce a non-linear, specifically quadratic element, and we get those neat curves.&lt;br /&gt;&lt;br /&gt;Anyway. Maybe I'll do some real math with this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-606801992987881378?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/606801992987881378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=606801992987881378' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/606801992987881378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/606801992987881378'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/08/iterated-function-teaser.html' title='Iterated Function Teaser'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_08B0rrzqpZ0/RrVUkSiyGUI/AAAAAAAAAKw/Rfqm4ssGNTE/s72-c/Fern.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-1508220977640079715</id><published>2007-08-02T23:48:00.000-04:00</published><updated>2007-08-02T23:49:30.861-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Problems'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Time for a Math Problem</title><content type='html'>&lt;center&gt;&lt;br /&gt;4 + 2 = 8&lt;br /&gt;&lt;br /&gt;7 + 3 = 3&lt;br /&gt;&lt;br /&gt;7 + 4 = 9&lt;br /&gt;&lt;br /&gt;6 + 7 = 8&lt;br /&gt;&lt;br /&gt;1 + 1 = 1&lt;br /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-1508220977640079715?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/1508220977640079715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=1508220977640079715' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1508220977640079715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1508220977640079715'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/08/time-for-math-problem.html' title='Time for a Math Problem'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-474654935547142657</id><published>2007-07-31T00:02:00.000-04:00</published><updated>2007-08-01T17:09:17.195-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Problems'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Sultan's Dowry</title><content type='html'>So, a sultan has 100 daughters. When telling this problem to your friends, be sure to enunciate properly, lest they think the sultan has 100 'dollars'. What kind of sultan only has 100 dollars? A rather puny one, I must say.&lt;br /&gt;&lt;br /&gt;But he has 100 daughters, and he is going to allow a commoner to marry one of them. Of course, as always is the case in such things, there is a catch. The commoner is shown each daughter, one at a time. Each time he has the option of choosing that daughter, or moving on to the next one. Once he passes a daughter, he cannot go back and pick her. Now, each daughter has a randomly assigned dowry, and the catch is this. Each time the commoner is presented with a daughter, he is told the value of her dowry, and the commoner can only marry the daughter of his choice if he choses the daughter with the highest dowry. Elsewise, he is tortured to death.&lt;br /&gt;&lt;br /&gt;So the question is, what can the commoner do to increase his probability of choosing the correct daughter, and what is the best probability he can achieve?&lt;br /&gt;&lt;br /&gt;And if that doesn't float your boat, here's a video of &lt;a href="http://fazed.net/video/view/?id=740"&gt;a puppy fighting a kitten&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now, the commoner could just randomly stop and pick a daughter. In that case, he has a 1/100 chance of getting the correct daughter and not dying. Which sucks. What you need is more information, and the only information to be had is by finding out the values of successive daughter's dowries. That being so, the best strategy seems to be allowing some number of daughters to pass and /not/ choose from them. This gives you a pool of dowry values to compare from. Once you let that many daughters by, choose the next daughter with the dowry higher than all the dowries you've seen. We'll assume that this is the strategy you go with.&lt;br /&gt;&lt;br /&gt;That being so, we need to determine the number of daughters to let pass to achieve the maximum probability of winning. If you let too many daughters pass, that increases the chance you let the daughter with the highest dowry pass. But too few daughters let by, and you will decrease the probability of seeing a high enough dowry to make a difference. So, how many daughters do you let by?&lt;br /&gt;&lt;br /&gt;We'll say he lets n many daughters by. Of those n, he has seen the m'th highest dowry. This means that there are 100 - n dowries remaining, but only 100 - m /higher/ dowries, one of which will be the 100th, the highest dowry. However many dowries are left, the only thing that matters is the order in which the higher dowries are presented, because the commoner will pick the first of those he sees. The probability that the 100th, highest, dowry will be presented first is 1/(100 - m). But, that requires that m be the highest dowry seen. So, what is the probability that m is the highest dowry seen?&lt;br /&gt;&lt;br /&gt;For m to be the highest dowry seen, a number of things must happen. One, m must be seen. Two, no dowry higher than m can be seen. Now, the probability that any one number is seen is n/100. That means the probability that a number is not seen is 1 - n/100.  So the probability that m is the highest seen is the product of the probabilities that m is seen and all higher dowries are not seen. There are 100 - m higher dowries, so the total probability that m is the highest dowry seen is&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28%5Cfrac%7Bn%7D%7B100%7D%29%7B%281%20-%20%5Cfrac%7Bn%7D%7B100%7D%29%7D%5E%7B100%20-%20m%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Now, the probability that m is the highest dowry seen and the 100th dowry is presented first of the remaining higher dowries (thus letting the commoner win) is&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28%5Cfrac%7Bn%7D%7B100%7D%29%20%7B%281%20-%20%5Cfrac%7Bn%7D%7B100%7D%29%7D%5E%7B100%20-%20m%7D%20%28%5Cfrac%7B1%7D%7B100%20-%20m%7D%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;However, m could be many values. For any value of m, the formula above gives the probability of winning. The total probability of winning, though, is going to be the sum of that formula for all possible values of m. The probability of at least one of two events occurring is the sum of the probability of each individual event occurring. We know at least one value of m will occur, so we sum over all possible values of m.&lt;br /&gt;&lt;br /&gt;But the possible values of m depend on n. If n many daughters are chosen, the least 'maximum' dowry seen is the 'nth' dowry. The greatest 'maximum' dowry is the 100th dowry. So possible values of m run from n to 100. However, if m = 100, you have no chance of winning, so that would be like adding 0 to your sum, and we can just discard it. This gives us a total probability function in terms of n, the number of daughters you allow to pass.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20P%28n%29%20=%20%5Csum_%7Bm%20=%20n%7D%5E%7B99%7D%20%28%5Cfrac%7Bn%7D%7B100%7D%29%7B%281%20-%20%5Cfrac%7Bn%7D%7B100%7D%29%7D%5E%7B100%20-%20m%7D%20%28%5Cfrac%7B1%7D%7B100%20-%20m%7D%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;That right there is enough to solve the problem. Jumping into Mathematica and plotting the function for all n from 1 to 99,&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_08B0rrzqpZ0/RrC-sSiyGSI/AAAAAAAAAKg/GbHmW0wZF04/s1600-h/dowryPlot100.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_08B0rrzqpZ0/RrC-sSiyGSI/AAAAAAAAAKg/GbHmW0wZF04/s400/dowryPlot100.JPG" alt="" id="BLOGGER_PHOTO_ID_5093780846657280290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Clearly the function reaches a maximum around n = 40. Calculating p(n) for n = 35, 36, 37, 38, 39, 40, we get&lt;br /&gt;&lt;center&gt;&lt;br /&gt;{0.367438, 0.367794, 0.367873, 0.367682, 0.367227, 0.366516}&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Clearly the maximum is reached at n = 37, giving a maximum probability of winning of 36.79%.&lt;br /&gt;&lt;br /&gt;And I think that is quite cool. You've raised your probability of winning and not being tortured to death from 1/100 to greater than 1/3, which I find quite neat.&lt;br /&gt;&lt;br /&gt;However, that was all a little aproximatura there. The problem is that the probability function, as a summation, doesn't really converge to anything convenient. What this means is that we can't really calculate the 'exact' maximum, at least not by traditional means, because it's not an analytic function. But, with a little goofing around ...&lt;br /&gt;&lt;br /&gt;First, let's be a little more precise. I would like to do is clean up that function a little. For example, we can change the bounds of the summation. Also, the n/100 factor does not depend on m, so we can pull it out of the summation.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20P%28n%29%20=%20%28%5Cfrac%7Bn%7D%7B100%7D%29%20%5Csum_%7Bm%20=%201%7D%5E%7B100%20-%20n%7D%20%7B%281%20-%20%5Cfrac%7Bn%7D%7B100%7D%29%7D%5Em%28%5Cfrac%7B1%7D%7Bm%7D%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Next thing, instead of thinking in terms of how many daughters I want to let pass, I would rather think of in terms of what fraction of the whole population of the daughters I would like to let pass. So, we'll replace n/100 with a general value 'a' between 0 and 1, and replace all values of n with a.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20P%28a%29%20=%20%28a%29%20%5Csum_%7Bm%20=%201%7D%5E%7B100%20-%20100*a%7D%20%7B%281%20-%20a%29%7D%5Em%28%5Cfrac%7B1%7D%7Bm%7D%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And for maximum generality, let's not limit ourselves to a population of 100 daughters. We'll say the sultan has N many daughters.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20P%28a%29%20=%20%28a%29%20%5Csum_%7Bm%20=%201%7D%5E%7BN*%281%20-%20a%29%7D%20%7B%281%20-%20a%29%7D%5Em%28%5Cfrac%7B1%7D%7Bm%7D%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Now, this part is a little fuzzy. Consider two different values of N. The total number of daughters you let pass in each case is different, but it's clear to me at least that the fraction you let pass is the same. All cases are really 'proportional' to each other. You wouldn't let 37% of 100 daughters pass, but let 56% of 1000 daughters pass. My point is that the value of optimal value of a, the fraction you let pass, remains the same for all values of N.&lt;br /&gt;&lt;br /&gt;So let's think about what happens as N approaches infinity. In that case, the upper limit of the summation, N*(1 - a), also approaches infinity, as long as a does not equal 1, which we know would be silly. So in the case of an infinite number of daughters, we have the following.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20P%28a%29%20=%20%28a%29%20%5Csum_%7Bm%20=%201%7D%5E%5Cinfty%20%7B%281%20-%20a%29%7D%5Em%28%5Cfrac%7B1%7D%7Bm%7D%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And that is a power series. Specifically, it's a series of the form&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csum_%7Bi%20=%201%7D%5E%5Cinfty%20%5Cfrac%7Bx%5Ei%7D%7Bi%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Which is the &lt;a href="http://mathworld.wolfram.com/MaclaurinSeries.html"&gt;Maclaurin Series&lt;/a&gt; for -Log(1 - x). Performing the substitution,&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20P%28a%29%20=%20%28a%29%20%5Csum_%7Bm%20=%201%7D%5E%5Cinfty%20%7B%281%20-%20a%29%7D%5Em%28%5Cfrac%7B1%7D%7Bm%7D%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20P%28a%29%20=%20%28a%29%20%28-Log%281%20-%20%281%20-%20a%29%29%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20P%28a%29%20=%20-a*Log%28a%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And that is quite the neat little function! Plotting it below,&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_08B0rrzqpZ0/RrDKHyiyGTI/AAAAAAAAAKo/a5EM68Vro78/s1600-h/dowryPlotSmooth.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_08B0rrzqpZ0/RrDKHyiyGTI/AAAAAAAAAKo/a5EM68Vro78/s400/dowryPlotSmooth.JPG" alt="" id="BLOGGER_PHOTO_ID_5093793413731588402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Notice the similarity between this curve and the points we plotted above. Finite population sizes, like N = 100 far above, all approximate the infinite case shown here.&lt;br /&gt;&lt;br /&gt;And now that we have a smooth function, we can differentiate it, and find the maximum point. To refresh, the maxima and minima of functions occur when the derivative of the function is 0. Clearly above, we have no minima. Differentiating,&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Cfrac%7Bd%7D%7Bda%7D%28%20-a*Log%28a%29%20%29%20=%20-a*%5Cfrac%7B1%7D%7Ba%7D%20-%20Log%28a%29%20%20=%200" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20-1%20-%20Log%28a%29%20=%200" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20Log%28a%29%20=%20-1" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20a%20=%20%5Cfrac%7B1%7D%7Be%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And there you have it. You should allow 1/e of the daughters to pass. 1/e = 0.367879... Going back to the 100 daughter example, this means we should let 36.7 daughters, or rather 37 daughters to pass, which is what we determined. And plugging 1/e into the probability function, P(1/e) = -(1/e)Log(1/e) = -(1/e)(-1) = 1/e. So, the maximum probability of winning you can achieve is 1/e, which means that, at best, you have a 36.7879% chance of winning. Which is interesting. It's all very interesting.&lt;br /&gt;&lt;br /&gt;And there you have it. 1/e. Go figure.&lt;br /&gt;&lt;br /&gt;An interesting problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-474654935547142657?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/474654935547142657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=474654935547142657' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/474654935547142657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/474654935547142657'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/sultans-dowry.html' title='Sultan&apos;s Dowry'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_08B0rrzqpZ0/RrC-sSiyGSI/AAAAAAAAAKg/GbHmW0wZF04/s72-c/dowryPlot100.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-236336252107686015</id><published>2007-07-29T16:44:00.000-04:00</published><updated>2007-07-29T16:45:37.744-04:00</updated><title type='text'>Software Innovation and MegaTexture</title><content type='html'>(Cross-posted at &lt;a href="http://canofpowerup.blogspot.com/2007/07/software-innovation-and-megatexture.html"&gt;PowerUp&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/John_Carmack"&gt;John Carmack&lt;/a&gt; has always been a fascinating figure to me. As a kid I'd eat up interviews with him in publications like &lt;i&gt;PC Gamer&lt;/i&gt;, as I was a huge FPS phreak who was intensely interested in programming. He was the kind of guy I'd look up to and say "man, I want HIS job!"&lt;br /&gt;&lt;br /&gt;For those who need an introduction, Carmack is the legendary game developer behind &lt;i&gt;Wolfenstein&lt;/i&gt;, &lt;i&gt;Doom&lt;/i&gt; and &lt;i&gt;Quake&lt;/i&gt; (among other titles). He's not only an interesting figure because of his role in inventing the first person shooter, but for his role in pioneering or even inventing graphics algorithms and rendering techniques for his games. A great example would be his &lt;a href="http://www.bluesnews.com/abrash/chap68.shtml"&gt;surface caching&lt;/a&gt; technique, which was what made rendering fully polygonal real-time graphics possible on the original Pentium chips (back before they had even reached the 100 MHz mark).  Before hardware rendering (back then extraneous enough to be referred to as "acceleration") and libraries like the now defunct Glide were in widespread use, real-time 3D rendering was only considered possible with "pseudo-3D" techniques. If you're familiar with the old FPSs like &lt;span style="font-style:italic;"&gt;Doom&lt;/span&gt; and &lt;span style="font-style:italic;"&gt;Duke Nukem 3D&lt;/span&gt;, you'll notice that almost all the secondary objects in the maps were actually 2D, which included the enemies. This was because rendering in true-3D involved some pretty significant resource overhead. Two of the biggest hurdles Carmack faced when developing &lt;span style="font-style:italic;"&gt;Quake&lt;/span&gt; were calculating what polygons on the character models were visible to the player and how surfaces would be lighted.&lt;br /&gt;&lt;br /&gt;Surface caching was a technique Carmack invented to solve the latter. In traditional real-time rendering models, the lighting of surfaces was calculated from the vantage point of the player. That meant that everytime the player changed their position with respect to a visible surface, all the lighting data would have to be recalculated and rendered again. That sort of resource expenditure adds up, and would have been impossible to achieve on most desktop-level hardware in 1995. So what did Carmack do? He simply used a static lighting model, where the lighting of the surface would be pre-configured and the data would be stored in a cache for retrieval whenever the surface was visible from the player's vantage point. Yes, it's simple. So simple that it makes you go "Man, why didn't I think of that?"&lt;br /&gt;&lt;br /&gt;It's kind of funny, because Carmack's new technique, which debuted in &lt;span style="font-style:italic;"&gt;Enemy Territory: Quake Wars&lt;/span&gt;, gives you that same reaction. &lt;span style="font-style:italic;"&gt;ET: Quake Wars&lt;/span&gt; uses the &lt;span style="font-style:italic;"&gt;Doom 3&lt;/span&gt; engine for a mostly outdoor &lt;span style="font-style:italic;"&gt;Team Fortress/Counterstrike&lt;/span&gt; style multiplayer FPS. Now, one of the technical hurdles was obvious to anyone familiar with the &lt;span style="font-style:italic;"&gt;Doom 3&lt;/span&gt; engine: it simply was not well suited to rendering large outdoor environments. If you play &lt;span style="font-style:italic;"&gt;Doom 3&lt;/span&gt;, you'll notice that all of the outdoor environments were small, enclosed canyon-style spaces. The &lt;span style="font-style:italic;"&gt;Doom 3&lt;/span&gt; engine was quite a technical accomplishment in it's own right, and was really the first to develop a true global illumination model (i.e., unite how lighting and shadows interacted with all the surfaces in the game). But rendering large outdoor environments would have been extremely taxing with the typical methods, almost all of which involve fragmenting the mesh and swapping out low-res and high-res versions depending on where the player is located. So what does John Carmack do? He &lt;a href="http://www.gamerwithin.com/?view=article&amp;article=1319&amp;cat=2"&gt;invents MegaTexture&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;MegaTexture technology is something that addresses resource limitations in one particular aspect of graphics. The core idea of it is that when you start looking at outdoor rendering and how you want to do terrain and things in general, people almost always wind up with some kind of cross-fade blended approach where you tile your textures over and blend between them and add little bits of detail here and there. A really important thing to realize about just generally tiling textures, that we’re so used to accepting it in games, is that when you have one repeated pattern over a bunch of geometry, the texture tiling and repeating is really just a very, very specialized form of data compression where it’s allowing you to take a smaller amount of data and have it replicated over multiple surfaces, or multiple parts of the same surface in a game since you generally don’t have enough memory to be able to have the exact texture that you’d like everywhere.&lt;br /&gt;&lt;br /&gt;......&lt;br /&gt;&lt;br /&gt;So when Splash Damage was starting on, really early with Enemy Territory: QUAKE Wars, they were looking at some of these different ways to render the outdoor scenes with different blends and things like that. And one of my early suggestions to them was that they consider looking at an approach where you just use one monumentally large texture, and that turned out to be 32,000 by 32,000. And I – rather then doing it by the conventional way that you would approach something like this (i.e. – chopping up the geometry into different pieces and mapping different textures on to there and incrementally swapping them for low res versus high res versions), just let them treat one uniform geometry mesh and have this effectively unbounded texture side on there, and use a more complicated fragment program to go ahead and pick out exactly what should be on there, just as if the graphics hardware and the system really did support such a huge texture.&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;It's simple, really. Take a huge texture and stick on the hard-drive, and use your freed up memory resources to create a more complex fragmenting program to spool it as needed. Not only does it allow the game to overcome the limitations of the &lt;span style="font-style:italic;"&gt;Doom 3&lt;/span&gt; engine, it makes outdoor environments look better and generate more variety than what would be possible in the standard model.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;This is really an example of how in-the-box thinking often harms software innovation. Another good example is the file-system. Just about every operating system uses the descending hierarchical subclass system that originated in BSD Unix in the 70's, and files themselves are almost treated as prime-numbers are in mathematics. Most people are surprised to learn that files were once controversial, because of the obvious issue of incompatible file formats that would inevtitably lead to technology driven monopolies. But files became the standard model because, well, everyone started using them. Not only BSD and System V, but DOS, GNU/Linux and then Windows. Is there a better model? I'm not sure, but most seem to simply accept it as a given.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-236336252107686015?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/236336252107686015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=236336252107686015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/236336252107686015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/236336252107686015'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/software-innovation-and-megatexture.html' title='Software Innovation and MegaTexture'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-1217177545163809525</id><published>2007-07-29T11:37:00.001-04:00</published><updated>2007-07-29T12:04:28.175-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><category scheme='http://www.blogger.com/atom/ns#' term='Politics'/><title type='text'>I Hate Statistics</title><content type='html'>&lt;a href=http://scienceblogs.com/dispatches/2007/07/false_comparison_of_military_d.php&gt;Ed Brayton&lt;/a&gt; and &lt;a href=http://scienceblogs.com/authority/2007/07/lying_with_math.php&gt;Mike Dunford&lt;/a&gt; recently picked up a little tidbit you might not have noticed. Apparently the big thing now is to compare military deaths under Clinton to military deaths under Bush. As &lt;a href=http://sayanythingblog.com/entry/active_duty_deaths_bush_vs_clinton/&gt;one blog does&lt;/a&gt;, we get the following.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Active duty deaths during Clinton's first four years (1993 - 1996): 4302&lt;br /&gt;&lt;br /&gt;Active duty deaths during Bush's first four years (2001 - 2004): 5187&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;See, nothing serious right? Only 885 more deaths under Bush, and Clinton didn't even have to fight two wars!&lt;br /&gt;&lt;br /&gt;Of course, there are a multitude of things wrong with this. Number one, it doesn't discuss causes of deaths. You're comparing natural/accidental deaths to combat deaths. More importantly though, it doesn't take into account the size of the military at the time - the deaths need to be viewed as a proportion to the whole population.&lt;br /&gt;&lt;br /&gt;Mike Dunford does all the hard work, research and recalculation, and produces the following graph from &lt;a href=http://siadapp.dmdc.osd.mil/personnel/CASUALTY/Death_Rates.pdf&gt;this pentagon source&lt;/a&gt;.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://scienceblogs.com/authority/200707282236.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px;" src="http://scienceblogs.com/authority/200707282236.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This includes everything, combat deaths, even deaths deaths during annual training, since that is counted as an active duty death. As you can clearly see, we've been having a massive decline in the military death rate from the 1980's to about 2000. I'm not really up on my history, but a brief visit to &lt;a href=http://en.wikipedia.org/wiki/List_of_United_States_military_history_events#1980-1990&gt;Wikipedia&lt;/a&gt; seems to indicate the bump around 1991 is probably attributable to the gulf war - understandable. And right around the time Bush took office up to now, we see a massive surge in the death rate, unlike anything in the last 20 years.&lt;br /&gt;&lt;br /&gt;Now, this surge can no doubt be attributed to the wars we are currently fighting. There's little mystery there. It is understandable that a war will lead to increased casualties - few would argue that. What makes this significant is the way people will and apparently have used these numbers to lie in support of the president and his policies. I find this absolutely reprehensible. And we've seen this sort of thing before. About a year ago, I believe it was Rush Limbaugh who ran a graphic on his website, comparing the number of deaths in Iraq to the number of deaths by automobile accidents in the US. Of course the number of automobile deaths was staggeringly high in comparison - until you look at the deaths in comparison to the size of the population. With 250 million Americans, the number of soldiers in Iraq is minuscule in comparison, and the death rate in Iraq was revealed to be almost 22 times greater than the automobile related death rate. Again we see the right's willingness to lie and distort and take advantage of the deaths of Americans to support their cause.&lt;br /&gt;&lt;br /&gt;Is it hyperbole to say they are taking advantage of these deaths for their own means? Perhaps. But this is one of the things that most rubs me the wrong way, bad math aside - whatever the cause, soldiers are dying. And instead of trying to address that, the people in charge and their supporters are manipulating the data to try to maintain their control and the status quo. Soldiers are dying. Soldiers are being killed and wounded, mentally and physically, every day, and they quibble over numbers and blame. Yes accidents occur, and yes casualties are expected in war time. However ... I don't think I can end this any better than Mike Dunford himself, who's wife is in the army.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;We have a responsibility to do our best to keep the active duty troops from dying unnecessarily. During peacetime, that means making sure that training and day-to-day operations are as safe as they can reasonably be, and that accidents are prevented whenever possible. During wartime, it means that we should do our best to make sure that the fight is necessary, that the goals are achievable, and that there is a well-thought-out and feasible strategy in place.&lt;br /&gt;&lt;br /&gt;The current battle in Iraq meets exactly none of those criteria. &lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-1217177545163809525?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/1217177545163809525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=1217177545163809525' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1217177545163809525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1217177545163809525'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/i-hate-statistics.html' title='I Hate Statistics'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-6430514007705924464</id><published>2007-07-29T01:43:00.000-04:00</published><updated>2007-07-29T01:44:46.856-04:00</updated><title type='text'>Dog Bites Man; Michael Reagan Bleats Inanely</title><content type='html'>(Cross-posted over at my new solo blog, &lt;a href="http://canofpowerup.blogspot.com/2007/07/dog-bites-man-michael-reagan-bleats.html"&gt;PowerUp&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://scienceavenger.blogspot.com/2007/07/michael-reagan-is-very-confused.html"&gt;Science Avenger&lt;/a&gt; takes conservative flak Michael Reagan to task for a &lt;a href="http://www.townhall.com/columnists/MichaelReagan/2007/07/12/a_culture_war_of_words"&gt;particularly inane column&lt;/a&gt; at Townhall dot com. Now, "inane column" and "Townhall dot com" are two phrases that can seldom be separated, but this one reaches some uncharted lows. Just look at the opening paragraph:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;If anybody doubts America is engaged in a culture war and losing it they need only to take a look at the series of concerts promoting Al Gore’s global warming hoax last weekend. They would have learned that the war is being waged in the sewers.&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;I don't get this kind of rhetoric. I see it a lot, but I don't get how can it even make sense to anyone. America is engaged in a culture war, and losing it. So American culture is fighting itself, and losing? Is this like that Monty Python sketch with the guy who wrestles himself?&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In reality conservatives are simply whining and complaining that cultural mores in America are changing and further chipping away at the hegemony they've enjoyed over said culture for so long. For a long time in this country, cultural supremacy was considered the birthright of Anglo-American Christian males. Traversing the timeline from slavery to Native American genocide to Woodrow Wilson's delirious rants against "hyphenated Americans" to segregation to womens' liberation and beyond, there has been a constant struggle for societal underclasses to achieve equality. Conservatives look with nostalgia at their Norman Rockwell caricature of America because they see all the right colors: white family, white picket fence and not a single distrubance to any of that unformity in sight.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;And as for the ridiculous ejaculation about "Al Gore's global warming hoax", well, the stupidity of that should speak for itself (hint to the tards: Al Gore had virtually nothing to do with hashing out the consensus of global warming, climate researchers did that over decades). I think Al Gore has effectively cemented his position as the Rachel Carson of anthropogenic global warming. Wouldn't be surprised 20 years down the road to hear how Al Gore was worse than Hitler from the same folks currently spouting such frenzied silliness about Carson.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Reagan then goes on a long rant about the use of the "F word" by the "Whole Earth" concert performers. His argument only gets more incomprehensibly stupid and myopic. Just look at this paragraph:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;I went to a lot of concerts years ago. I never heard Frank Sinatra or any other performer use a single obscenity during their performances. Moreover, if any of them had uttered anything as foul as the “F” word, they would have been driven off the stage.&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;I can't do any better at disposing of this little bit of nonsense than Science Avenger himself:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;Let's remind him that back in the "good ol days", instead of hearing "fuck" on the stage, what many heard was "get these niggers to their proper seats away from the decent white folks". Pardon us for preferring things the way they are now.&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Bingo. If Michael Reagan is so nostalgic for the "civility" he sees in his Ozzy and Harriet version of post-war America, maybe we can find some way for him to assume the role of a Black man, or an Italian or Irish immigrant, or anyone who was known to have Native American ancestry, or many others. He might not be so convinced that the "civility" he envisions wasn't vaslty overrated.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Along the way, we come across this little gem:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;That’s no longer true. Comedians vie with each other to use the most extreme obscenities and sexual innuendos. What was once called “street language” is now considered normal discourse. Things once considered sacred are now seen as commonplace. Sex is no longer an expression of love between a man and a woman – today it’s seen as recreation, like a game of golf, to be portrayed on stage and screen without restraint.&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Oh please, not this nonsense again! It's kind of funny how the first instinct among pedestrian conservatives like Reagan is to completely exclude the middle. Almost everyone recognizes that rampant sex with no restraint is probably an unhealthy activity and generally a bad idea. What most sexual liberals would argue, however, is that someone shouldn't feel ashamed for enjoying what is one of the most natural and fulfilling aspect of the human condition: their sexuality. To use an analogy, everyone knows binge-eating is unhealthy, but that doesn't mean one can't take pleasure in tasty dishes in moderation. And the analogy is quite apt, since many ascetic religious traditions forbid their adherents from enjoying food in addition to sex. Self-denial in matters of sex can be just as damaging as unrestrained promoscuity.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;As well, I love how he only allows it to be "an expression of love between a man and a woman". That's a very recent notion that Mikey Reagan is trying to shoehorn into his own antebellum American fanatsy-land. Back when women were essentially considered property, sex was usually an expression of the man's &lt;i&gt;ownership&lt;/i&gt; of the woman. Sex almost never had anything to do with a woman's own pleasure or emotional satisfaction. And I needn't mention, but will do so regardless, that sex can express love between two men and/or women just as well as between a scalar man and woman.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;And here's the grand finale:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;That’s what’s at stake in the culture wars. A society bereft of standards that demand civilized behavior among its people is a society where the individual is deemed worthless as being anything but a consumer for the degraded wares of the smut peddlers and a source of income to pay for the schemes of those who sell Marxist snake oil such as global warming as a means of subjugating the populace.&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Kind of funny, that. America is known for it's excessive consumerism, yet is also by far the most laissez-faire among the Western nations and the developed aspects of the Orient. Simply put, consumerism is a result of the capitalist free enterprise system that conservatives have been ideologically boosting since the New Deal spawned the original reactionaries from whom they are descended (that's when America began it's long decline into socialism, a result that has strangely failed to come to fruition). And you have to love the bit about "Marxist snake oil" in reference to global warming. It's a &lt;strike&gt;JEWISH&lt;/strike&gt; SOCIALIST CONSPIRACY. Classic crankey from a long-time crank.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-6430514007705924464?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/6430514007705924464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=6430514007705924464' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/6430514007705924464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/6430514007705924464'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/dog-bites-man-michael-reagan-bleats.html' title='Dog Bites Man; Michael Reagan Bleats Inanely'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-8183764520541883765</id><published>2007-07-25T22:06:00.001-04:00</published><updated>2007-07-25T22:09:39.467-04:00</updated><title type='text'>Putting the Ixnay on the Blog Move</title><content type='html'>Well, it's been a while now that I've been looking at hosting plans for the blog. The only problem is that I've gradually lost my enthusiasm for it. So for now the basic plan to move it to my own host is nixed.&lt;br /&gt;&lt;br /&gt;Among other reasons for losing my general enthusiasm for the move has been the fact that I haven't even been managing to make regular updates lately, so paying monthly charges started to seem more and more like overkill.&lt;br /&gt;&lt;br /&gt;Blogger is good for now, so I'm staying here. And I'll try harder to post interesting content.&lt;br /&gt;&lt;br /&gt;That is all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-8183764520541883765?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/8183764520541883765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=8183764520541883765' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8183764520541883765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8183764520541883765'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/putting-ixnay-on-blog-move.html' title='Putting the Ixnay on the Blog Move'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-8113582624759595222</id><published>2007-07-19T12:09:00.000-04:00</published><updated>2007-07-19T12:15:08.713-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pictures'/><category scheme='http://www.blogger.com/atom/ns#' term='Time Travel'/><title type='text'>Lazy Fox</title><content type='html'>That damnably lazy fox is &lt;a href=http://foxmath.blogspot.com/2007/07/roadtrip-and-summers-end.html&gt;running off again&lt;/a&gt;. I swear, it's like ... Zoom! Doosh! Bwee! Moople! with him. Tyler's good to put up with it!&lt;br /&gt;&lt;br /&gt;Until he's back then ... I shall leave these three to entertain you.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://mfrost.typepad.com/photos/uncategorized/2007/07/13/345_2070627l332500.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px;" src="http://mfrost.typepad.com/photos/uncategorized/2007/07/13/345_2070627l332500.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Yerf ^.^&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-8113582624759595222?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/8113582624759595222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=8113582624759595222' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8113582624759595222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8113582624759595222'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/lazy-fox.html' title='Lazy Fox'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-3540081445011951152</id><published>2007-07-18T02:04:00.000-04:00</published><updated>2007-07-18T02:10:08.947-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Problems'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>LoopBrot</title><content type='html'>Now this is just beautiful. Fantastic. Check it out. We've taken the &lt;a href=http://2.bp.blogspot.com/_08B0rrzqpZ0/RpmETDNKI_I/AAAAAAAAAJ8/nrpbB3AIBOU/s1600-h/Plot1.jpg&gt;Mandelbrot Fractal&lt;/a&gt;, and overlaid on it in white the &lt;a href=http://4.bp.blogspot.com/_08B0rrzqpZ0/RpRR_kLr_YI/AAAAAAAAAJ0/EqWBnlHpy-0/s1600-h/FoxelBrot.JPG&gt;FoxelBrot&lt;/a&gt; image. To refresh, the FoxelBrot is composed only of the values in the Mandelbrot Set that form &lt;a href=http://foxmath.blogspot.com/2007/07/magical-world-of-torblednam.html&gt;loops in Mandelbrot Function&lt;/a&gt;. It's all very clever.&lt;br /&gt;&lt;br /&gt;But, overlaying the two, we can see what significance those points play in the larger scheme of the fractal!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_08B0rrzqpZ0/Rp2uUjNKJAI/AAAAAAAAAKE/PJ87_VKoF-o/s1600-h/Skeleplot.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_08B0rrzqpZ0/Rp2uUjNKJAI/AAAAAAAAAKE/PJ87_VKoF-o/s400/Skeleplot.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5088414822069576706" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Click for a larger image! The looping points are the white dots amidst the black. They may not show up on the shrunken version, so click for the larger. It's quite clear what the looping points are - the centers of all the lobes, everywhere :) What a fascinating result. Just beautiful.&lt;br /&gt;&lt;br /&gt;Fantastic!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-3540081445011951152?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/3540081445011951152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=3540081445011951152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/3540081445011951152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/3540081445011951152'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/loopbrot.html' title='LoopBrot'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_08B0rrzqpZ0/Rp2uUjNKJAI/AAAAAAAAAKE/PJ87_VKoF-o/s72-c/Skeleplot.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-1221539939240790983</id><published>2007-07-17T19:11:00.000-04:00</published><updated>2007-07-17T19:25:22.646-04:00</updated><title type='text'>Can't Keep My Eyes Open</title><content type='html'>I said I'd do some things here after I got home from work, but it turns out that from work I had to do a bunch of bullshit at Lowe's that had me out for an extra hour. Now I'm tired, groggy and most importantly I don't the full presence of mind. &lt;strike&gt;So for now, here are a couple of montages of Mortal Kombat fatalities. The first spans the first and second iterations of the game, the second spans the third as well as &lt;span style="font-style: italic;"&gt;Trilogy&lt;/span&gt;. Mortal Kombat is serious w00tsauce.&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;UPDATE:&lt;/span&gt; I've removed the filler I initially put in this post out of respect to Foxy (it was probably inappropriate). &lt;a href="http://foxmath.blogspot.com/2007/07/quiet.html"&gt;A loved one has died&lt;/a&gt;, and I think he'd appreciate your condolences.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-1221539939240790983?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/1221539939240790983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=1221539939240790983' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1221539939240790983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1221539939240790983'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/cant-keep-my-eyes-open.html' title='Can&apos;t Keep My Eyes Open'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-5554408326058800311</id><published>2007-07-16T18:25:00.000-04:00</published><updated>2007-07-16T19:03:14.680-04:00</updated><title type='text'>Latest Comments on the Atheism Wars</title><content type='html'>John Wilkins has a &lt;a href="http://scienceblogs.com/evolvingthoughts/2007/07/religion_and_science.php"&gt;characteristically very interesting post&lt;/a&gt; up on the science versus religion kerfuffle on SciBlogs, and of course I have to give my objections. I'll start with this statement:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Science is a process undertaken by human beings. Religion is also a process undertaken by human beings. They are conceptually distinct, but human beings are not driven by conceptual niceties. Rather than seeing religion and science as isolated endeavours, or as the same thing, it is best to expect that science and religion will have their own domains but that these domains will occasionally overlap.&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Of course we can all agree that humans are not driven by conceptual niceties. Hashing them out is a difficult and often tedious process that hardly comes "naturally" to primates of the homo sapiens sapiens variety. But even acknowledging that, we can see that there is really a flaw in using this fact to argue John's case: even if humans are not by nature (or more precisely, cognitive architecture) driven by abstraction and conceptualism, in principle, we should be. If we can agree that science is more reliable when it comes to rendering an objective picture of reality than religion, we also agree by consequence that our innate cognitive propensities to the contrary are insufficient and should be resisted.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I also take issue with John's statements about religion's proper role. People constantly speak of such a thing, but I have yet to see someone expound a useful application of religion that cannot be fulfilled at least equally well by a secular institution. I think the religion that John has in mind when making arguments of these sorts is very different from the religion in my mind or the majority of the religious. At least in it's predominant varieties around the world, religion is useless unless certain postulates it claims as canonical are true. Christianity is nothing but a reformed Judaism without the ressurection, and Judaism in turn is nothing but deism without certain assumptions regarding covenants and other things. John, as someone non-religious, seems to boil it down to banal mundanities like creativity, ingenuity and a sense of connection and belonging. If one wants to argue that religion is great in part because of the art it has historically inspired, I'll partially agree. Burning away the entire influence of religion in culture would result in most of the Western literary canon being tossed on to the ash-heap. But religion is much more than artistic inspiration, and such requirements are often just as effectively fulfilled by entheogenic drugs as supernaturalism and mysticism.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;But still, discussion over the proper role of religion and superaturalism is what is desperately needed right now. Up until recently the general attitude was that religion automatically deserved respect and deference. And whatever John's position on these matters is, I suspect he'll find himself far closer to the side of the "New Atheists" than the theological reactionaries trying to carve some relevance out for their pet institutions and dogmas.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-5554408326058800311?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/5554408326058800311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=5554408326058800311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/5554408326058800311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/5554408326058800311'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/latest-comments-on-atheism-wars.html' title='Latest Comments on the Atheism Wars'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-7466901572941738844</id><published>2007-07-16T06:58:00.000-04:00</published><updated>2007-07-16T07:17:21.494-04:00</updated><title type='text'>Greasin' Up The Engines</title><content type='html'>Hey all (four of you)! I haven't exactly been on a posting rampage recently, but I find myself in another monday morning (which I have completely off) with a bunch of new ideas. And for once, I've thought about these new ideas for more than five seconds and have come to the conclusion that they genuinely good. Usually when this happens have a swirling mass of ephemera in my mind that I try to cull down to a manageable workload, and end up with about 1% of what I initially wanted on the blog. It sucks, so here's my plan for changing it:&lt;br /&gt;&lt;br /&gt;I plan to develop a bit of a personal literature base that I can use as reference material for more advanced posts. Often times I junk posts because I have to work in a shitload of background subject matter that makes the post, while nominally accessible, extraordinarily long-winded and tedious. Okay, I'll admit it: when it comes to math writing, I'm no Mark Chu-Carrol and certainly no Martin Gardner or Greg Chaitin. So I need to circumvent my limitations in a more innovative way.&lt;br /&gt;&lt;br /&gt;I'll be hashing out the details over private email with Foxy over what we should write for the reference base. I'm certainly not going to be covering elementary algebra, but where to start and how far to go are fuzzy. Nonetheless, it shall be done! For today, however, I plan on writing a couple of non-math posts and changing things up a bit visually. I'm going to rework the blogroll, dividing it into more specific categories. I also plan on adding some new graphics to make things feel a bit new.&lt;br /&gt;&lt;br /&gt;About the new blog, yes, it's still going up and will be up within the next couple of months at most. But for now I want to make the most of this space. I'm also shopping around for a good deal on hosting. An experience with a certain hosting company made me a bit weary of being quick to sign on to long-term deals without a thorough trial period.&lt;br /&gt;&lt;br /&gt;That is all.&lt;br /&gt;&lt;br /&gt;(P.S., if you were reading GM/BM recently and saw my colossal gaffe in the comments, please don't rape me in the ass over it. I know that stuff is typically a valid justification for mathematical honor killing, but please spare me!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-7466901572941738844?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/7466901572941738844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=7466901572941738844' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/7466901572941738844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/7466901572941738844'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/greasin-up-engines.html' title='Greasin&apos; Up The Engines'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-4367739260528844152</id><published>2007-07-11T13:02:00.000-04:00</published><updated>2007-07-12T12:12:25.095-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Movies'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Math Video</title><content type='html'>&lt;a href=http://www.youtube.com/watch?v=MiMWJ1xBo8w&amp;eurl&gt;This&lt;/a&gt; is an excellent mathematical introductory video.&lt;br /&gt;&lt;br /&gt;Apparently there was some trouble with the embedded version ^.^&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-4367739260528844152?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/4367739260528844152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=4367739260528844152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/4367739260528844152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/4367739260528844152'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/math-video.html' title='Math Video'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-375524013832079243</id><published>2007-07-11T12:34:00.001-04:00</published><updated>2007-07-11T12:35:14.103-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>I Beat MarkCC!</title><content type='html'>I beat &lt;a href=http://scienceblogs.com/goodmath/2007/07/the_mandelbrot_set_1.php&gt;MarkCC&lt;/a&gt; to the punch by a day!&lt;br /&gt;&lt;br /&gt;Of course, he sort of outshines my own work. Neat post on the Mandelbrot Set. Take a look.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-375524013832079243?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/375524013832079243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=375524013832079243' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/375524013832079243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/375524013832079243'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/i-beat-markcc.html' title='I Beat MarkCC!'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-2842442133698750335</id><published>2007-07-11T05:06:00.000-04:00</published><updated>2007-07-11T09:00:14.275-04:00</updated><title type='text'>Envious Scientists</title><content type='html'>[&lt;span style="font-style: italic;"&gt;Editor's Note: I changed some of the wording in paragraph three (below the blockquote) to better suit what I was trying to say. - Ed&lt;/span&gt;]&lt;br /&gt;&lt;br /&gt;The SciBloggers periodically swap blogmemes from place to place concerning some scientific or academic topic. The latest one concerns whether scientists have a certain "envy" of another discipline, prompted by &lt;a href="http://scienceblogs.com/worldsfair/2007/07/do_biologists_have_physics_env.php"&gt;these questions&lt;/a&gt; from Dave at The World's Fair in response to an article repudiating the idea that biologists specifically had "physics envy":&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;1. What's your current scientific specialty?&lt;br /&gt;&lt;br /&gt;2. Were you originally pursuing a different academic course? If so, what was it?&lt;br /&gt;&lt;br /&gt;3. Do you happen to wish you were involved in another scientific field? If so, what one?&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;There were several interesting responses. &lt;a href="http://scienceblogs.com/pharyngula/2007/07/what_do_you_want_to_be_when_yo.php"&gt;PZ Myers&lt;/a&gt; claims that physicists should have biology envy, &lt;a href="http://scienceblogs.com/aardvarchaeology/2007/07/funding_envy_not_physics_envy.php"&gt;MartinR from Aardvarchaeology&lt;/a&gt; says he's only envious of the funding, and &lt;a href="http://scienceblogs.com/evolgen/2007/07/ive_got_math_and_cs_envy.php"&gt;RPM&lt;/a&gt; admits he has math and CS envy (something which Foxy and I can completely understand, LOL!).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I really don't have anything to contribute to with regard to the flame war between biologists and physicists specifically. My only comment is that this meme, despite it's somewhat flippant nature, highlights an intellectual blindspot that has plagued science and related intellectual inquiries pretty much since their modern inception. There is often a "my discipline is better" attitude between practitioners and various fields. One memorable manifestation of this was when, at the height of the DWave controversy, &lt;a href="http://scottaaronson.com/blog/?p=206"&gt;Scott Aaronson lashed out some frustrations&lt;/a&gt; with physicists, caustically deriding them as "The Headmasters of Handwaving" (among other things).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Of course, if you read the post, what prompted it was a bit of "science projection". As CS has come into it's own as a scientific discipline over the last several decades, it has started to encounter more and more objections to it's status. Some charge that CS is really more engineering and mathematics than it is a field of empirical science. Scott's post itself illustrates this, as he shows that one of the consequences of the unsolved "P versus NP" problem is that we can't yet prove, in a non-empirical and a priori way, that NPC problems are hard for classical computers, so deriving conclusions about quantum computers is really putting the cart before the horse. Such a thing certainly sounds like a concern more akin to the world of abstract mathematics than empirical science, much like searching for a disconfirming instance of the Riemann Zeta Conjecture before jumping to results on the distribution of primes.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I think it's these sorts of back and forths that should remind us that sciences are usually discrete disciplines with tools fashioned to specific problems. Physicists can always respond to the challenge of CS theorists like Scott that their subject matter isn't susceptible to the same techniques as resource-bounded complexity analysis. And in turn, biologists can scold any demands that they apply a physics-style reductionism to their discipline, a la was &lt;a href="http://scienceblogs.com/gnxp/2006/08/genetical_theory_chapter_2.php"&gt;Razib&lt;/a&gt; calls the Fisherian "ideal gas law".&lt;/p&gt;&lt;br /&gt;&lt;p&gt;And for a concluding remark, it's also important to note that this is why I'm generally skeptical of strict demarcationist efforts at defining science, such as those of Popper. Attempting to boil down disparate fields of study to a single abstract model can be regarded as somewhat misguided, but that's a topic for a separate and more complete post.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-2842442133698750335?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/2842442133698750335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=2842442133698750335' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2842442133698750335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2842442133698750335'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/envious-scientists.html' title='Envious Scientists'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-3612155381319747878</id><published>2007-07-10T18:03:00.000-04:00</published><updated>2007-07-10T23:46:51.549-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pictures'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Magical World of Torblednam</title><content type='html'>MarkCC over at &lt;a href="http://scienceblogs.com/goodmath/"&gt;Good Math, Bad Math&lt;/a&gt; has started talking about &lt;a href="http://scienceblogs.com/goodmath/goodmath/topology/fractals/"&gt;Fractals&lt;/a&gt;, which are fun and interesting things. I recommend checking it out.&lt;br /&gt;&lt;br /&gt;I'd like to talk about one specific fractal though, the Mandelbrot Set.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/commons/2/21/Mandel_zoom_00_mandelbrot_set.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://upload.wikimedia.org/wikipedia/commons/2/21/Mandel_zoom_00_mandelbrot_set.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Neat, eh? Notice the self-similarity. If you zoom in on any one of the tiny lobes, you come up with more fine structure similar to the main structure shown here. And you can keep zooming in forever, and always find similar structures. It's all very clever. Lot's of neat properties therein. It's hypothesized for example that the area of the Mandelbrot set is&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%5Csqrt%7B6%5Cpi%20-%201%7D%20-%20e%20=%201.50659..." align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;An interesting value.&lt;br /&gt;&lt;br /&gt;The way they generate the image is like this. Consider the sequence z&lt;sub&gt;i&lt;/sub&gt; defined in the following way for i = 0, 1, 2, 3... so on. Take some complex number c. Then,&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_0%20=%20c" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_n%20=%20z_%7Bn-1%7D%5E2%20+%20c" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;This gives rise to the following.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_0%20=%20c" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_1%20=%20c%5E2%20+%20c" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_2%20=%20%28c%5E2%20+%20c%29%5E2%20+%20c" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_3%20=%20%28%28c%5E2%20+%20c%29%5E2%20+%20c%29%5E2%20+%20c" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And so on.&lt;br /&gt;&lt;br /&gt;Now, the idea is this - if, for a given c, &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_n" align="middle" border="0" /&gt; goes to infinity, then c is not in the Mandelbrot set. If &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_n" align="middle" border="0" /&gt; converges to a value, or cycles between values, then c is in the Mandelbrot set. The image is produced by putting black points at all the values of c that are in the set on the complex plane. It's basically just a graph of the convergence of that iterated function.&lt;br /&gt;&lt;br /&gt;Now, for some values of c, it is obvious that the sequence is not going to converge. Consider c = 1, for example.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_0%20=%201" align="middle" border="0" /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_1%20=%201%5E2%20+%201%20=%202" align="middle" border="0" /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_2%20=%202%5E2%20+%201%20=%205" align="middle" border="0" /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_3%20=%205%5E2%20+%201%20=%2026" align="middle" border="0" /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;It's relatively clear that &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_n" align="middle" border="0" /&gt; is increasing without bound. Now 1 is really the complex number 1 + 0*&lt;i&gt;i&lt;/i&gt;, which means that the point (1, 0) is not black in the image.&lt;br /&gt;&lt;br /&gt;But for other values of c it's less obvious. You can keep iterating, and the sequence might not clearly diverge for a long time. One approach is to pick a boundary, like 4 and say that, considering &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_n%20=%20a%20+%20b%20i" align="middle" border="0" /&gt;, if &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20a%5E2%20+%20b%5E2" align="middle" border="0" /&gt; is ever greater than 4, then the sequence most likely does not converge, and that value of c is not in the Mandelbrot set, and move on. Of course, it may take certain values of c many steps to exceed the boundary value. It can be tiresome.&lt;br /&gt;&lt;br /&gt;So, I wonder if the points in the Mandelbrot set could not be calculated explicitly. Just give a formula and say, BAM, that's in the set. Of course, for some points, I don't think it's practical, but ... stick with me a second.&lt;br /&gt;&lt;br /&gt;A value c is in the set if the &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_n" align="middle" border="0" /&gt; sequence does not diverge. However, if it does not diverge, that means one of two things has happened. Either the sequence converges to a single value, or the sequence has set into some kind of loop or cycle. Determining the convergent values I think would be difficult, nigh impossible. However, determining the values of c in loops and cycles could actually be relatively straight forward.&lt;br /&gt;&lt;br /&gt;If &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_n" align="middle" border="0" /&gt; cycles, then for some value of n, &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_n%20=%20z_0" align="middle" border="0" /&gt;. So then, we want to solve for all values of c that make that equation true.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_n%20=%20z_0" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_%7Bn-1%7D%5E2%20+%20c%20=%20c" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_%7Bn-1%7D%5E2%20=%200" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_%7Bn%20-%201%7D%20=%200" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;So, what we're really interested in, when we say &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_n%20=%20z_0" align="middle" border="0" /&gt;, what we really mean is &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_%7Bn%20-%201%7D%20=%200" align="middle" border="0" /&gt;. Consider &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_0%20=%200" align="middle" border="0" /&gt;, which solves for c = 0. Going back to the original scheme, clearly c = 0 is in the Mandelbrot set. Now, any &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20z_n" align="middle" border="0" /&gt;, expanded out, is simply a polynomial in terms of c, and the equation can be solved to get all the possible values of c. We can generate a table of those values with the Mathematica nonsense below.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;z[c_, 0] = c&lt;br /&gt;&lt;br /&gt;z[c_, n_] := z[c, n - 1]^2 + c&lt;br /&gt;&lt;br /&gt;ptIze[z_] := {Re[z], Im[z]}&lt;br /&gt;&lt;br /&gt;values = Union[ Flatten[ Table[ Table[ Root[z[#1, n]&amp;, i], {i, 1, 2^n} ], {n,0,8}] ] ];&lt;br /&gt;&lt;br /&gt;pts = Table[ ptIze[ values[[i]] ], {i, 1, Length[values]}];&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And then, plotting all that, we achieve the picture below.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_08B0rrzqpZ0/RpRR_kLr_YI/AAAAAAAAAJ0/EqWBnlHpy-0/s1600-h/FoxelBrot.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_08B0rrzqpZ0/RpRR_kLr_YI/AAAAAAAAAJ0/EqWBnlHpy-0/s400/FoxelBrot.JPG" alt="" id="BLOGGER_PHOTO_ID_5085780031694437762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Not bad :) It's sort of like a skeletal version of the real thing. Neat. I should calculate a similar image of the real set, and see how those points correlate to anything significant. It almost looks like the vertexes or endpoints of the figure. Which makes for an interesting hypothesis. Project for later, perhaps?&lt;br /&gt;&lt;br /&gt;Anyway. Moving on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-3612155381319747878?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/3612155381319747878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=3612155381319747878' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/3612155381319747878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/3612155381319747878'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/magical-world-of-torblednam.html' title='Magical World of Torblednam'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_08B0rrzqpZ0/RpRR_kLr_YI/AAAAAAAAAJ0/EqWBnlHpy-0/s72-c/FoxelBrot.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-5166994902911305290</id><published>2007-07-09T03:15:00.000-04:00</published><updated>2007-07-09T03:34:47.357-04:00</updated><title type='text'>Some Updates on the New Blog</title><content type='html'>Some people may remember that I announced my plans a while back to move the blog to my own host. That plan hasn't changed, but unfortunately is going to have to be pushed back. It's a long story, but suffice to say that I'm never going to do any business with 1&amp;1 or any affilliated companies ever again, for as long as I live.&lt;br /&gt;&lt;br /&gt;I also plan on starting-up a new personal blog for myself. Since this blog Foxy and I run has essentially become a generic math and science blog with a little politics tossed in for flavor here and there, I changed the name from "Greedy, Greedy Algorithms" (a play on "Hungry, Hungry Hippos", don't know how many got that) to what it is currently. That's the nature of the blog from here on out. But I also notice that I'm not writing as much about theoretical/applied computer science as I should be. So for that I'm starting a separate blog devoted exclusively to it. No politics, anti-religious rants or what have you, just straight comp sci and highly contiguous subject matter.&lt;br /&gt;&lt;br /&gt;And since I'm buying a host that will allow me to install multiple blogs, I figured I'd also offer Foxy to move his blog to my host. No charge involved, at the very worst I'll just try to rebound some cash on the traffic I pay for by setting up ads.&lt;br /&gt;&lt;br /&gt;That is all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-5166994902911305290?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/5166994902911305290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=5166994902911305290' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/5166994902911305290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/5166994902911305290'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/some-updates-on-new-blog.html' title='Some Updates on the New Blog'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-3168486493433464039</id><published>2007-07-08T00:27:00.000-04:00</published><updated>2007-07-08T01:58:05.931-04:00</updated><title type='text'>Four Reasons DNA is Not Computer Code</title><content type='html'>This has been one of the most persistently annoying creationist and IDist talking-points for at least several decades. As someone whose involved himself in programming and computing theory in some form or another since I was around 11 years old, I find it particularly annoying. And there is an obvious reason why the argument has the resiliance and longevity that it has. That is, much like the ancient Paleyan "watchmaker" analogy, it has intuitive appeal and usually reinforces what most people (since most people are at least vaguely religious) already want to hear.&lt;br /&gt;&lt;br /&gt;The only problem is, it's wrong, and it's level of wrongness is somewhere in between "I bought into the Y2K hysteria" and "I heeded Goerge Gilder's investment advise during the dot com boom". Not only is it wrong, but it's wrong in the most irritating way: it exploits superficial similarities to obscure the important and profound differences that render the analogy fundamentally flawed. So with that in mind, I've decided to elucidate what I see as the four most important differences between the two phenomena.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Most importantly, DNA is not a computer code:&lt;/span&gt; DNA's function is a structured chemical process that synthesizes proteins (and furthermore, this structure is very weak and ad hoc, see point no. 2 below). Any analogies to computational processes are only superficial, because DNA does not meet the technical definition that qualifies something as a computer, i.e., Turing equivalence. A Turing equivalent computing device is a device that can perform any of the computations in the repotoire of a Universal Turing Machine. The most common model that fulfills this definition is the serial von Neumann machine, a general class of models that includes abstract RAM and register machines. Since extant cell DNA is not, as far as well know, capable of doing performing the aforementioned tasks, it doesn't qualify as a computing device.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. DNA is incredibly messy and ad hoc:&lt;/span&gt; Computer code in high level algebraic languages (e.g., FORTRAN, Lisp, Algol, Haskell, etc.) is typically built around well structured mathematical relationships. Procedural programming, for instance, is built around sequential instructions and imperative looping commands, while functional programming is built around recursive functions (this is simplified for brevity). In DNA, however, the structure is far more ad hoc. Mere sequential similarities in nucleotides between genes correlate very weakly in terms of genomic function, and sometimes sequential similarity between genes with the same function is nonexistent. This ad hocness makes gene-clustering in bioinformatics, for instance, incredibly difficult, as even the best clustering techniques for gene-function harbor limitations in dealing with the evolutionary factors that affect genomic expression. And aside from that, it certainly doesn't indicate good programming practices.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. DNA has no other layer of implemenation beyond the cell:&lt;/span&gt; There are no high level compilers, assemblers, interpreters or what have you that allow the effective passing of instructions to the cell. Genetic function is of course mutable, but manually doing so has, as far I understand, highly unpredictable results. Simply put, if DNA is a code, it's certainly not user friendly for those who wish to tinker with it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4. DNA is wasteful, highly error-prone with regard to copying-fidelity and is incredibly susceptible to post-hoc substitution and modification:&lt;/span&gt; Large portions of functional redundancy, (relative) non-functional redundancy, randomly accumulated transposable elements and vestigial coding sections ("fossil genes"), among other things, do not indicate good design, much less deliberately coded software architecture. Much like phenotypic traits, viewing DNA through the lens of engineering doesn't portray it in a very good light.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-3168486493433464039?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/3168486493433464039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=3168486493433464039' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/3168486493433464039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/3168486493433464039'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/four-reasons-dna-is-not-computer-code.html' title='Four Reasons DNA is Not Computer Code'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-2281284564019339630</id><published>2007-07-05T10:48:00.000-04:00</published><updated>2007-07-05T10:50:03.056-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Swarm Behavior</title><content type='html'>A neat article in &lt;a href=http://www7.nationalgeographic.com/ngm/0707/feature5/&gt;National Geographic&lt;/a&gt; discusses the intelligence exhibited by animals in swarms, such as herds or ant colonies, and applications to human problems. It's all very slick. I recommend it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-2281284564019339630?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/2281284564019339630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=2281284564019339630' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2281284564019339630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2281284564019339630'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/swarm-behavior.html' title='Swarm Behavior'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-7553910416109420981</id><published>2007-07-04T04:26:00.000-04:00</published><updated>2007-07-04T04:33:52.143-04:00</updated><title type='text'>MIT's Department of  Systems, Communication, Control and Signal Processing</title><content type='html'>Here is a description of a &lt;a href="http://www.eecs.mit.edu/grad/areai.html#intro"&gt;sub-area within MIT's department of Electrical Engineering and Computer Science&lt;/a&gt;. I'm not going to say anything about what it has to do with evolutionary biology but I'm sure it sounds designy enough to rile people's adolescent fantasies about the inevtible triumph of their ideas against 150 years of scientific investigation:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Area I research concerns itself with a broad spectrum of problems of communication and coding, systems theory and control, optimization, statistical inference and decision theory, and signal processing, as well as the shared methodological underpinnings of — and increasingly the interactions between — these different fields. Research topics range from fundamental principles to application, from analysis to synthesis, and from theory to experiment and simulation. Thesis research can involve different combinations of the above, depending on the student's interests and the nature of the problem. A list of several recent Area I graduate theses is provided at the end of this document as examples.&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;BOOYAH DARWINISTS!&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;(For those scratching their heads, I give you &lt;a href="http://www.uncommondescent.com/intelligent-design/mits-department-of-biological-engineering/"&gt;this bonus link&lt;/a&gt; to some extra special UD IDiocy.)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-7553910416109420981?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/7553910416109420981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=7553910416109420981' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/7553910416109420981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/7553910416109420981'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/mits-department-of-systems.html' title='MIT&apos;s Department of  Systems, Communication, Control and Signal Processing'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-8054361716482046150</id><published>2007-07-04T03:08:00.000-04:00</published><updated>2007-07-04T04:19:51.743-04:00</updated><title type='text'>Salvador Cordova is Pathetic</title><content type='html'>By now everyone is familiar with slimy Sal Cordova, a man whose penchant for tossing around technical terms with little or no understanding of the concepts behind them serves primarily to make the standard IDiot liturgy appear as grand poobahs of science by comparison. Now he's &lt;a href="http://www.uncommondescent.com/intelligent-design/an-eloquent-but-bogus-non-review-by-dawkins/"&gt;taken it upon himself&lt;/a&gt; to attack &lt;a href="http://www.nytimes.com/2007/07/01/books/review/Dawkins-t.html?pagewanted=2&amp;_r=1&amp;8bu&amp;emc=bu"&gt;Dawkins review&lt;/a&gt; of Behe's &lt;span style="font-style:italic;"&gt;The Edge of Evolution&lt;/span&gt;. And oh boy, is it ever a pathetic display. Opening up, of course, with the classic ID creationist equivocation:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Dawkins is a master of rhetoric. Only he could take a clear example of intelligently designed evolution (dog breeding) and offer it as a convincing “proof” of Darwinian evolution...&lt;br /&gt;&lt;br /&gt;......&lt;br /&gt;&lt;br /&gt;But this is misleading. In fact, for varieties of dogs to emerge, there has to be a relative absence, not presence of natural selection. The kind of selection in play in Dawkins example is intelligently designed, it is not natural whatsoever. Deliberate dog breeding is an example of intelligently designed selection, not natural selection. But Dawkins masterfully conceals this inconvenient fact and leads the reader into thinking natural selection works like an intelligent designer, when in reality it does not.&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Well, we at least know we're dealing with good old fashioned creationist nonsense here. Sal's argument essentially boils down to saying that any conscious configuration whatsoever negates anything the process we're enacting could possibly tell us about similar processes in nature. He may not explicitly claim it, but the innuendo is certainly strong, aside from his argument in general being nonsense. It would be as if someone claimed that experiments on elementary particles using colliders were not "natural whatsoever", or an example of a natural process, due to the fact that the conditions were configured beforehand.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;And furthermore, Sal goes quite a long way in displaying the inherent vacuity of "intelligent design". Along with the myriad of other deficiencies that have been pointed out over time, "intelligent design" seems to stuck on a black and white proposition that something is either "designed" or not. Judging by the rhetoric, it appears that anything from architectural drafting to software design to scientific experiment construction is lumped into the category of "design" without any meaningful differentiation, despite the manifold and important differences between them. It may be a convenient "get out of falsification free" card for the conjecture's apologists, but it's certainly not something that is indicative of good science.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;And proceeding from there, one can remove themselves from the muddled thinking of the IDiots and realize that Cordova's "Intelligently Designed selection" is a meaningless catch-phrase. What artificial selection demonstrates has little to do with "intelligent design" and a lot to do with what can be accomplished by changing selection pressures. The natural selective pressures obviously wanted specimens that could survive and reproduce in non-domestic conditions, while the artifical selection pressures imposed by humans gradually opted for cooperative specimens more conductive to an agricultural civilization. Calling that "design" is sort of like calling the gradual development of culinary techniques and cultural food preferences "baking".&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Moving on, Sal engages in his usual pseudoscientific techno-babble wanking by sputtering about a concept from mathematical biology:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;Dawkins is surely familiar with the consequences of The Fundamental Theorem of Natural Selection by Fisher. The theorem implies that traits under extreme pressure from selection cannot be very variable. They can only be variable if natural selection is weak or non-existent.&lt;br /&gt;&lt;br /&gt;This is easy to see. If selection is strongly favors dark colored individuals of a species, eventually most if not all of the individuals will be dark colored. Any future mutations that don’t yield dark colored individuals will be weeded out by selection. Natural selection is the enemy of diversity. Selection is the enemy of innovation. Not the friend of it.&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;That would be pretty impressive if the &lt;a href="http://en.wikipedia.org/wiki/Fisher's_fundamental_theorem_of_natural_selection"&gt;Wiki-page&lt;/a&gt; that Sal links to didn't provide an almost antithetical description of the concept than he did: "The rate of increase in the mean fitness of any organism at any time ascribable to natural selection acting through changes in gene frequencies is exactly equal to its genic variance in fitness at that time". Essentially, it states that those with greater variation tend to experience greater increases in fitness. However, that being said, I wouldn't bet my life (or my revolutionary new biological theory that gets me persecuted like Galileo) on the idea, as from my understanding it's relevance is disputed within biology (with some decrying it as overly reductionist).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;But even so, what Sal says about intense selection pressures is trivially true. All things being equal, a strong selection pressure will winnow out variations from a well adapted population. What Sal overlooks is that selection pressures change, and often change drastically. In such conditions natural selection is indeed a "friend of innovation", as it culls down the pool of biological populations to those with traits most adaptive to the surrounding environment.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;And, not to interrupt Sal's exercise in deliberate distortion or anything, but Dawkins actually wasn't speaking of the role of selection at all in his review. He was using dog-breeding to argue against Behe's claims to the limitations imposed on evolution by &lt;span style="font-style:italic;"&gt;variation&lt;/span&gt; (more specifically, mutation).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;After quoting a couple of signatories to the "Dissent from Darwin" list repeating what he said, he misquotes &lt;a href="http://www.genome.org/cgi/content/abstract/gr.5117706v1"&gt;a paper&lt;/a&gt; on the selective pressures involved in dog domestication. Here's Sal's except:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;The domestication of dogs caused a dramatic change in their way of life compared with that of their ancestor, the gray wolf.&lt;br /&gt;&lt;br /&gt;....&lt;br /&gt;&lt;br /&gt;a major consequence of domestication in dogs was a general relaxation of selective constraint [weakening of Natural Selection] on their mitochondrial genome. If this change also affected other parts of the dog genome, it could have facilitated the generation of novel functional genetic diversity.&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;And here's what it says exactly before the jump indicated by the ellipses:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;The domestication of dogs caused a dramatic change in their way of life compared with that of their ancestor, the gray wolf. We hypothesize that this new life style &lt;span style="font-weight:bold;"&gt;changed the selective forces that acted upon the species&lt;/span&gt;, which in turn had an effect on the dog’s genome. We sequenced the complete mitochondrial DNA genome in 14 dogs, six wolves, and three coyotes. Here we show that dogs have accumulated nonsynonymous changes in mitochondrial genes at a faster rate than wolves, leading to elevated levels of variation in their proteins.&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;So, you see from my emphasized portion, Sal's quotation was a wee-bit selective. While making it look like the authors of the paper were downplaying the role of selection, they were really only investigating the change in selection pressures on the ancestors of modern domestic dog breeds. And also, I'll freely admit to being no expert on the matter, but it would appear that the correlation of the increase in genetic variation of dog breeds with the increase in fitness would be at least somewhat similar to what we expect to observe from Fisher's theorem.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Before engaging in self-congratulatory auto-fellatio for his amazing debunking of Dawkins, Cordova squeezes off this turb, which I leave only for your amusement:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;Finally, consider the evolution of flight: an arm evolving into a wing. The arm must go through several stages of being a bad arm first before becoming a good wing. Thus, clearly, selection would be a rather nasty barrier to the development of an arm into a wing.&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Have a nice day!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-8054361716482046150?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/8054361716482046150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=8054361716482046150' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8054361716482046150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8054361716482046150'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/salvador-cordova-is-pathetic.html' title='Salvador Cordova is Pathetic'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-1098601489856703954</id><published>2007-07-02T12:32:00.000-04:00</published><updated>2007-07-02T12:33:13.067-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Science'/><category scheme='http://www.blogger.com/atom/ns#' term='Evolution'/><title type='text'>Evolving Hardware</title><content type='html'>(Version 2 of this post! It's evolving.)&lt;br /&gt;&lt;br /&gt;Of late, two news stories have come to my attention, involving an evolutionary approach to hardware design. In the first case, a scientist was attempting to &lt;a href=http://www.damninteresting.com/?p=870&gt;develop a chip&lt;/a&gt; that would respond certain ways to certain auditory input. In the second case, though from 2002, scientists were trying to &lt;a href=http://www.newscientist.com/article.ns?id=dn2732&gt;design a circuit&lt;/a&gt; that would produce a sine wave varying voltage, an oscillator.&lt;br /&gt;&lt;br /&gt;The approach was pretty much the same in each case. They started with just a set of transistors, basically just an electrically controlled switch. However, the way the transistors were connected to each other, was modifiable, and could be controlled by a computer. Changing the configuration of the transistors changed the way the circuit behaved, and thus what it did.&lt;br /&gt;&lt;br /&gt;So, you start out with a set of random configurations, and test each configuration against what you're hoping to achieve. In the first case, the scientist was looking for a specific voltage output in response to a certain frequency sound, and a different voltage output in response to another. The sounds were inputted to each configuration of transistors. The configurations that produced an output most like the responses the scientist was looking for were judged 'fit', and the others 'unfit'. The fit configurations were then bred, producing more configurations that were like the parent configurations but different. Occasionally, a certain configuration might change some aspect at random in the breeding process, as if it had mutated. As the generations progressed, and the 'fit' configurations were selected over the 'unfit', eventually a configuration was found that exactly matched the desired voltage outputs to the sound inputs. Similarly, in the case of the oscillator group, eventually a configuration was found that generated a smooth sine wave of voltage.&lt;br /&gt;&lt;br /&gt;Which is neat in and of itself. But it gets cooler. The real surprises happened when they tried to determine why each configuration worked the way it did.&lt;br /&gt;&lt;br /&gt;In the case of the auditory input experiment experiment, only 37 of the transistors were connected to each other, a fraction of the amount available. The most interesting aspect was a group of five, wired in a loop, not connected to the other 32 in the 'main' group. As such, these 5 couldn't really influence the behavior of the main circuit. However, if any one of these five were removed, the circuit ceased to function. Also, if this same configuration were loaded onto any other chip with reconfigurable transistors, the circuit would not work the same way. What seems to have happened is that, through natural selection, the configurations developed a way to exploit minute imperfections of the circuit, maybe on a quantum level. Small fluctuations in local electromagnetic fields that affected the behavior of the circuit. In that way, the disconnected loop of five could affect the other transistors, and the configuration would not work on other circuits, because they would have different impurities and imperfections.&lt;br /&gt;&lt;br /&gt;In the case of the oscillator experiment, when the scientists analyzed the circuit, they found that the circuit was not generating the oscillation voltage wave at all. A nearby computer was producing a wave, and the circuit had actually configured itself to be a radio receiver, picking up that wave, and outputting it as the voltage. The circuit had developed in such a way that the circuit board itself functioned as the radio antenna. That is just so incredibly awesome to me.&lt;br /&gt;&lt;br /&gt;So, what's the point here, really? First, these evolutionary means produced incredibly innovative ways of answering the scientists' questions. And most interestingly, in each case, the final solution made use of everything the circuit had available to it. The quantum properties of the chip, or the structure the board, and even things in the immediate surroundings, whatever is available. The adaptation here is absolutely incredible. Just imagine if these experiments were capable of self-configuration? Like a bio-chemical system capable of self-replication, grabbing whatever is available, proteins that function as chemical channels for example, and constructing something amazing like a flagellum. How is that beyond the realm of possibility?&lt;br /&gt;&lt;br /&gt;The applications of this kind of problem solving, and the results attained, just astound me. Maybe a project for later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-1098601489856703954?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/1098601489856703954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=1098601489856703954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1098601489856703954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1098601489856703954'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/evolving-hardware.html' title='Evolving Hardware'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-8494500214667676305</id><published>2007-07-02T02:19:00.000-04:00</published><updated>2007-07-02T02:21:00.900-04:00</updated><title type='text'>Haaaaapy Biiirthday tooo Meeeee</title><content type='html'>Well, I remarked in my iteration of the "8 Random Facts" post that I was 21, but that was actually a bit of a premature approximation. Well, today's the day, as 21 years ago on July 2nd., 1986, I was born. Just thought I'd let you all know!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-8494500214667676305?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/8494500214667676305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=8494500214667676305' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8494500214667676305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8494500214667676305'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/07/haaaaapy-biiirthday-tooo-meeeee.html' title='Haaaaapy Biiirthday tooo Meeeee'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-5350296404537667416</id><published>2007-06-30T02:38:00.000-04:00</published><updated>2007-06-30T05:13:33.664-04:00</updated><title type='text'>Post Gone Due to Suckage Difficulties</title><content type='html'>Yeah, there was a blog entry here. But it sucked, so I took it down.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-5350296404537667416?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/5350296404537667416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=5350296404537667416' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/5350296404537667416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/5350296404537667416'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/06/computation-reduces-to-physics-it-seems.html' title='Post Gone Due to Suckage Difficulties'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-527239276520784697</id><published>2007-06-30T02:00:00.000-04:00</published><updated>2007-06-30T03:14:09.917-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Time Travel'/><category scheme='http://www.blogger.com/atom/ns#' term='Problems'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Time Traveling DiffEq</title><content type='html'>&lt;div style="text-align: left;"&gt;(I do go on a bit, don't I)&lt;br /&gt;&lt;br /&gt;For myself, I tend to think of differential equations best when thinking about them in terms of systems over time. Also, the &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Cfrac%7Bdf%7D%7Bdt%7D" align="middle" border="0" /&gt; notation bothers me, so &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?f%27%28t%29" align="middle" border="0" /&gt; refers to the derivative of the function f, evaluated at some value t.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;So, the typical differential equation, sort of the standard you get in most differential equation courses, relates the rate of change of a function over time to the value of the function at that point in time. This relates to most systems. For example, the gravitational force experienced by a falling object is directly related to the height of that object at that time.&lt;br /&gt;&lt;br /&gt;But, it seems more realistic in many cases that the rate of change of a system or function will be more related to the value of the function at some time in the past. For example, the rate of change of a population a certain time is related to the number of members in the population who got pregnant some amount of time ago. So instead of &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?f%27%28t%29%20=%20f%28t%29" align="middle" border="0" /&gt;, associating the rate of change of the function with the function at that time, which leads to exponential growth, for some constant a you have &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?f%27%28t%29%20=%20f%28t%20-%20a%29" align="middle" border="0" /&gt;, so the rate of change at time t is related to the function at some amount of time a ago.&lt;br /&gt;&lt;br /&gt;We could consider &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?f%27%28t%29%20=%20f%28t%20-%201%29" align="middle" border="0" /&gt;, for example. But that's not really interesting, to me at least.&lt;br /&gt;&lt;br /&gt;I'd much rather consider&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?y%27%28t%29%20=%20%5Cfrac%7By%28t%20+%201%29%20-%20y%28t%20-%201%29%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This is interesting for a couple of reasons. What we have here is a function y(t). y(t+1) - y(t - 1) gives the difference of values over an interval of t of width 2. Dividing by 2 then gives the average change in the value of the function over that interval. However, y'(t) is the exact rate of change. So, what we're doing here is setting the exact rate of change equal to the approximate rate of change. What does that do, I wonder?&lt;br /&gt;&lt;br /&gt;The other reason this is interesting is that we've got a function whose rate of change is dependent not only on the past behavior of the function, y(t - 1), but also the /future/ behavior of the function, y(t + 1). It's awesome. It's like a time traveling function. I like to think of this as the TARDIS function.&lt;br /&gt;&lt;br /&gt;So, the question is, how do we solve for the TARDIS function, based on that differential equation?&lt;br /&gt;&lt;br /&gt;Honestly, I have no idea. It's crazy. My calc TA last semester had no idea. He broke out all kinds of crazy integration tricks, but it all reduced to things like 0 = 0. I busted it out on my calc teacher next, who is incredibly slick when it comes to math, and he wanted nothing to do with it. So, we're going to play with it.&lt;br /&gt;&lt;br /&gt;We're going to assume that the function is analytic. For you, this means that the function can be represented as a power series. For example, consider Cos(x). Cos(x) is an analytic function because it can be represented as the sum of powers of x.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?Cos%28x%29%20=%201%20-%20%5Cfrac%7Bx%5E2%7D%7B2%7D%20+%20%5Cfrac%7Bx%5E4%7D%7B24%7D%20-%20%5Cfrac%7Bx%5E6%7D%7B720%7D%20+%20..." align="middle" border="0" /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;More concisely, we can write this in terms of a summation.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?Cos%28x%29%20=%20%5Csum_%7Bi%20=%200%7D%5E%5Cinfty%20%5Cfrac%7B%28-1%29%5Ei%20x%5E%7B2i%7D%7D%7B%282i%29%21%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;So, we're going to /assume/ that we can write y(t) in the same sort of way. Imagine an infinite sequence of numbers &lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_i" align="middle" border="0" /&gt; for i = 0, 1, 2 ...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?y%28t%29%20=%20a_0%20+%20a_1%20t%20+%20a_2%20t%5E2%20+%20a_3%20t%5E3%20+%20..." align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?y%28t%29%20=%20%5Csum_%7Bi%20=%200%7D%5E%5Cinfty%20a_i%20t%5Ei" align="middle" border="0" /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;So we're going to try to use that assumed form of y(t) to solve for the function itself, by using the differential equation to solve for the sequence of &lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_i" align="middle" border="0" /&gt;'s.&lt;br /&gt;&lt;br /&gt;The first thing is to find y'(t). y(t), as we have it, is just a straight up polynomial, though an infinite one, and can be differentiated as such.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?y%27%28t%29%20=%20a_1%20+%202%20a_2%20t%20+%203%20a_3%20t%5E2%20+%204%20a_4%20t%5E3%20+%20..." align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?y%27%28t%29%20=%20%5Csum_%7Bi%20=%200%7D%5E%5Cinfty%20%28a_%7Bi%20+%201%7D%29%28i%20+%201%29t%5Ei" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;So now let's consider y(t - 1). Just plugging into the formula, we get&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?y%28t%20-%201%29%20=%20%5Csum_%7Bi%20=%200%7D%5E%5Cinfty%20a_i%20%7B%28t%20-%201%29%7D%5Ei" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%28t%20-%201%29%5Ei" align="middle" border="0" /&gt; is not very nice, though. Ideally, we want to get t alone, by itself. And to do so, we will use the binomial theorem.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%28a%20+%20b%29%5En%20=%20%5Csum_%7Bi%20=%200%7D%5En%20%5Cfrac%7Bn%21%7D%7B%28n%20-%20i%29%21i%21%7D%20a%5Ei%20b%5E%7Bn%20-%20i%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?y%28t%20-%201%29%20=%20%5Csum_%7Bi%20=%200%7D%5E%5Cinfty%20a_i%20%7B%5Csum_%7Bk%20=%200%7D%5Ei%20%5Cfrac%7Bi%21%7D%7B%28i%20-%20k%29%21k%21%7D%20t%5Ek%20%28-1%29%5E%7Bi%20-%20k%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;And then we can rearrange, for our convenience.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?y%28t%20-%201%29%20=%20%5Csum_%7Bi%20=%200%7D%5E%5Cinfty%20a_i%20%7B%5Csum_%7Bk%20=%200%7D%5Ei%20%5Cfrac%7Bi%21%7D%7B%28i%20-%20k%29%21k%21%7D%20t%5Ek%20%28-1%29%5E%7Bi%20-%20k%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?y%28t%20-%201%29%20=%20%5Csum_%7Bi%20=%200%7D%5E%5Cinfty%20%7B%5Csum_%7Bk%20=%200%7D%5Ei%20%5Cfrac%7Ba_i%20i%21%7D%7B%28i%20-%20k%29%21k%21%7D%20t%5Ek%20%28-1%29%5E%7Bi%20-%20k%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?y%28t%20-%201%29%20=%20%5Csum_%7Bk%20=%200%7D%5E%5Cinfty%20%7B%5Csum_%7Bi%20=%20k%7D%5E%5Cinfty%20%5Cfrac%7Ba_i%20i%21%7D%7B%28i%20-%20k%29%21k%21%7D%20t%5Ek%20%28-1%29%5E%7Bi%20-%20k%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?y%28t%20-%201%29%20=%20%5Csum_%7Bk%20=%200%7D%5E%5Cinfty%20%5Cfrac%7Bt%5Ek%7D%7Bk%21%7D%20%7B%5Csum_%7Bi%20=%20k%7D%5E%5Cinfty%20%5Cfrac%7Ba_i%20i%21%7D%7B%28i%20-%20k%29%21%7D%20%28-1%29%5E%7Bi%20-%20k%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;By rearranging the summations, the indexes and the bounds, we include all of the same terms, but put them in a more convenient order, allowing us to pull the &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?t%5Ek/k%21" align="middle" border="0" /&gt; term out by itself. Which is nice.&lt;br /&gt;&lt;br /&gt;What is also nice is that we can go straight to y(t + 1) from that formula. Simply substitute +1 for -1.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?y%28t%20+%201%29%20=%20%5Csum_%7Bk%20=%200%7D%5E%5Cinfty%20%5Cfrac%7Bt%5Ek%7D%7Bk%21%7D%20%7B%5Csum_%7Bi%20=%20k%7D%5E%5Cinfty%20%5Cfrac%7Ba_i%20i%21%7D%7B%28i%20-%20k%29%21%7D%20%28+1%29%5E%7Bi%20-%20k%7D%20%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?y%28t%20+%201%29%20=%20%5Csum_%7Bk%20=%200%7D%5E%5Cinfty%20%5Cfrac%7Bt%5Ek%7D%7Bk%21%7D%20%7B%5Csum_%7Bi%20=%20k%7D%5E%5Cinfty%20%5Cfrac%7Ba_i%20i%21%7D%7B%28i%20-%20k%29%21%7D%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;And now, having y(t - 1) and y(t + 1), we can do the following, fractoring all kinds of nice things together, moving things about, and blah!&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Cfrac%7By%28t%20+%201%29%20-%20y%28t%20-%201%29%7D%7B2%7D%20=%20%5Cfrac%7B1%7D%7B2%7D%20%5Csum_%7Bk%20=%200%7D%5E%5Cinfty%20%5Cfrac%7Bt%5Ek%7D%7Bk%21%7D%0A%7B%5Csum_%7Bi%20=%20k%7D%5E%5Cinfty%20%5Cfrac%7Ba_i%20i%21%7D%7B%28i%20-%20k%29%21%7D%281%20-%20%28-1%29%5E%7Bi%20-%20k%7D%29%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Cfrac%7By%28t%20+%201%29%20-%20y%28t%20-%201%29%7D%7B2%7D%20=%20%5Csum_%7Bk%20=%200%7D%5E%5Cinfty%20%5Cfrac%7Bt%5Ek%7D%7Bk%21%7D%0A%7B%5Csum_%7Bi%20=%20k%7D%5E%5Cinfty%20%5Cfrac%7Ba_i%20i%21%7D%7B%28i%20-%20k%29%21%7D%5Cfrac%7B%281%20-%20%28-1%29%5E%7Bi%20-%20k%7D%29%7D%7B2%7D%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Cfrac%7By%28t%20+%201%29%20-%20y%28t%20-%201%29%7D%7B2%7D%20=%20%5Csum_%7Bk%20=%200%7D%5E%5Cinfty%20%5Cfrac%7Bt%5Ek%7D%7Bk%21%7D%0A%7B%5Csum_%7Bn%20=%200%7D%5E%5Cinfty%20%5Cfrac%7Ba_%7Bn%20+%20k%7D%20%7B%28n+k%29%7D%21%7D%7Bn%21%7D%5Cfrac%7B%281%20-%20%28-1%29%5En%29%7D%7B2%7D%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;What's nice about &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Cfrac%7B1%20-%20%28-1%29%5En%7D%7B2%7D" align="middle" border="0" /&gt; is that for even values of n, &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%28-1%29%5En%20=%201" align="middle" border="0" /&gt;, which means that &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Cfrac%7B1%20-%20%28-1%29%5En%7D%7B2%7D%20=%200" align="middle" border="0" /&gt; when n is even. When n is odd, it equals 1. Which means that in the internal summation for n, we can automatically cancel all the even terms, and drop that factor on the remaining terms. To cancel all the even n terms, we can substitute 2n+1, which will always be odd, for any value of n.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Cfrac%7By%28t%20+%201%29%20-%20y%28t%20-%201%29%7D%7B2%7D%20=%20%5Csum_%7Bk%20=%200%7D%5E%5Cinfty%20%5Cfrac%7Bt%5Ek%7D%7Bk%21%7D%20%5Csum_%7Bn%20=%200%7D%5E%5Cinfty%20%5Cfrac%7Ba_%7B2n%20+%201%20+%20k%7D%20%282n%20+%201%20+%20k%29%21%7D%7B%282n%20+%201%29%21%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now we can return to the original differential equation.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?y%27%28t%29%20=%20%5Cfrac%7By%28t%20+%201%29%20-%20y%28t%20-%201%29%7D%7B2%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Substituting...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Csum_%7Bk%20=%200%7D%5E%5Cinfty%20%28a_%7Bk%20+%201%7D%29%28k%20+%201%29t%5Ek%20=%20%5Csum_%7Bk%20=%200%7D%5E%5Cinfty%20%5Cfrac%7Bt%5Ek%7D%7Bk%21%7D%0A%5Csum_%7Bn%20=%200%7D%5E%5Cinfty%20%5Cfrac%7Ba_%7B2n%20+%201%20+%20k%7D%20%282n%20+%201%20+%20k%29%21%7D%7B%282n%20+%201%29%21%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now, notice how on each side, it opens with a summation in terms of k, starting at k = 0 and going to infinity. Also, each term in each summation on either side is a t^k term. Now, there's some theorem I'm forgetting that says that two functions are equal if the coefficients on the powers of t are identical. So, for any given value of k, grabbing the coefficient on the power of t from each side, we get the following equation&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28a_%7Bk%20+%201%7D%29%28k%20+%201%29%20=%20%5Cfrac%7B1%7D%7Bk%21%7D%20%5Csum_%7Bn%20=%200%7D%5E%5Cinfty%20%28a_%7B2n%20+%201%20+%20k%7D%29%20%5Cfrac%7B%282n%20+%201%20+%20k%29%21%7D%7B%282n%20+%201%29%21%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;We can move the k! to the other side, producing the nicer&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28a_%7Bk%20+%201%7D%29%28k%20+%201%29%21%20=%20%5Csum_%7Bn%20=%200%7D%5E%5Cinfty%20%28a_%7B2n%20+%201%20+%20k%7D%29%20%5Cfrac%7B%282n%20+%201%20+%20k%29%21%7D%7B%282n%20+%201%29%21%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now, to simplify things a little ... watch this. We pull out the n = 0 term from the summation.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28a_%7Bk%20+%201%7D%29%28k%20+%201%29%21%20=%20%28a_%7B2*0%20+%201%20+%20k%7D%29%20%5Cfrac%7B%282*0%20+%201%20+%20k%29%21%7D%7B%282*0%20+%0A1%29%21%7D%20+%20%5Csum_%7Bn%20=%201%7D%5E%5Cinfty%20%28a_%7B2n%20+%201%20+%20k%7D%29%20%5Cfrac%7B%282n%20+%201%20+%20k%29%21%7D%7B%282n%20+%0A1%29%21%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28a_%7Bk%20+%201%7D%29%28k%20+%201%29%21%20=%20%28a_%7B1%20+%20k%7D%29%20%5Cfrac%7B%281%20+%20k%29%21%7D%7B%281%29%21%7D%20+%20%5Csum_%7Bn%20=%201%7D%5E%5Cinfty%20%28a_%7B2n%20+%201%20+%20k%7D%29%20%5Cfrac%7B%282n%20+%201%20+%20k%29%21%7D%7B%282n%20+%0A1%29%21%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%20%28a_%7Bk%20+%201%7D%29%28k%20+%201%29%21%20=%20%28a_%7Bk%20+%201%7D%29%28k%20+%201%29%21%20+%20%5Csum_%7Bn%20=%201%7D%5E%5Cinfty%20%28a_%7B2n%20+%201%20+%20k%7D%29%20%5Cfrac%7B%282n%20+%201%20+%20k%29%21%7D%7B%282n%20+%0A1%29%21%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?0%20=%20%5Csum_%7Bn%20=%201%7D%5E%5Cinfty%20%28a_%7B2n%20+%201%20+%20k%7D%29%20%5Cfrac%7B%282n%20+%201%20+%20k%29%21%7D%7B%282n%20+%0A1%29%21%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;And so we have it. If the differential equation is to hold true, the above equation must be true for any value of k, from 0 to infinity. Remember, our goal is to derive the values of &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_i" align="middle" border="0" /&gt;, and thus get y(t).&lt;br /&gt;&lt;br /&gt;So, the first equation we can generate is to let k = 0. That gives us the following.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%200%20=%20%5Csum_%7Bn%20=%201%7D%5E%5Cinfty%20%28a_%7B2n%20+%201%7D%29%20%5Cfrac%7B%282n%20+%201%29%21%7D%7B%282n%20+%0A1%29%21%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%200%20=%20%5Csum_%7Bn%20=%201%7D%5E%5Cinfty%20%28a_%7B2n%20+%201%7D%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;It's nice the way that (2n + 1)! cancels. Expanding out, that gives us&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%200%20=%20a_3%20+%20a_5%20+%20a_7%20+%20..." align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In otherwords, the sum of the odd terms of the sequence must be 0. Now, a clear solution to this would be to let all the odd terms equal 0 themselves. Then the sum must equal 0. But that quickly leads to all the other terms being 0 as well, which leads to y(t) = 0. While that is a valid solution, it is trivial and uninteresting!&lt;br /&gt;&lt;br /&gt;But there is something important to note here. This equation was for the smallest case, k = 0. And the smallest term of the sequence used is &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_3" align="middle" border="0" /&gt;.  Because the sequence terms used in the equations increase with k and n, &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_3" align="middle" border="0" /&gt; is the smallest term /any/ of them will use. This means that &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_0,%20a_1,%20a_2" align="middle" border="0" /&gt; are completely independent to the problem. They can have any value. For example, they could have  ... whatever value, and &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_3" align="middle" border="0" /&gt; through &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_%5Cinfty" align="middle" border="0" /&gt; could all be 0. In that case, y(t) = &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_0%20+%20a_1%20t%20+%20a_2%20t%5E2" align="middle" border="0" /&gt;. And, if you check for yourself, that general quadratic function is a solution to the differential equation.&lt;br /&gt;&lt;br /&gt;Boom.&lt;br /&gt;&lt;br /&gt;Of course, it's mildly uninteresting, so I wonder if there are other solutions that don't require setting all the other terms of the sequence to 0.&lt;br /&gt;&lt;br /&gt;This is where the really interesting part begins, I think.&lt;br /&gt;&lt;br /&gt;What we have is a formula for generating equations we want to be true. We want to use those equations to solve for all the &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_i" align="middle" border="0" /&gt; for i = 3, 4, whatever. Now, all these equations are linear, since all the variables exist in single powers.  An infinite number of linear equations, with an infinite number of variables to solve for.&lt;br /&gt;&lt;br /&gt;In the typical case, you have a finite number of equations and a finite number of variables. In the special case of having the same number of equations as variables, you can solve for a single value for each variable. You can do this using linear algebra and something called Gaussian Elimination.&lt;br /&gt;&lt;br /&gt;An example is in order, I think. Consider the pair of equations, 3x + 2y = 1 and x - y = 2, and we want to solve for x and y. Take the second equation, and multiply each side by 2, to get 2x - 2y = 4. Now we combine the equations through addition.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;(3x + 2y) + (2x - 2y) = 1 + 4&lt;br /&gt;&lt;br /&gt;5x = 5&lt;br /&gt;&lt;br /&gt;x = 1&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;By combining the two equations, multiplying one of them by a constant coefficient, and simplifying, we produce a new equation that is the solution for x. It's very handy. You can use this to solve systems of however many variables you want. I do enjoy linear algebra.&lt;br /&gt;&lt;br /&gt;That's all well and good, but what I'm interested in is an infinite set of equations, and as many variables. Can I use the same kind of trick to solve for all my &lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_i" align="middle" border="0" /&gt;'s? Infinite Gaussian Elimination!&lt;br /&gt;&lt;br /&gt;I don't know if it works in the general case, but I believe it works here, and it's relatively slick.&lt;br /&gt;&lt;br /&gt;Take a look at the first few equations. As I showed earlier, for k = 0, you get&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%200%20=%20a_3%20+%20a_5%20+%20a_7%20+%20a_9%20+%20a_11%20+%20..." align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;For k = 1, 2, 3,&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%200%20=%204%20a_4%20+%206%20a_6%20+%208%20a_8%20+%2010%20a_10%20+%20..." align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%200%20=%2020%20a_5%20+%2042%20a_7%20+%2072%20a_9%20+%20110%20a_11%20+%20..." align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%200%20=%20120%20a_6%20+%20336%20a_8%20+%20720%20a_10%20+%20..." align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;And so on. The important thing here is that the first term's index keeps moving over. This means that every term appears as the first term of one of these equations somewhere.&lt;br /&gt;&lt;br /&gt;Now, I'm getting tired, as it is late, so I'm probably not going to be as rigorous as I should be. As rigorous as I ever am ...&lt;br /&gt;&lt;br /&gt;Take the first equation, for k = 0, and multiply each side of the equation by -20. Now, each term of the equation has a -20 in front, but the sum of all those terms (or difference now, really), is still 0. Now, as we did before in the example, add this equation to the k=2 equation, the one with &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_5" align="middle" border="0" /&gt; as the first term. The &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?-20%20a_5" align="middle" border="0" /&gt; and the &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?20%20a_5" align="middle" border="0" /&gt; cancel, leaving an equation with &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_3,%20a_7,%20a_9,%20a_11" align="middle" border="0" /&gt;, and so on, but no &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_5" align="middle" border="0" /&gt;. And the equation still comes out to 0. Now, take the equation for k = 4, which has a first term of &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_7" align="middle" border="0" /&gt;. We can combine that equation with the one previous, to eliminate the &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_7" align="middle" border="0" /&gt; term. And we can keep going, eliminating term after term, except for &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_3" align="middle" border="0" /&gt;. Carrying this to its logical conclusion, we eliminate every term but &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_3" align="middle" border="0" /&gt;, and the equation still equals 0. Therefore, &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_3" align="middle" border="0" /&gt; /must/ equal 0!&lt;br /&gt;&lt;br /&gt;In the same way, we can work the equations to isolate every term of the sequence. Use the k=3 equation which starts with &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_6" align="middle" border="0" /&gt; to eliminate &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_6" align="middle" border="0" /&gt; from the k = 1 equation which starts with &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_4" align="middle" border="0" /&gt;. Carrying on again, we get that &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_4" align="middle" border="0" /&gt; equals 0! Because of the structure of the equations, the way the first term keeps moving to the right, we will be able to cancel all terms but the first in any equation, and thus show them equal to 0.&lt;br /&gt;&lt;br /&gt;By this logic, it would seem that they would all have to be 0. Now, I am sort of making all this up, but in the same way that in the finite case, with a finite number of variables and equations, if there are the same number of variables and equations, there is a unique solution to each variable, in this case we have an infinite number of each, but it's the 'same' infinity, countably many equations and variables. So, does that guarantee that any solution is unique? It would certainly depend on the values of the coefficients on the variables, but here everything seems sound. I really don't know.&lt;br /&gt;&lt;br /&gt;The final result seems to be that, assuming y(t) is analytic, it must be of the form &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?y%28t%29%20=%20A%20t%5E2%20+%20B%20t%20+%20C" align="middle" border="0" /&gt;. Which is interesting.&lt;br /&gt;&lt;br /&gt;So there you have it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-527239276520784697?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/527239276520784697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=527239276520784697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/527239276520784697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/527239276520784697'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/06/time-traveling-diffeq.html' title='Time Traveling DiffEq'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-2412132061297968686</id><published>2007-06-28T18:35:00.000-04:00</published><updated>2007-06-28T19:24:07.409-04:00</updated><title type='text'>8 Random Facts About a Tyler</title><content type='html'>Foxy's already &lt;a href="http://greedygreedyalgorithms.blogspot.com/2007/06/8-random-things-about-fox.html"&gt;obliged&lt;/a&gt; Abbiegenous Retrovirus' &lt;a href="http://endogenousretrovirus.blogspot.com/2007/06/oh-dear-tagged-twice.html"&gt;blog-tag&lt;/a&gt; and posted his entry on this, and now it's about time for me to do the same. Here are the rules:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;We have to post these rules before we give you the facts.&lt;br /&gt;&lt;br /&gt;Players start with eight random facts/habits about themselves.&lt;br /&gt;&lt;br /&gt;People who are tagged need to write their own blog about their eight things and post these rules.&lt;br /&gt;&lt;br /&gt;At the end of your blog, you need to choose eight people to get tagged and list their names.&lt;br /&gt;&lt;br /&gt;Don’t forget to leave them a comment telling them they’re tagged, and to read your blog.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;And here are the facts:&lt;br /&gt;&lt;br /&gt;1. People almost invarably assume I'm older than I really am when I meet them. I'm 21, and some people's estimates of my age go into the mid-thirties. Some people go so far as to casually ask whether my dad is my brother when we converse with them out in public, which I guess is either really good for him or really bad for me in the future. And even if people chalk it up to the fact that I usually wear a goatee, his happens even when I don't have any facial hair! It's unreal, and I have a hard time believing I really look that old.&lt;br /&gt;&lt;br /&gt;2. The overwhelmingly most frequent pretext for which I've been fired from jobs is "insubordination". Curiously, my dad also bears this distinction.&lt;br /&gt;&lt;br /&gt;3. Like Foxy, I haven't always been a math-nut. In fact I was well into high school before I discovered my niche subject. High school math classes are a surefire way to make anyone hate math, and it wasn't until I acquired an interest independently that I decided to pursue serious study and eventually become obsessed.&lt;br /&gt;&lt;br /&gt;4. I left high school with an attitude and reputation 180 degrees from the one I entered with. When I got into high school I was disillusioned, antisocial and developed a reputation for being hotheaded. That led to a pretty rocky relationship with my teachers, most of whom though I was more or less "wasting my intelligence". Events proceeding from teachers discovering some "disturbing" writing in my notebooks up to a hospitalization (don't really want to go into the details) changed things. My teachers and parents really intervened to help steer me straight, and my interaction on that level made me realize how skewed my perspective of the world was from the years of ostracism and harrassment I endured from my peers from my first day of school (due to my "eccentric behavior", as is typical in such cases).&lt;br /&gt;&lt;br /&gt;5. I play a lot of Japanese video games, and even import a game or two occasionally (I have Japanese copies of &lt;i&gt;Ikaruga&lt;/i&gt; and &lt;i&gt;Power Stone 2&lt;/i&gt; for the Dreamcast). Old-school is the best, with game-legacies like &lt;span style="font-style:italic;"&gt;Contra&lt;/span&gt;, &lt;span style="font-style:italic;"&gt;Gunstar Heroes&lt;/span&gt;, &lt;span style="font-style:italic;"&gt;Metal Slug&lt;/span&gt;, &lt;span style="font-style:italic;"&gt;Castlevania&lt;/span&gt;, and &lt;span style="font-style:italic;"&gt;Radiant Silvergun&lt;/span&gt; coming out way above modern stuff like &lt;span style="font-style:italic;"&gt;Grand Theft Auto III+&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;6. Every computer I've owned from the second onward (excluding the one Mac workstation I've owned) has been built from off the shelf parts, and every one from the fourth onward has had GNU/Linux in some form either exclusively or with other operating systems. My first computer, which to date is the only one I've ever owned that was bought from a white-box manufacturer, was a K-Pro IBM compatible from the late 80's, given to me by my dad.&lt;br /&gt;&lt;br /&gt;7. I love Italian food in all of it's forms, but you could probably already guess that. I hate any kind of tomato with meat in it, however (I don't hate meat, just meat sauce). IMO the best kind of sauce involves fire-roasted tomato, with a strong garlic flavor.&lt;br /&gt;&lt;br /&gt;8. I'm addicted to reading. Often times I get so wrapped-up in reading things and get lost in time the same way I (and many others) get lost in video games.&lt;br /&gt;&lt;br /&gt;Well, that's done. For tagging, I'm just going tag anyone who reads the blog, which he is correct in saying is probably around 8 people. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-2412132061297968686?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/2412132061297968686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=2412132061297968686' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2412132061297968686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2412132061297968686'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/06/8-random-facts-about-tyler.html' title='8 Random Facts About a Tyler'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-6855601994908806122</id><published>2007-06-28T16:19:00.000-04:00</published><updated>2007-06-28T16:23:18.474-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Time Travel'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Time Traveling Sequence</title><content type='html'>I should be very interested in a sequence of numbers &lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?a_k" align="middle" border="0" /&gt; for k = 1, 2, 3, ... such that&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%200%20=%20%5Csum_%7Bn%20=%201%7D%5E%5Cinfty%20%5Cfrac%7Ba_%7B2n%20+%20k%7D%282n%20+%20k%29%21%7D%7B%282n%20+%201%29%21%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;is true for any k.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-6855601994908806122?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/6855601994908806122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=6855601994908806122' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/6855601994908806122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/6855601994908806122'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/06/time-traveling-sequence.html' title='Time Traveling Sequence'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-8947456617127450614</id><published>2007-06-28T14:23:00.000-04:00</published><updated>2007-06-28T15:43:04.612-04:00</updated><title type='text'>Webster Trolls My Blog</title><content type='html'>Well, well well. I go to my Haloscan account to delete a spam message and I find that Webster, who made an &lt;a href="http://endogenousretrovirus.blogspot.com/2007/06/its-tiny-fishy-but-i-finally-caught-one.html"&gt;appearance at ERV receently&lt;/a&gt;, has now trolled my blog under the radar. Well, he's just as stupid and ill informed here as he was there, so on the fisking:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"The "no useful solutions" mention was to show that Dawkins's model is likely to get at least something right even without figuring in any selection."&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;No, he's not. The selective mechanism is what winnows down the solution. Random iterations across 29 character spaces without any selection from the results isn't likely to give you "METHINKS IT IS LIKE A WEASEL".&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;"It is far from meaningless to point out that Dawkins's little program is deterministic. The evolution portrayed therein does not merely have a purpose, it has an *end* already built in from the beginning -- in other words, it only models design! Remember Michelangelo's description of how he sculpted Moses? Paraphrased, it went like this: "I chisel away whatever does not look like Moses." In this program, the computer "chisels away" whatever does not look like the weasel words."&lt;br /&gt;b(x = 3) = 6.48 %&lt;br /&gt;…&lt;br /&gt;prob(x = 2 = 8.35 x 10^(-41) (exp notation added)"&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Dude, have you even taken a basic probability course? What they gave were not the space of all possible outcomes &lt;b&gt;of a random iteration that completely discounts selection&lt;/b&gt; but the probability of finding a solution given Dawkins selection criteria. One is a combinatorial calculation (one often used to give misleading ideas on the probability of evolutionary outcomes) one is statistical. They were, in other words, dishonestly claiming some discrepency between Dawkins "deterministic" program and "random" evolution. In the latter they usually discount selection to present ridiculously low probabilities for "randomly" getting a protein or some other feature. Evolution is &lt;i&gt;not random&lt;/i&gt;, it is selective.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;And that is why the sculptor analogy is flawed. A culptor doesn't operate by randomly poking away at a stone and only keeping those changes that look like a given target, he winnows dows a static target. Evolution operates by tossing up concepts and culling the pool down through differential reproductive success.&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;Bzzzzzt. You're the one wrong again! Have you ever heard of extinction? That's when no organism in the evolving population remains sufficiently viable to carry on. As far as I know, it still happens, even in an evolutionary paradigm, right? OK, so Dr. Batten's point is that few (if any) GAs account for that possibility."&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Then he knows even less about GA's than I took him for, as extinction (or at least a rough analog for solutions to common mathematical or engineering hurdles) happens in your garden variety GA's as a matter of configuration (that's how they work). GA's maintain populations of solutions to given problems (often NP-hard problems as heuristic solutions) and those that get out-performed are killed off. However, if you don't take into account heredity/retention, which Batten blatantly ignores, you don't have any evolutionary process.&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;"Actually, the selection coefficient is *highly* relevant, and it relates to much more than the speed of the algorithm. Even a favorable mutation, if the selection coefficient is reasonable, is unlikely to propagate more than a few generations, due to genetic drift. A selection coefficient of 1 (or anything like that) distorts the model beyond any hope of utility."&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;I never said it only "related" to the speed of the algorithm, and I didn't say that selection coefficients themselves weren't relevant to GA's. I said it was increased to make the algorithm operate at a faster speed. Really, have you ever heard of running-time complexity analysis? A computer algorithm that took, oh say, an interval on geological time scale to operate wouldn't exactly be considered "efficient". It's an &lt;i&gt;irrelevant&lt;/i&gt; observation to say that selection coefficients have to be higher for something that has to find a solution exponentially more quickly.&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;"And your precious AVIDA is a red herring, since the results were, once again, programmed in from the beginning, though more subtly than in the Dawkins example."&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Point out exactly where the results were "programmed from the beginning" in AVIDA.&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;"Of course, there is no purpose in evolution, just random mutations within DNA," according to NOVA. MIT Professor Manolis Kellis: "Evolution doesn't have a purpose." Individual creatures may have purposes, but evolution is a description of an impersonal process, not an anthropomorphized Force."&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Setting aside the probability that this is a serious quote-mine, it looks like he's talking about purpose in a teleological sense (judging by his use of impersonal) rather than a mechanistic sense. This is nothing but flagrant equivocation.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-8947456617127450614?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/8947456617127450614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=8947456617127450614' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8947456617127450614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8947456617127450614'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/06/webster-trolls-my-blog.html' title='Webster Trolls My Blog'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-1766705852461309525</id><published>2007-06-28T00:07:00.000-04:00</published><updated>2007-06-28T01:15:54.015-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unsolved Problems'/><title type='text'>8 Random Things About A Fox</title><content type='html'>&lt;a href=http://endogenousretrovirus.blogspot.com/2007/06/oh-dear-tagged-twice.html&gt;Tagged&lt;/a&gt; by ERV, that sly vixen. Eight Random Things about me.&lt;br /&gt;&lt;br /&gt;First the rules.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;We have to post these rules before we give you the facts.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Players start with eight random facts/habits about themselves.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;People who are tagged need to write their own blog about their eight things and post these rules.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;At the end of your blog, you need to choose eight people to get tagged and list their names.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Don’t forget to leave them a comment telling them they’re tagged, and to read your blog.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Eight things. Eight is a good number. 8 is 2&lt;sup&gt;3&lt;/sup&gt;. Consider too, 3&lt;sup&gt;2&lt;/sup&gt; = 9. I do believe I've read somewhere that 2&lt;sup&gt;3&lt;/sup&gt; and and 3&lt;sup&gt;2&lt;/sup&gt; are the only non-trivial integer powers separated by 1. Which is neat. Anyway.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Favourite number is 4 - the only number that is both the sum and product of its prime factors.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The fox was not my first form, and it shall not be my last. And whoever shall live and believe in me shall receive eternal life.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I loooove turning left. It's like a really good stretch.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I run Windows XP on my laptop. And have never had an issue with it. Never. Blue Screens, Freezeups, nothing. No security problems ... it's just ... it works.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Heroes include, in no particular order, the Doctor and DadFox.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I have two memories that I can't really explain, from my childhood. In each case, I was flying.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I've seen absolutely loads of movies. Loads. I can name over 600 actors. I've seen all kinds of movies. I've seen all eight &lt;a href=http://us.imdb.com/title/tt0077651/&gt;Halloween&lt;/a&gt; movies. Don't see number five - it's so not worth it. I've seen movies that made me want to stop watching. The original &lt;a href=http://us.imdb.com/title/tt0080130/&gt;When A Stranger Calls&lt;/a&gt;. The new &lt;a href=http://us.imdb.com/title/tt0324216/&gt;Texas Chainsaw Massacre&lt;/a&gt;. I've seen movies that I never want to see again. This includes, but is not limited to &lt;a href=http://us.imdb.com/title/tt0102569/&gt;Nymphoid Barbarian in Dinosaur Hell&lt;/a&gt;, &lt;a href=http://us.imdb.com/title/tt0311361/&gt;Jesus Christ: Vampire Hunter&lt;/a&gt;, &lt;a href=http://us.imdb.com/title/tt0055106/&gt;Werewolf in a Girl's Dormitory&lt;/a&gt;, and &lt;a href=http://us.imdb.com/title/tt0340855/&gt;Monster&lt;/a&gt;. However - HOWEVER - the only movie I recall consciously not finishing is &lt;a href=http://us.imdb.com/title/tt0330795/&gt;Python II&lt;/a&gt;. No reason. Just ... I didn't finish it. Huh.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Up until about ... 5th or 6th grade, I was not a math sort. I read. I read loads. We used to keep reading logs, and every Monday I would bring in just a huge stack of books that I'd read. I read everything. So many books. So many. I can barely remember them now. Nothing stands out. Then ... I just stopped. I remember the first book I bought that I didn't read. P.D. James' &lt;i&gt;Death of an Expert Witness&lt;/i&gt;. I'll get to it someday. And then, shortly after I stopped ... math - BAM. And here I am.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;I tag ... anyone who reads this blog. Which has to be at least eight people. And Dick Cheney.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-1766705852461309525?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/1766705852461309525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=1766705852461309525' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1766705852461309525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/1766705852461309525'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/06/8-random-things-about-fox.html' title='8 Random Things About A Fox'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-3473769513386837715</id><published>2007-06-27T13:45:00.000-04:00</published><updated>2007-06-27T13:47:29.360-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Flying Blind</title><content type='html'>100 people are waiting to board a plane, each with an assigned seat. The plane has 100 seats, so the plane is to be completely filled. One of the passengers is blind, and thus boards first. The rest of the people have queued up in a random order, to enter the plane one at a time. Now, being blind, the man cannot find his own seat, and thus selects a seat at random. It may be his seat, but of course it is much more likely that it is not. As the next person boards, he tries to take his assigned seat. If the blind man took his seat, he chooses a seat at random and sits there. Each person boards the plane in the same way, taking there assigned seat, or choosing one of the remaining seats at random.&lt;br /&gt;&lt;br /&gt;All that being so, what are the chances the very last person to board gets his own seat?&lt;br /&gt;&lt;br /&gt;Bonus points for brevity, creativity of solution, and drawing in as much esoteric math as possible. 10+ automatic bonus for each transcendental number you use. Points will be deducted for reliance on supernatural entities.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-3473769513386837715?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/3473769513386837715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=3473769513386837715' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/3473769513386837715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/3473769513386837715'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/06/flying-blind.html' title='Flying Blind'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-6132806853142921066</id><published>2007-06-26T10:47:00.000-04:00</published><updated>2007-06-26T11:48:16.344-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Proof'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Neat Recursive Function</title><content type='html'>I have to say, one of my favourite things about the banner is that it looks like I have a little 'i' on my nose. I wonder what that means, philosophically.&lt;br /&gt;&lt;br /&gt;But, take the function P(n). We'll define P(1) = 1, and P(n) is defined as the sum of the products P(a)*P(b) such that a + b = n, for all a, b. More succinctly,&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?P%28n%29%20=%20%5Csum_%7Bi%20=%201%7D%5E%7Bn%20-%201%7D%20P%28i%29P%28n%20-%20i%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?P%281%29%20=%201" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;So, P(2) = P(1)P(1). P(3) = P(1)P(2) + P(2)P(1). P(4) = P(1)P(3) + P(2)P(2) + P(3)P(1). And on and on and on. Actually calculating each value, you produce the sequence&lt;br /&gt;&lt;center&gt;&lt;br /&gt;1, 1, 2, 5, 14, 42, 132, 429, 1430, ...&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;The function itself interests me in a number of ways. First, theres the matter of what the function means. It seems like there's an interesting combinatorial interpretation I'm just not getting. For example, suppose P(n) is the number of ways of grabbing n many objects in two grabs. Take P(4), for example. In the first grab, you could get 3 objects, then 1 in the second. Or 2, then 2, or 3 and 1. And the total number of ways is the sum of the products of the number of ways to grab things in each grab. I'm not sure how well that kind of interpretation holds up though, since recursively you would come out with 'half grabs', or something like that. However, combinatorics has never been a strong suit of mine.&lt;br /&gt;&lt;br /&gt;But what we're interested in is deriving a non-recursive form of the function. Consider, for example, f(n) = n*f(n-1) and f(1) = 1. A simple recursive function. Unwrapping it, we get, for f(4) for example, f(4) = 4*f(3) = 4*3*f(2) = 4*3*2*f(1) = 4*3*2*1. That is, of course, 4!. For any n, you can show that f(n) = n!. We want a similar non-recursive formula for P(n).&lt;br /&gt;&lt;br /&gt;Now, like I said, combinatorics has not been my strong suit. So this is very much more 'math experimentation' than any kind of logical working out and problem solving. Which of course makes me despair for my mathematical ability. I'm such an insecure fox. But the function definition, as it stands, is simply ridiculously complicated. To solve for a non-recursive form, we would want some way of unwrapping it, making it less recursive, or separating one term from all the other terms before it. As it stands now, because of the ridiculous amount of self-reference, it's very hard to do anything with that function in the form it is. So ... we're going to try a different approach.&lt;br /&gt;&lt;br /&gt;First off, it's interesting to note how fast the values grow in the sequence. In 'standard' sequences, this would normally be indicative of some kind of exponential or factorial growth. In either case, it is interesting to look at the ratio of successive terms in the sequence. Doing so with the first 15 P(n), and plotting them, we get&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_08B0rrzqpZ0/RoEbZfFZMzI/AAAAAAAAAJE/VSwvwXVBR5E/s1600-h/index_2.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_08B0rrzqpZ0/RoEbZfFZMzI/AAAAAAAAAJE/VSwvwXVBR5E/s320/index_2.gif" alt="" id="BLOGGER_PHOTO_ID_5080371979305431858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_08B0rrzqpZ0/RoEbuvFZM0I/AAAAAAAAAJM/Q_WXelSy8Ro/s1600-h/index_4.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_08B0rrzqpZ0/RoEbuvFZM0I/AAAAAAAAAJM/Q_WXelSy8Ro/s320/index_4.gif" alt="" id="BLOGGER_PHOTO_ID_5080372344377652034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Now, I don't know about you, but it certainly looks like a familiar shape. At the very least, it looks like it's going into a horizontal asymptote, though I admit it could be logarithmic. It looks like it's growing too slowly for logarithmic, though.&lt;br /&gt;&lt;br /&gt;Because of the high level of recursion in the function definition, it becomes impractical to calculate more than about P(16) in Mathematica, since the number of recursive calls and subrecursive calls grows so rapidly for P(n) as n increases. This is because when P(n) is calculated, P(n) depends on every value of P from 1 to n-1, and each of those must be calculated, but each of those depends on other values of P, which also must be calculated. It's absolutely titanic.&lt;br /&gt;&lt;br /&gt;A much better approach is to save each value of P(n) as it is calculated, using to calculate further terms. Writing up a quick ruby program,&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;vals = [1.0]&lt;br /&gt;2.upto(200) do |n|&lt;br /&gt;total = 0&lt;br /&gt;1.upto(n - 1) do |i|&lt;br /&gt;total += vals[i - 1]*vals[n - i - 1]&lt;br /&gt;end&lt;br /&gt;puts total/vals.last&lt;br /&gt;vals.push(total)&lt;br /&gt;end&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Several hundred terms can be calculated in a snap (though the size of the terms rapidly exceeds the largest allowable number in Ruby). Looking at the ratios of successive terms, it appears that P(n+1)/P(n) approaches 4. The program gets into the 3.98 range before crashing because the numbers are so titanic.&lt;br /&gt;&lt;br /&gt;So we'll assume that the ratio limits itself to 4. In that case, it is interesting to consider 4 - P(n+1)/P(n). The first 15 or so terms are calculated and plotted below.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_08B0rrzqpZ0/RoEf3fFZM1I/AAAAAAAAAJU/dkUvjI6Mb-4/s1600-h/index_7.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_08B0rrzqpZ0/RoEf3fFZM1I/AAAAAAAAAJU/dkUvjI6Mb-4/s320/index_7.gif" alt="" id="BLOGGER_PHOTO_ID_5080376892748018514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_08B0rrzqpZ0/RoEgJvFZM2I/AAAAAAAAAJc/rxHE8Vd7B9I/s1600-h/index_9.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_08B0rrzqpZ0/RoEgJvFZM2I/AAAAAAAAAJc/rxHE8Vd7B9I/s320/index_9.gif" alt="" id="BLOGGER_PHOTO_ID_5080377206280631138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Now it looks even more familiar. I'd say that function is something related to 1/n or something similar. 1/n&lt;sup&gt;2&lt;/sup&gt;, some sort of rational function. Whatever it is, though, it would be interesting to look at the reciprocal. Plotting the reciprocal would give us an idea of what the denominator of that function looks like.&lt;br /&gt;&lt;br /&gt;And so we plot 1/(4 - P(n+1)/P(n)) for the first few values of n. And we get the following.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_08B0rrzqpZ0/RoEhMfFZM3I/AAAAAAAAAJk/MnLFJlxI3og/s1600-h/index_15.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_08B0rrzqpZ0/RoEhMfFZM3I/AAAAAAAAAJk/MnLFJlxI3og/s320/index_15.gif" alt="" id="BLOGGER_PHOTO_ID_5080378353036899186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_08B0rrzqpZ0/RoEhVfFZM4I/AAAAAAAAAJs/_fgXgSCTRLA/s1600-h/index_12.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_08B0rrzqpZ0/RoEhVfFZM4I/AAAAAAAAAJs/_fgXgSCTRLA/s320/index_12.gif" alt="" id="BLOGGER_PHOTO_ID_5080378507655721858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And that is awesome. It's so linear, it's ridiculous. And looking at the values, it's easy enough to calculate the formula of the line. 1/2 - 1/3 = 1/6. 2/3 - 1/2 = 1/6. The difference between any two terms is 1/6, just going by that list. So we're looking that (1/6)*n + A, where A is some constant. The first term is when n = 1, so (1/6)*1 + A = 1/3, gives A = 1/6. So we have the formula of the line, (1/6)n + (1/6), or, much more better, (n + 1)/6. BOOM.&lt;br /&gt;&lt;br /&gt;Now we can go crazy.&lt;br /&gt;&lt;br /&gt;Because we have a tentative formula,&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Cfrac%7B1%7D%7B4%20-%20%5Cfrac%7BP%28n+1%29%7D%7BP%28n%29%7D%7D%20=%20%5Cfrac%7Bn+1%7D%7B6%7D" align="middle" border="0" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Which is awesome, when we do the following.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Cfrac%7B1%7D%7B4%20-%20%5Cfrac%7BP%28n+1%29%7D%7BP%28n%29%7D%7D%20=%20%5Cfrac%7Bn%20+%201%7D%7B6%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?4%20-%20%5Cfrac%7BP%28n+1%29%7D%7BP%28n%29%7D%20=%20%5Cfrac%7B6%7D%7Bn+1%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Cfrac%7BP%28n+1%29%7D%7BP%28n%29%7D%20=%204%20-%20%5Cfrac%7B6%7D%7Bn%20+%201%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Cfrac%7BP%28n+1%29%7D%7BP%28n%29%7D%20=%20%5Cfrac%7B4n%20+%204%20-%206%7D%7Bn%20+%201%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Cfrac%7BP%28n+1%29%7D%7BP%28n%29%7D%20=%20%5Cfrac%7B4n%20-%202%7D%7Bn%20+%201%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?%5Cfrac%7BP%28n+1%29%7D%7BP%28n%29%7D%20=%20%5Cfrac%7B%282%29%282n%20-%201%29%7D%7Bn%20+%201%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?P%28n+1%29%20=%20P%28n%29%20%5Cfrac%7B%282%29%282n%20-%201%29%7D%7Bn%20+%201%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;And that is awesome. Because now we can do something like this.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?P%28n%29%20=%20%7B2*%5Cfrac%7B2%28n-1%29%20-%201%7D%7Bn%7D%7D*P%28n-1%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?P%28n%29%20=%20%7B2*%5Cfrac%7B2%28n-1%29%20-%201%7D%7Bn%7D%7D*%7B2*%5Cfrac%7B2%28n-2%29%20-%201%7D%7Bn-1%7D%7D*P%28n-2%29" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?P%28n%29%20=%20%7B2*%5Cfrac%7B2%28n-1%29%20-%201%7D%7Bn%7D%7D*%7B2*%5Cfrac%7B2%28n-2%29%20-%201%7D%7Bn-1%7D%7D*%7B2*%5Cfrac%7B2%28n-3%29%20-%201%7D%7Bn-2%7D%7D*%7B%20stuff%20%7D*%7BP%281%29%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Where 'stuff' is recursively nesting the factorial term, until reaching a call to P(1), which is 1. Now, all these terms can be grouped together. On the bottom, we have n*(n-1)*(n-2)*...*2*1, which is clearly just n!. On the top, we have a bunch of factors of 2. Each term in the main product carries a factor of 2. There are n-1 terms (since the nth term is P(1)), so there is a factor of 2&lt;sup&gt;n-1&lt;/sup&gt;. Now, the numerators of the fractions ... consider n = 4. Then as we combine the numerators, we'd get (2(4 - 1) - 1)(2(4 - 2)-1)(2(4 - 3)-1) or (5)(3)(1), or 5!!. You remember the double factorial ^.^ In general then, the numerator of the combined fractions will be the product of some sequence of odd numbers (since they all have the form 2*N - 1), and specifically, they will form an odd double factorial, (2n - 3)!!. And thus we have&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mimetex.cgi?P%28n%29%20=2%5E%7Bn-1%7D%5Cfrac%7B%282n-3%29%21%21%7D%7Bn%21%7D" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Check that out for yourself. It works.&lt;br /&gt;&lt;br /&gt;Now, I haven't yet 'proved' this is the non-recursive definition of the recursive function. It was only a complete guess that 4 was the value of the asymptote. If it had been some strange number, this certainly would not have worked. But, now that I have, tentatively, what the form is, it should make it that much easier to prove that it is equal to the recursive function.&lt;br /&gt;&lt;br /&gt;A project for later, I guess. Things to do, things to do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-6132806853142921066?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/6132806853142921066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=6132806853142921066' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/6132806853142921066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/6132806853142921066'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/06/neat-recursive-function.html' title='Neat Recursive Function'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_08B0rrzqpZ0/RoEbZfFZMzI/AAAAAAAAAJE/VSwvwXVBR5E/s72-c/index_2.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-2643608808824030527</id><published>2007-06-26T02:28:00.000-04:00</published><updated>2007-06-26T02:38:29.470-04:00</updated><title type='text'>Shorter Dan Riehl and Misha</title><content type='html'>&lt;a href="http://www.sadlyno.com/archives/6313.html"&gt;Slut had it comin'.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When I first caught wind of the murder of Jessie Davis and heard the details, the first thought that entered my mind was along the lines of "Jesus tap-dancin Christ on a stick, the media's found &lt;span style="font-style: italic;"&gt;another&lt;/span&gt; Simpson/Peterson/Halloway case to obsess over in lieu of real news!" After the initial reaction, I realized that this incident was more or less ripe for misogynistic victim-blaming from the usual suspects. Right blogistan did not dissappoint.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-2643608808824030527?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/2643608808824030527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=2643608808824030527' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2643608808824030527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/2643608808824030527'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/06/shorter-dan-riehl-and-misha.html' title='Shorter Dan Riehl and Misha'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-5895048299481772538</id><published>2007-06-26T01:16:00.000-04:00</published><updated>2007-06-26T01:42:53.528-04:00</updated><title type='text'>A Specified Persecution Complex</title><content type='html'>Recently &lt;a href="http://scienceblogs.com/pharyngula/2007/06/johannes_lerle_who_cares_if_he.php"&gt;some figures&lt;/a&gt; in the science blogopshere have commented on the case of Dr. Johannes Lerle, a recently jailed German pastor. Some religious &lt;a href="http://www.freerepublic.com/focus/f-news/1856051/posts"&gt;nuthouses&lt;/a&gt; in &lt;a href="http://usapartisan.blogspot.com/2007/06/secularist-europe-silences-pro-lifers.html"&gt;right blogistan&lt;/a&gt; have donned the cross and claimed it was due to persecution of him for his pro-life views. Now (Hat Tip: &lt;a href="http://homepage.mac.com/gerardharbison/blog/RWP_blog.html#ffs204515356"&gt;RWP&lt;/a&gt;) we see that Bill Dembski, the venerated mathematicial prodigy of the Intelligent Design movement (at least in the eyes of his sympathizers) has chimed in with the real cause of his arrest: &lt;a href="http://www.uncommondescent.com/intelligent-design/teaching-id-a-crime-against-humanity/"&gt;his advocacy of Intelligent Design Creationism.&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Except for one teeny-tiny problem: &lt;a href="http://homepage.mac.com/gerardharbison/blog/RWP_blog.html#bcw204497756"&gt;he was arrested for denial of Holocaust&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The lengths that a significant portion of Christians will go to justify their paranoia of persecution are nothing short of staggering. Just look at the comments to the turd that Dembski dropped over at UD, not even a hint of skepticism or the need for further investigation. After all, these are ID (and more specifically, Dembski) flaks, and they don't need further investigation because they already possess &lt;span style="font-weight:bold;"&gt;THE TRUTH&lt;/span&gt;: that there is a gigantic secularist conspiracy to jail them. The only effective response to such a persecution complex is as follows: "no, I'm not putting the nails in, come off the damn cross already."&lt;br /&gt;&lt;br /&gt;As for Holocaust denial prohibitions themselves, I harbor some ambivalence. On the one hand my American free speech absolutist sensibilities would never welcome such laws here, and I think that such laws have outlived their purpose and are now counterproductive in Germany. On the other hand I can certainly understand the political context in which they were instituted, and it would certainly be presumptuous of me, as a non-German, to attempt to dictate politics to those in a foreign socio-political culture. But even so, to claim that this is all a manifestation of a coordinated secularist effort to suppress Christianity is nothing but conspiratorial claptrap, and is quite indicative of the sort of political foes we are dealing with in our fight against the religious right.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-5895048299481772538?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/5895048299481772538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=5895048299481772538' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/5895048299481772538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/5895048299481772538'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/06/specified-persecution-complex.html' title='A Specified Persecution Complex'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-8368286556908875847</id><published>2007-06-25T02:40:00.000-04:00</published><updated>2007-06-25T03:41:00.209-04:00</updated><title type='text'>Reg Golb Medalion: George Gilder</title><content type='html'>In all the blogginess I've found myself engaging in over the past month or so, I've managed to neglect my semi-regular "super duper idiot" award. These sorts of awards are common on other blogs, examples are Ed Brayton with the &lt;a href="http://www.google.com/search?q=Robert+O%27Brien&amp;q=%28+site%3Ascienceblogs.com%2Fdispatches%2F+%29&amp;amp;btnG=Search"&gt;Robert O'Brien Trophy&lt;/a&gt; and PZ Myers with the &lt;a href="http://scienceblogs.com/pharyngula/fastsearch?order=date&amp;IncludeBlogs=7&amp;amp;search=ray+mummert"&gt;Pastor Ray Mummert Award&lt;/a&gt;. Mine is named after a rather pernicious and exceptionally stupid troll I encountered on Scientia Natura going by the hangle "Reg Golb". However, through the fog of blogging, writing code, sitting on my ass playing video games, working out and even occasionally doing social thingies, I've found a moron sanctimonious enough to warrant my personal accolate.&lt;br /&gt;&lt;br /&gt;Behold George Gilder, a Renaissance huckster whose developed a reputation in manifold disciplines as one of the most loathsome con-artists ever. As an &lt;a href="http://www.j-bradford-delong.net/movable_type/2003_archives/002521.html"&gt;economic pundit&lt;/a&gt; he's famous for wildly grandiose techno-utopianism that caused just about everybody taking his investment advise during the dot com boom to go broke. As a politico-economic pundit he's famous for inspiring Reaganomics. And nowadays we find him gibbering on about evolution and braying his ignorance far and wide on issues involving "intelligent design". But &lt;a href="http://www.jpost.com/servlet/Satellite?cid=1181813087456&amp;pagename=JPost%2FJPArticle%2FPrinter"&gt;this interview&lt;/a&gt;, courtesy of the incomparable &lt;a href="http://scienceblogs.com/pharyngula/2007/06/gilder_pontificates_in_the_jer.php"&gt;PZ Myers&lt;/a&gt;, collects all of his ignorance and stupidity into one, big, steaming and certainly RG Medalion worthy pile of shit:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;I believe that the universe is hierarchical, with creation at the top - the idea that there's a creator and that we, at our best, act in his image. This top-down model is what all of my work has in common. I sensed that the basic flaw and failure of feminism was its gradient toward pure animal passion with no procreative purpose. In economics, I believed that it was the supply that created the demand. In my examination of computers and telecom, and subsequently biology, I saw the same thing. That's really how I came into the intelligent design movement - through the recognition of this same structure that I'd previously examined in sexuality and economics, information theory, computer science and network theory.&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;I have no idea what he means when the universe is "hierachical" with "creation at the top". I would think, being the creationist loon that he is, would see everything as "creation". I get the sense that what he really intends to convey is the classical religious notion of god on top, angels below, man below them, women steeply down the ladder with animals and children slightly below them. And indeed, his view seems to be nostalgic for the 18th. century in every way, shape and form. For one thing, his knowledge of economics seems to have stopped somewhere before &lt;a href="http://www.google.com/url?sa=t&amp;amp;ct=res&amp;cd=1&amp;amp;amp;url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FVilfredo_Pareto&amp;ei=IXB_Rq7wHJDQeqqVjLYK&amp;amp;usg=AFQjCNH-MAb5mW1CMqr8fCjFWV-ISr3ZSA&amp;sig2=wQ2XehNDW4zXVVyYf_B9Jw"&gt;Pareto&lt;/a&gt; and &lt;a href="http://www.google.com/url?sa=t&amp;amp;ct=res&amp;cd=1&amp;amp;url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FAlfred_Marshall&amp;ei=TnB_Rpa5GZuOeZiribYK&amp;amp;usg=AFQjCNGzBl9yhBJhsG_LNQniPmlKMGzEcA&amp;amp;sig2=_d9WcUebSFXdY8G-Zl8CtQ"&gt;Marshall&lt;/a&gt;, both of whom (especially Marshall) would have scoffed at Gilder's horrendously economically innumerate claim that "supply creates demand". Hell, in viewing economics through the prism of "hierarchy", Gilder is far closer to Marx, Engels, and Weber than he is to Friedman or even Keynes. He may not even have gotten past Jean-Baptiste Say and Adam Smith, who pioneered the idea of the "invisible hand" that did not require direct government intervention to function.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;And his views on feminism are nothing short of the classic case of a white-male patriarch threatened by the fact that a substantial portion of the female population refuses to subordinate itself to the role of the baby factory. Shunning sex without "procreative purpose" is more or less another way of saying "you shall neither display nor feel enthusiasm for sex without male approval".&lt;/p&gt;&lt;br /&gt;&lt;p&gt;And as for his view on evolution, well, let's just say you'll probably need some padding to make sure you do not attempt to smash your head against a monitor:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;I'm a religious person. So are the Darwinians religious people: They believe in an anti-religion of materialism that liberates them to pursue pleasure any way they wish. It's the highest purpose of their existence. They thus believe in a random, futilitarian universe where - if they're existentialists - they might imagine that occasionally a heroic human being could assert some purpose above the froth of randomness, but in general, we're all doomed to decay and destruction. That's pretty much the philosophy, and it's debauched a whole century of intellect. I think we're going to transcend it in the 21st century&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Hmmm...let's see. The 20th. century not only saw tremendous achievements like the discovery of DNA, the sequencing of the human genome, the formulation of relativity and quantum theory, the transition of cosmology to a hard science, the rapid advance of computing and information theory, leading to mass communications and the internet, breaking the sonic-speed barrier in flight, the exploration of space, and the development of a true global economy, but has seen countless medical and other technological advancements that have doubled lifespans and eliminated previously devastating diseases. All the while, Gilder's intellectual hobgoblin of "Darwinism" has clearly been ascendent among the intelligentsia. That's more than I'd expect from a pradigm that had "debauched a whole century of intellect". Perhaps, much like the designer, such debachery is simply invisible and unknowable (and naturally, any elucidation of such is avoided at all costs by IDiots like Gilder).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So congrats, Georgie, you are the recipient of my latest iteration of "The Reg Golb Medalion". Stand tall and proud.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-8368286556908875847?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/8368286556908875847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=8368286556908875847' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8368286556908875847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8368286556908875847'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/06/reg-golb-medalion-george-gilder.html' title='Reg Golb Medalion: George Gilder'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-8579749043125483669</id><published>2007-06-22T21:12:00.000-04:00</published><updated>2007-06-22T21:19:49.045-04:00</updated><title type='text'>A Preview</title><content type='html'>I want to give a preview of the aesthetic direction we're taking on the next blog Foxy and I are working at. The blog itself will have much the same subject matter, of course, but the theme and style will be different. The art direction is heavily inspired by the Korean cartoon franchise &lt;a href="http://puccaclub.com/"&gt;Pucca&lt;/a&gt; and Nintendo games (primarily the various Mario incarnations). But that does not mean we're going kid-friendly, quite the opposite. My object is to mix cartoony cuteness with our usual enthusiasm for math and abrasive denunciation of teh stupid. I delegated the artistic responsibilities to my incomparably talented sister, &lt;a href="http://theonecallednio.deviantart.com/"&gt;Nio DiPietro&lt;/a&gt;. And since a picture is worth a thousand words, here is her first work on the project: our new banner.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/28631451@N00/594203143/" align="middle" title="Photo Sharing"&gt;&lt;img src="http://farm2.static.flickr.com/1094/594203143_1c4caf8cd0.jpg" alt="tylers banner" height="99" width="500" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-8579749043125483669?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/8579749043125483669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=8579749043125483669' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8579749043125483669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/8579749043125483669'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/06/preview.html' title='A Preview'/><author><name>TylerD</name><uri>http://www.blogger.com/profile/11811624673936151225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_3HcuFPeLJ1g/TRanST6DYBI/AAAAAAAAADc/BAWY32f1MYg/S220/photo1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm2.static.flickr.com/1094/594203143_1c4caf8cd0_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-5372457556242215442</id><published>2007-06-22T13:24:00.000-04:00</published><updated>2007-06-22T13:33:21.634-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='News'/><category scheme='http://www.blogger.com/atom/ns#' term='Politics'/><category scheme='http://www.blogger.com/atom/ns#' term='History'/><title type='text'>What Would Mulder Say?</title><content type='html'>According to the BBC, the CIA (I love three letter abbreviations) is going to be &lt;a href=http://news.bbc.co.uk/2/hi/americas/6229750.stm&gt;airing out its secrets&lt;/a&gt;, releasing several hundred pages worth of documented abuse from the 1950's through the 1970's. You'll be happy to know that this is part of the CIA's past. Nothing like the present, no.&lt;br /&gt;&lt;br /&gt;Not that I hate America or anything. I'm just fascinated by the way the CIA works. Somewhere around the FoxDen, I have this little green book that documents various CIA assassination attempts of various world leaders. Two of my favourites were the plan to put itching power in Castro's wet suit, and another attempt in which some little rebellious fellow was given a machine gun and sent into the room where the World Leader in question was having a conference. Managed to kill everyone - except the target. What a bunch of geniuses.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2319501700883201774-5372457556242215442?l=greedygreedyalgorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greedygreedyalgorithms.blogspot.com/feeds/5372457556242215442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2319501700883201774&amp;postID=5372457556242215442' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/5372457556242215442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2319501700883201774/posts/default/5372457556242215442'/><link rel='alternate' type='text/html' href='http://greedygreedyalgorithms.blogspot.com/2007/06/what-would-mulder-say.html' title='What Would Mulder Say?'/><author><name>Foxy</name><uri>http://www.blogger.com/profile/02991196104599490846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2319501700883201774.post-4231062268682311303</id><published>2007-06-21T02:15:00.001-04:00</published><updated>2007-06-21T04:14:18.177-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pictures'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Movie Universe Project</title><content type='html'>Starting out with the money shot,&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_08B0rrzqpZ0/RnoXk_FZMyI/AAAAAAAAAI8/YSO6XC0WmMY/s1600-h/index_10.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_08B0rrzqpZ0/RnoXk_FZMyI/AAAAAAAAAI8/YSO6XC0WmMY/s400/index_10.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5078397453990441762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;What we have here is a visualization of every actress in the IMDB, and their relationship, distance wise, with every other actress. Every point represents and actress. In effect, to produce this picture, every actress experienced a repulsion force from every other actress, but was attracted towards any actress she ever appeared in a movie with. The more actresses a given actress has appeared with, the stronger the interactions. Letting that system run, you produce the plot above.&lt;br /&gt;&lt;br /&gt;Now the whole project involved lots of difficulties and interesting tricks that I'd love to share. The number one problem, as you might well imagine, is that there are so bloody many of them. In the entirety of the movie universe, there are &lt;b&gt;939521&lt;/b&gt; actors and actresses. The text file of all the relevant data was 94.2 megabytes. BIG. So, how to enter in all that information? How to organize it? It's ... quite a lot really.&lt;br /&gt;&lt;br /&gt;And honestly, it's far too much information for this kind of project, when you have to deal with interactions between any actor and every other actor. So, it needs to be trimmed down. But how?&lt;br /&gt;&lt;br /&gt;The first step is to consider what information is being stored. The text file as is is just a list of the names of actors and actresses, and every movie they appear in. Every name appears once, but every movie can appear multiple times. And it all occurs as text. The thing about text in a program is that it is saved as an array of characters. Each character can be one of several hundred characters, depending on the encoding. So, a given movie name in a program actually encodes a LOT of information, which characters in what order, out of the many hundreds of combinations of characters. However ... what is significant in this program is not the movie name, but simply who is in which movie. The only use the movie serves is as a junction between all the actors and actresses in it. So, in a sense, what is significant is not the name of the movie - the name merely differentiates it from all other movies. What I'm trying to say is that we can ditch names, and replace them with the absolute minimum amount of information to specify that a given movie is THAT movie out of all &lt;b&gt;281308&lt;/b&gt; of them. And that minimum information is just an index number. Instead of specifying the movie name, give it a number between 1 and 281308, and let that number identify it. That's just 19ish bits of information for a single movie. The same can be done for actors and actresses. Replacing everything with an identifying number, at the very least, you do reduce the 94.2 MB file to 27.0 MB.&lt;br /&gt;&lt;br /&gt;Honestly, I have no idea at all if that speeds up the program any - I didn't run it with the raw text - but that kind of size reduction is still pretty cool to me.&lt;br /&gt;&lt;br /&gt;But, it's really still far too much.&lt;br /&gt;&lt;br /&gt;Second - we really have no need for actors who are not connected to anyone else. These are people who have only appeared ever in one movie, by themselves. As such, in the physical system we are trying to create, they would experience only a repulsive force from everyone else, and be shot out to infinity. That's of no use to us, so we could clip them out. However, the problem runs deeper than that. Consider movies that only included two actors, and they never appeared with anyone else. They would be connected, and thus attracted to each other, but the pair would be pushed out to infinity. Useless. So, generally, we can toss anyone who is not connected to the main group.&lt;br /&gt;&lt;br /&gt;Doing that is relatively straightforward, but at the same time is one of the most slick, basic programming tricks I've ever found. The level order traversal. I may be blowing it all out of proportion, but there you go. You can do some neat stuff with it. You start out with an empty queue. A queue is a curious sort of data structure, First In, First Out. It's a list, with only one access point, and only one entry point. You insert data in the back, and it comes out the front in the order you inserted it. First in, first out. Picking someone who you know to be in the main group (there's really no other choice but Kevin Bacon), you insert him into the queue. Then you enter your main loop. This loop will run while the queue is not empty. First, it removes the first person from the queue. Then it goes through, and visits each of that persons movies. For each movie, it takes every person who is in that movie, and inserts them in order into the queue. We'll say that when a person has been removed from the queue (such a fun word), and all their associates inserted, that person has been 'found'. When someone has been inserted into the queue but not yet been 'found', they are simply 'inserted'. Then the loop repeats, taking the next person from the queue. Once everyone has been removed from the queue, everyone who is 'found' is connected, so save all that, and you can discard anyone who was not 'found'.&lt;br /&gt;&lt;br /&gt;Now, it is possible here to enter into a infinite loop. If someone already found were inserted in the loop again, it would repeat, inserting the same people again and again and again, you'd run out of memory, and the program would crash. As we're already at the upper limits of memory here (for my system, at least), that would be a bad thing. So we need a way to determine whether or not someone has already been found. And a neat way to do this is with a hash. A hash is probably my favourite data structure of all time. The way it works is with two pieces of data - a key, and a value. The hash takes the key, whatever it is, a number, a string of text, whatever, and uses it to calculate a location in memory, and then stores the value at that location. If you want to access the value again, you simply pass the hash the key, and it will grab the value for you. If you pass it a key for which it has
