<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Overheard In Providence &#187; computer science</title>
	<atom:link href="http://www.overheardinprovidence.com/category/computer-science/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.overheardinprovidence.com</link>
	<description>A blog by EERac</description>
	<lastBuildDate>Thu, 03 Jun 2010 01:19:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>How Robots are Born</title>
		<link>http://www.overheardinprovidence.com/2009/02/09/how-robots-are-born/</link>
		<comments>http://www.overheardinprovidence.com/2009/02/09/how-robots-are-born/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 20:05:58 +0000</pubDate>
		<dc:creator>eerac</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[computer science]]></category>
		<category><![CDATA[robotics]]></category>

		<guid isPermaLink="false">http://www.overheardinprovidence.com/?p=215</guid>
		<description><![CDATA[Via Ezra, then Matt, I&#8217;m reminded of Max Dean and Raffaello D&#8217;Andrea&#8217;s self-healing chair:

Really though, I find their earlier work, The Table: Childhood, to be the superior piece of autonomous furniture artwork (though less impressive technically).

On a more pragmatic note, Matt seems to have quelled his typical worries over an imminent robot uprising. Instead he [...]]]></description>
			<content:encoded><![CDATA[<p>Via <a href="http://www.prospect.org/csnc/blogs/ezraklein_archive?month=02&#038;year=2009&#038;base_name=from_chair_to_terminator" onclick="javascript:urchinTracker ('/outbound/article/www.prospect.org');">Ezra</a>, then <a href="http://yglesias.thinkprogress.org/archives/2009/02/robots_and_darpa.php#comment-1092516" onclick="javascript:urchinTracker ('/outbound/article/yglesias.thinkprogress.org');">Matt</a>, I&#8217;m reminded of Max Dean and Raffaello D&#8217;Andrea&#8217;s self-healing chair:</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/vlXh8RvvcuI&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/vlXh8RvvcuI&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>Really though, I find their earlier work, <i>The Table: Childhood</i>, to be the superior piece of autonomous furniture artwork (though less impressive technically).</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/QavoKfrm1hw&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/QavoKfrm1hw&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>On a more pragmatic note, Matt seems to have quelled his typical worries over an imminent robot uprising. Instead he expresses concern that most robotics work is being funded by DARPA, and thus conducted with military applications in mind.</p>
<p>My impression, as a CS graduate student, is that DARPA (as oppose to NSF or NIH) funded research has access to much more money, but also more demands/pressure. This wasn’t always the case, and I do get the sense that attitudes toward DARPA funding has soured some in the past decade.</p>
<p>Getting an NSF grant is quite competitive, and hence professors tend to devote a lot of their time to grant writing. Also, a typical grant is not that large (say enough to support one or two graduate students for a few years), but once you have a grant, you need only submit annual progress updates, which are typically brief. The main “accountability factor” for such grants is one&#8217;s reputation. If you don&#8217;t publish valuable results, you&#8217;ll have a hard time getting future funding.</p>
<p>In contrast, DARPA grants can provide much larger sums of money for large projects of military interest (for example, <a href="http://www.popularmechanics.com/technology/industry/4224764.html?series=37" onclick="javascript:urchinTracker ('/outbound/article/www.popularmechanics.com');">bionic arms</a>). Grant recipients, however, are likely required to produce quarterly progress updates, travel to progress reviews, and be available for meetings/presentations. As such, DARPA funded research is more susceptible to external pressure. Obviously this isn&#8217;t necessarily a bad thing, but it&#8217;s enough to make some academics reluctant.</p>
<p>In the case of robotics, I do think a lot of fundamental tools (for example, <a href="http://blog.wired.com/defense/2008/02/darpa-wants-sup.html" onclick="javascript:urchinTracker ('/outbound/article/blog.wired.com');">better object recognition</a>, <a href="http://www.darpa.mil/grandchallenge/index.asp" onclick="javascript:urchinTracker ('/outbound/article/www.darpa.mil');">automatic path planning</a>, <a href="http://www.popularmechanics.com/technology/industry/4224764.html?series=37" onclick="javascript:urchinTracker ('/outbound/article/www.popularmechanics.com');">object manipulation</a>) could be developed in the context of a DARPA grant. The primary difference would be that the military provides access to fancier hardware. For example, <a href="http://store.irobot.com/corp/index.jsp" onclick="javascript:urchinTracker ('/outbound/article/store.irobot.com');">iRobot</a> makes small, inexpensive <a href="http://store.irobot.com/home/index.jsp" onclick="javascript:urchinTracker ('/outbound/article/store.irobot.com');">vacuums</a> for consumers, and rugged but pricey <a href="http://www.irobot.com/sp.cfm?pageid=171" onclick="javascript:urchinTracker ('/outbound/article/www.irobot.com');">PackBots</a> for the military (they&#8217;re <a href="http://www.youtube.com/watch?v=eaP0waiz43w" onclick="javascript:urchinTracker ('/outbound/article/www.youtube.com');">built Ford tough</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.overheardinprovidence.com/2009/02/09/how-robots-are-born/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Computational Complexity part 2</title>
		<link>http://www.overheardinprovidence.com/2008/06/20/computational-complexity-part-2/</link>
		<comments>http://www.overheardinprovidence.com/2008/06/20/computational-complexity-part-2/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 04:52:46 +0000</pubDate>
		<dc:creator>eerac</dc:creator>
				<category><![CDATA[computer science]]></category>
		<category><![CDATA[math]]></category>

		<guid isPermaLink="false">http://www.overheardinprovidence.com/?p=172</guid>
		<description><![CDATA[All you budding computer scientists our there are no doubt dying for me to resolve last months cliffhanger. As I stated last time, my goal with this series of posts is to describe the PCP Theorem in plain English. The PCP Theorem is a major result in the field of computational complexity, but to really [...]]]></description>
			<content:encoded><![CDATA[<p>All you budding computer scientists our there are no doubt dying for me to resolve last months <a href="http://www.overheardinprovidence.com/2008/05/16/what-is-this-computational-complexity/" >cliffhanger</a>. As I stated last time, my goal with this series of posts is to describe the <a href="http://en.wikipedia.org/wiki/PCP_theorem" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">PCP Theorem</a> in plain English. The PCP Theorem is a major result in the field of computational complexity, but to really understand what it says, some background is required.</p>
<p>Last post I explained that in computer science, we typically look for the fastest procedure, or &#8220;algorithm&#8221;, for solving a particular problem. Furthermore, the &#8220;complexity&#8221; of an algorithm is typically considered to be the number of steps it requires in relation to the length of its input. For example, you (and also a computer) can add two numbers with <i>n</i> digits using the approach you learned in elementary school. The number of steps required is proportional to <i>n</i>. Multiplying two <i>n</i> digit numbers, however, requires more steps (the standard approach uses about <i>n</i><sup>2</sup> steps).</p>
<p>The number of steps an algorithm takes is called its &#8220;running time&#8221;. When theoretical computer scientists study the running time of an algorithm, they aren&#8217;t concerned with the running time on a particular input, they are concerned with how to bound the running time in terms of <i>n</i>, the input length, for large inputs. This makes a lot of sense, since if I told you I&#8217;d discovered a way to multiply numbers very quickly, and told you that 318 x 702 = 223,236, you&#8217;d rightly suspect that I had just memorized that answer. A real test of my method would be to see how it performs on randomly chosen large inputs. When the running time of an algorithm is at most <i>n</i> raised to some power (for example, <i>n</i><sup>7</sup>), it is said to run in &#8220;polynomial time&#8221; (back in high school, you probably learned that <i>x</i> raised to a power is called a polynomial).<br />
<span id="more-172"></span></p>
<p>Any problem that can be solved by an algorithm that runs in polynomial time is said to be in a class of problems that is very sensibly denoted <b>P</b>. An algorithm that takes <i>n</i><sup>100</sup> steps to run will take a very long time to run, so it is not true that any problem in <b>P</b> can be solved quickly. In practice however, many many useful problems in <b>P</b> can be solved quickly. Furthermore, problems not in <b>P</b> can be extremely hard to solve even for relatively small inputs. For example, if an algorithms running time is 2<sup><i>n</i></sup>, it does not run in polynomial time, and in fact there isn&#8217;t even enough time in the universe for it to run on arbitrary inputs of length 100 (if each step of the algorithm takes only a nanosecond, executing 2<sup>100</sup> steps would still take far longer than the estimated current age of the age of the universe).</p>
<p>Over the last 40 years, diligent computer scientists have identified a host of practical problems that do not appear to be in <b>P</b>. Some of these problems, even though we do not think they can be solved in polynomial time, can still be <i>checked</i> in polynomial time. As an example, suppose you were asked to pack <i>n</i> objects in a box. You might need to try many arrangements of these objects before determining that they could, or could not, fit in the box. Notice, however, that if I told you they could fit in the box, I could prove this fact quite quickly by actually packing them in the box. Simply put, the box-packing task may be hard to solve, but a correct solution is easy to verify.</p>
<p>Box-packing makes for a nice example, but as explained in part one of this lengthy exposition, computers like numbers. Put another way, before a computer scientist can study a problem, it needs to be precisely specified using numbers (or at the very least, symbols). In the case of box-packing, each object can be described as a collection of points in space, and the end goal, fitting the objects in a box, can be described by a large number of mathematical relationships. These relationships, which assert that no point lies outside of the box, and no point from one object lies inside another object, hold true only when the objects are packed properly in the box. Clearly the use of numbers has made our nice example irritatingly complex!</p>
<p>To keep things simple, but still be precise, we can instead consider a related problem, which computer scientists call &#8220;subset-sum&#8221;. In subset-sum, you are given a list of <i>n</i> numbers and asked if there exists some subset of those numbers that adds up to a given target value. Similar to box-packing, this problem can be solved by trying all combinations of the numbers (of which there are 2<sup><i>n</i></sup>). A correct solution, however, can be verified quickly, since once a correct subset is revealed, adding it up takes very little time.</p>
<p>There are a whole host of problems that, like subset-sum and box-packing, appear hard to solve (i.e. not to be in <b>P</b>) but easy to verify (i.e. the task of verifying that a given solution is correct, is in <b>P</b>). Problems that can be verified (but not necessarily solved) in polynomial time belong to a class called <b>NP</b> (the &#8220;N&#8221; stands for <a href="http://en.wikipedia.org/wiki/Nondeterministic_algorithm" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">nondeterministic</a>, but that&#8217;s a whole other can of worms).</p>
<p>Any problem that can be solved in polynomial time can be verified in polynomial time (just re-solve the problem and make sure you get the same answer), so any problem in <b>P</b> is also in <b>NP</b>. The million dollar question (<a href="http://www.claymath.org/millennium/P_vs_NP/" onclick="javascript:urchinTracker ('/outbound/article/www.claymath.org');">literally</a>) is whether <b>P</b> = <b>NP</b>, meaning &#8220;Is every problem in <b>NP</b> also in <b>P</b>?&#8221; Computer scientists the world over strongly suspect that the answer is &#8220;no&#8221;, but no one has a proof, and in fact, no one even feels like they are anywhere close.</p>
<p>If someone were to prove that <b>P</b> is not equal to <b>NP</b> that person would necessarily prove that some problem in <b>NP</b> cannot be solved in polynomial time, but in fact, they would also prove something far stronger. Problems such as subset-sum and box-packing aren&#8217;t just in <b>NP</b>, they are &#8220;<b>NP</b>-complete</b>&#8220;. This means that they can both be restated in terms of each other. For example, in polynomial time, one could take the irritatingly complex box-packing problem that we alluded to above and transform it into a subset-sum problem. This can be done not just for the box-packing problem, but for <u>every single</u> problem in <b>NP</b>. As a result, if subset-sum, or any other <b>NP</b>-complete problem can be solved in polynomial time, so can every problem in <b>NP</b>. This means that if <b>P</b> does not equal <b>NP</b> (as computer scientists suspect), no <b>NP</b>-complete problem can be solved in polynomial time.</p>
<p>The existence of <b>NP</b>-complete problems was <a href="http://en.wikipedia.org/wiki/NP-complete#Background" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">first revealed</a> in 1971. Soon after, many <a href="http://en.wikipedia.org/wiki/Karp%27s_21_NP-complete_problems" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">well-known problems</a> were shown to be <b>NP</b>-complete. For example, the problem of finding the shortest route that visits a certain set of cities, called &#8220;traveling-salesperson&#8221;, is <b>NP</b>-complete. &#8220;Independent-set&#8221;, the problem of determining whether a party contains some set of <i>n</i> individuals such that no two have ever met, is as well.</p>
<p>It is fascinating a that broad class of well-known problems are all &#8220;equally hard&#8221;, meaning that either they are all in <b>P</b>, or none of them are. This is exactly the type of thing that gets theoretical computer scientists excited. Even though there is still no proof of whether or not <b>P</b> = <b>NP</b>, the search for a proof has led to further insights about the nature of solving problems. One of these, the PCP theorem, will be the focus of part three of this post.</p>
<p><b>A final note:</b> Since we do not expect that <b>P</b> = <b>NP</b>, we do not have algorithms that solve <b>NP</b>-complete problems in polynomial time. In practice, however, certain inputs to certain problems can still be solved fairly quickly. For example, subset-sum is easy to solve when the numbers involved are only one digit long. Also, in the real world, when someone has an <b>NP</b>-complete problem that they need to solve, it is often possible find a solution that is &#8220;close&#8221; to correct. For example, even when many large numbers are involved, subset-sum can be solved in polynomial time if one is only required to find a subset that adds up to within 10 percent of the target value. None-the-less, it is still easy to generate many, many examples of <b>NP</b>-complete problems that we do not have a way to solve in any reasonable amount of time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.overheardinprovidence.com/2008/06/20/computational-complexity-part-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>By chance, flawed</title>
		<link>http://www.overheardinprovidence.com/2008/05/27/by-chance-flawed/</link>
		<comments>http://www.overheardinprovidence.com/2008/05/27/by-chance-flawed/#comments</comments>
		<pubDate>Wed, 28 May 2008 02:45:56 +0000</pubDate>
		<dc:creator>eerac</dc:creator>
				<category><![CDATA[computer science]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[math]]></category>

		<guid isPermaLink="false">http://www.overheardinprovidence.com/?p=174</guid>
		<description><![CDATA[When you visit this blog, your computer sends a message to the computer that hosts this site. That computer, in turn, responds with the priceless content currently being displayed by your web browser. This simple exchange, in essence, is the purpose of the internet; it provides a way for computers talk.
With so very many computers [...]]]></description>
			<content:encoded><![CDATA[<p>When you visit this blog, your computer sends a message to the computer that hosts this site. That computer, in turn, responds with the priceless content currently being displayed by your web browser. This simple exchange, in essence, is the purpose of the internet; it provides a way for computers talk.</p>
<p>With so very many computers in the world, they cannot all be connected directly. Instead, messages between computers are routed around the globe by glorious web of intermediary computers, all working in tandem to get billions of information packets to their intended destinations. If it helps, you can imagine the whole network as an electronic version of UPS.</p>
<p>The beauty of this system is that it is decentralized, efficient, and robust. Lots of computers are all working together to send lots of information, and there is no single point of failure. A concern, however, is privacy. When your computer sends a message, the random assortment of computers that help deliver your message all have a chance to take a peek. If you are merely visiting this website, eavesdropping is hardly a concern. The content of this site is public, so there&#8217;s no problem with some nosey computer reading the sites content en route. Sometimes, however, your computer needs to send private information over the internet.</p>
<p>What if you send google your gmail your password? Or log in to your employer&#8217;s computer system? Or give amazon your credit card number? In all cases, the message you&#8217;re computer is sending needs to be kept secret. What&#8217;s needed is a way to put the message in some kind of &#8220;locked box&#8221;, and that&#8217;s where cryptography comes in. When private information is sent, the computers involved can encode their messages using some <a href="http://en.wikipedia.org/wiki/Public-key_cryptography" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">slightly fancy mathematics</a>. When done properly, only those two computers will be able to decode each others messages (i.e. open each others&#8217; boxes). The intermediate computers routing their messages will no longer be able to read their content.<br />
<span id="more-174"></span></p>
<p>Lots of folks write software that sends information over the internet, but most of these people are not about to learn how to write cryptographic protocols for securely sending messages in mathematically sealed boxes. Fortunately for everyone, there are standard tools available. One of them, called <a href="http://en.wikipedia.org/wiki/OpenSSL" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">OpenSSL</a>, implements a secure message transmission protocol called <a href="http://en.wikipedia.org/wiki/Secure_Sockets_Layer" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">SSL</a>.</p>
<p>Your computer uses SSL every time you visit a web address that begins with &#8220;https:&#8221; (instead of the standard &#8220;http&#8221;). When you see the &#8220;s&#8221;, it means that the messages your computer is sending and receiving are secure (i.e. inside a locked box). If you tell google your gmail password, and your computer is following the SSL protocol properly, your password will be safe from snoopers. Almost all software that sends private information over the internet relies on SSL. This (at least!) brings me to the point of this post.</p>
<p>Last week, the folks who maintain <a href="http://en.wikipedia.org/wiki/Debian" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">Debian</a>, a popular version of <a href="http://en.wikipedia.org/wiki/Linux" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">Linux</a>, announced that they had <a href="http://it.slashdot.org/article.pl?sid=08/05/13/1533212&#038;from=rss" onclick="javascript:urchinTracker ('/outbound/article/it.slashdot.org');">mistakenly altered</a> OpenSSL. As a result, for several years, programs running on a computer using Debian Linux (or a <a href="https://lists.ubuntu.com/archives/ubuntu-security-announce/2008-May/000705.html" onclick="javascript:urchinTracker ('/outbound/article/lists.ubuntu.com');">related distribution</a>), and relying on SSL, were critically flawed. Such programs were all sending their secure messages (as well as possibly generating user passwords) using a very small number of random numerical keys. As a result, the encrypted information could be decrypted (i.e. unlocked) by testing all possible keys. In other words, it&#8217;s as if OpenSSL, running on Debian Linux, was choosing all of its passwords from a very small dictionary.</p>
<p>Now most people use Windows or Mac OS X at home and at work, but many websites (and other internet services) run on computers using Linux, since it&#8217;s free and open source. When your computer sends secure information over the internet, however, you not only rely on your computer&#8217;s ability to use SSL correctly, but also on the computer you are communicating with. This computer is very likely to be running Linux, and though only certain versions of Linux were affected, this recently discovery speaks to a very serious problem. This recent (and massive) security flaw was introduced when some poorly informed developer (<a href="http://www.gergely.risko.hu/debian-dsa1571.en.html" onclick="javascript:urchinTracker ('/outbound/article/www.gergely.risko.hu');">lots more info here</a>, also <a href="http://www.links.org/?p=328" onclick="javascript:urchinTracker ('/outbound/article/www.links.org');">here</a>) modified a grand total of two (2) lines of codes. (and if you&#8217;re curious how this poor schlub got his position in the first place, <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=332498" onclick="javascript:urchinTracker ('/outbound/article/bugs.debian.org');">here&#8217;s your answer</a>)</p>
<p>If you care to read <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=363516" onclick="javascript:urchinTracker ('/outbound/article/bugs.debian.org');">this discussion thread</a> (which is quite technical), you&#8217;ll discover that the lines in question were causing a software debugging tool called <a href="http://en.wikipedia.org/wiki/Valgrind" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">Valgrind</a> to report errors. The errors were due to OpenSSL telling Linux to read information from a random location in memory. Valgrind was reporting this as a mistake, since normally when a program accesses a random locations in memory, it is a mistake. In this case, however, the random information was being used to generate a random key to securely encrypt information. When the developers told Linux to ignore the two lines of code, they prevented OpenSSL from properly generating random keys. As a result, internet-related programs running on Debian Linux were all encrypting messages using a very small number of keys, which in turn made the encrypted data very easy to unlock (provided the eavesdropper was aware of this shortcoming).</p>
<p>In the world of computers, finding a security flaw is not uncommon, and I wouldn&#8217;t normally spend time writing such a long post about such a technical subject. My concern, however, is that this security flaw has not gotten any attention outside of the world of <a href="http://www.channelregister.co.uk/2008/05/21/massive_debian_openssl_hangover/" onclick="javascript:urchinTracker ('/outbound/article/www.channelregister.co.uk');">nerdy</a> <a href="http://computerworld.com/action/article.do?command=viewArticleBasic&#038;taxonomyName=security&#038;articleId=9085980&#038;taxonomyId=17&#038;intsrc=kc_top" onclick="javascript:urchinTracker ('/outbound/article/computerworld.com');">websites</a>. It seems to me, however, that a computer security flaw of this magnitude (and of course the potential for even larger flaws) is a public policy issue.</p>
<p>A typical security flaw allows an intruder to gain access to a single computer, or perhaps a computer network, but this flaw does all that and more. With so many computers affected for such a long period of time, you have a real potential for economic disruption (dare I say, even a <a href="http://www.wired.com/politics/security/magazine/15-09/ff_estonia?currentPage=all" onclick="javascript:urchinTracker ('/outbound/article/www.wired.com');">cyberattack</a>).</p>
<p>Furthermore data encrypted by faulty versions of OpenSSL remains vulnerable even now that the flaw has been discovered (and hopefully on most computers, and faulty passwords, fixed). If someone were monitoring and recording encrypted internet communication (I imagine <a href="http://www.theatlantic.com/doc/200803/chinese-firewall" onclick="javascript:urchinTracker ('/outbound/article/www.theatlantic.com');">China does this</a>), they could retroactively use information about the OpenSSL flaw to decrypt all sorts of recorded data. Not only would private information be revealed, but compromised passwords would make additional computer systems vulnerable. Incidentally, <a href="http://en.wikipedia.org/wiki/Perfect_forward_secrecy" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">there are methods</a> for ensuring that encoded information cannot be discovered retroactively, but these methods are not necessarily used by OpenSSL.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.overheardinprovidence.com/2008/05/27/by-chance-flawed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What is this &#8220;Computational Complexity&#8221;</title>
		<link>http://www.overheardinprovidence.com/2008/05/16/what-is-this-computational-complexity/</link>
		<comments>http://www.overheardinprovidence.com/2008/05/16/what-is-this-computational-complexity/#comments</comments>
		<pubDate>Fri, 16 May 2008 20:02:50 +0000</pubDate>
		<dc:creator>eerac</dc:creator>
				<category><![CDATA[brown]]></category>
		<category><![CDATA[computer science]]></category>

		<guid isPermaLink="false">http://www.overheardinprovidence.com/?p=171</guid>
		<description><![CDATA[Last month I mentioned that I was helping teach CS 159, a class entitled &#8220;Introduction to Computational Complexity&#8221;. I also mentioned that my interest in this subject is one of the main reason I ended up majoring in computer science. I didn&#8217;t, however, get a chance to explain what computational complexity is. Now that the [...]]]></description>
			<content:encoded><![CDATA[<p>Last month <a href="http://www.overheardinprovidence.com/2008/04/16/an-update-from-computer-science-land/" >I mentioned</a> that I was helping teach <a href="http://en.wikipedia.org/wiki/PCP_theorem"url="http://www.cs.brown.edu/courses/csci1590/">CS 159</a>, a class entitled &#8220;Introduction to Computational Complexity&#8221;. I also mentioned that my interest in this subject is one of the main reason I ended up majoring in computer science. I didn&#8217;t, however, get a chance to explain what computational complexity is. Now that the class is over, I thought I&#8217;d write a few posts explaining one of the major topics I lectured on, the <a  onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">PCP Theorem</a> (PCP stands for Probabilistically Checkable Proofs).</p>
<p>For right now, I&#8217;m not even going to state this theorem, since understanding the theorem requires some background information. I&#8217;ll provide some of that background in this post, more next post, and then state the theorem in the third. Regardless, it&#8217;s not actually the statement of the PCP Theorem that&#8217;s important, it&#8217;s the consequences of the theorem. If you understand these consequences, you understand a lot of what theoretical computer science is about. Unfortunately I&#8217;ve never seen a plain English explanation of the theorem that is accessible to non-computer scientists. I&#8217;m hoping the next few posts will help fill this void.</p>
<p>The PCP Theorem, and complexity theory in general, is concerned with the resources required to solve certain problems. For example, how long does it take to multiply two numbers? Obviously if you do it by hand, it takes longer than if you use a calculator. What&#8217;s important, however, is that whether you use a pencil and paper, a calculator, or a super computer, the time it takes depends on the length of the numbers. Suppose you multiply two numbers with <i>n</i> digits each. Using the procedure you learned in elementary school, the amount of time it takes is going to be proportional to <i>n<sup>2</sup></i>. The same is true for a computer that has been programmed to use the same procedure. As I mentioned <a href="http://www.overheardinprovidence.com/2007/09/05/multiplication-made-easy/" >once before</a>, faster approaches are known, but these approaches as well can be executed by computers and humans alike.</p>
<p>In computer science (and in other fields too) we often try to identify the fastest procedure, or algorithm, to solve a given problem. Usually algorithms are described by writing a computer program, but this is just a formality. Once a problem has been specified in terms of numbers, or symbols, telling a computer how to solve it isn&#8217;t too different from telling a person how to. </p>
<p>You can tell a person to &#8220;find Rhode Island on a map&#8221;, but you can&#8217;t program a computer to do this unless you first specify how the map, and Rhode Island, are represented. If, however, you have a list of cities and the distances between them, you can program a computer to find the shortest route that visits each of the cities. The key is that the problem has been well defined using symbols. In a computer, if you want to something with images (or sounds, smells, etc&#8230;), you need to first represent them using combinations of symbols.</p>
<p>So here&#8217;s the general story: If you study computer science, you&#8217;ll come across with a whole host of nicely specified problems. You&#8217;ll learn that a computer can be programmed to solve these problems. Once you get the hang of it, you&#8217;ll see that the steps a computer performs when solving these problems are basically the same steps a person would perform. As a result, you&#8217;ll understand that it makes sense to study how hard a problem is by determining how many steps it takes to solve, given its length. The main goal of complexity theory is to try to understand why some problems are fundamentally harder to solve than others. So far, this has proved difficult, but complexity theorists have identified many problems that they strongly suspect are hard to solve. In fact, if you could prove that any one of these problems is hard to solve, you would simultaneously prove that all of them are hard to solve, and you would win <a href="http://www.claymath.org/millennium/P_vs_NP/" onclick="javascript:urchinTracker ('/outbound/article/www.claymath.org');">one million dollars</a>. More on that next time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.overheardinprovidence.com/2008/05/16/what-is-this-computational-complexity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An update from computer science land</title>
		<link>http://www.overheardinprovidence.com/2008/04/16/an-update-from-computer-science-land/</link>
		<comments>http://www.overheardinprovidence.com/2008/04/16/an-update-from-computer-science-land/#comments</comments>
		<pubDate>Wed, 16 Apr 2008 18:49:52 +0000</pubDate>
		<dc:creator>eerac</dc:creator>
				<category><![CDATA[brown]]></category>
		<category><![CDATA[computer science]]></category>
		<category><![CDATA[high school]]></category>

		<guid isPermaLink="false">http://www.overheardinprovidence.com/?p=167</guid>
		<description><![CDATA[Since the beginning of last week, I&#8217;ve been busy teaching my advisor&#8217;s class on computational complexity. Complexity theory isn&#8217;t really my area of research, but it&#8217;s definitely one of the reasons I became a computer science major. When the class is over I plan on blogging about some of the topics. People seem to have [...]]]></description>
			<content:encoded><![CDATA[<p>Since the beginning of last week, I&#8217;ve been busy <a href="http://www.cs.brown.edu/courses/csci1590/syllabus.html" onclick="javascript:urchinTracker ('/outbound/article/www.cs.brown.edu');">teaching</a> my advisor&#8217;s class on <a href="http://en.wikipedia.org/wiki/Computational_complexity_theory" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">computational complexity</a>. Complexity theory isn&#8217;t really my area of research, but it&#8217;s definitely one of the reasons I became a computer science major. When the class is over I plan on blogging about some of the topics. People seem to have the mistaken impression that computer science is all about computers, and I&#8217;d like to do more to help dispel that myth.</p>
<p>I took a bunch of programming classes in high school, but when I got to Brown, I decided to avoid computer science. I had liked learning about algorithms, the fastest ways to solve problems, how computers worked, but I hadn&#8217;t always liked the personality of my fellow students. Basically, a lot of them were big nerds, and I could never get behind their enthusiasm for mastering Linux commands.</p>
<p>As a freshman at Brown, I took a logic class where I learned that certain easy to state problems are <a href="http://en.wikipedia.org/wiki/Halting_problem" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">uncomputable</a>, meaning no systematic set of instructions can be used to solve them. More importantly, I learned that many people study the science of computation without actually writing programmings. The next year I decided to give computer science another shot, and one of my TAs (my buddy <a href="http://web.mit.edu/matulef/www/" onclick="javascript:urchinTracker ('/outbound/article/web.mit.edu');">Kevin</a>) invited me to join his group independent study project on computational complexity. After that, I was sold.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.overheardinprovidence.com/2008/04/16/an-update-from-computer-science-land/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Big State Blogging</title>
		<link>http://www.overheardinprovidence.com/2008/03/11/big-state-blogging/</link>
		<comments>http://www.overheardinprovidence.com/2008/03/11/big-state-blogging/#comments</comments>
		<pubDate>Wed, 12 Mar 2008 06:31:28 +0000</pubDate>
		<dc:creator>eerac</dc:creator>
				<category><![CDATA[computer science]]></category>
		<category><![CDATA[nanotechnology]]></category>
		<category><![CDATA[travel]]></category>

		<guid isPermaLink="false">http://www.overheardinprovidence.com/2008/03/11/big-state-blogging/</guid>
		<description><![CDATA[Ah to travel from the smallest state to the biggest state and back again. Actually I&#8217;m well aware that Alaska, not Texas, is the biggest state, and also I&#8217;m not back in Rhode Island yet, but hey, that&#8217;s my lead, live with it. I&#8217;ll really be back in Providence on thursday, although then it&#8217;s off [...]]]></description>
			<content:encoded><![CDATA[<p>Ah to travel from the smallest state to the biggest state and back again. Actually I&#8217;m well aware that Alaska, not Texas, is the biggest state, and also I&#8217;m not back in Rhode Island yet, but hey, that&#8217;s my lead, live with it. I&#8217;ll really be back in Providence on thursday, although then it&#8217;s off to NYC on saturday and finally Belize on sunday (oooooh, ahhhhhh).</p>
<p>So where am I staying until Thursday? Why the lovely <a href="http://doubletree1.hilton.com:80/en_US/dt/hotel/DFWCNDT-Doubletree-Hotel-Dallas-Campbell-Centre-Texas/index.do" onclick="javascript:urchinTracker ('/outbound/article/doubletree1.hilton.com:80');">Doubletree Hotel in Dallas</a> of course, as I&#8217;m currently attending the <a href="http://www.src.org" onclick="javascript:urchinTracker ('/outbound/article/www.src.org');">Semiconductor Research Corporation&#8217;s</a> (SRC) annual integrated systems review at <a href="http://www.smu.edu/" onclick="javascript:urchinTracker ('/outbound/article/www.smu.edu');">Southern Methodist University</a> (SMU). It is indeed an abrupt transition for someone coming from <a href="http://www.overheardinprovidence.com/2008/03/08/overheard-in-providence-goes-interactive/" >SXSW interactive</a> in Austin.</p>
<p>In retrospect, it seems silly that I didn&#8217;t write more about SXSW interactive, an eminently blogable conference, while I was there. I&#8217;ll correct this oversight tomorrow after my presentation at this SRC event. For now, I&#8217;ll note that my trip to Dallas has proved shockingly beneficial. At dinner I discovered that the engineering graduate student I was sitting next to had cited <a href="http://portal.acm.org/citation.cfm?doid=1233501.1233653" onclick="javascript:urchinTracker ('/outbound/article/portal.acm.org');">a paper of mine</a> in <a href="http://portal.acm.org/citation.cfm?id=1228909" onclick="javascript:urchinTracker ('/outbound/article/portal.acm.org');">his paper</a> on nanowire address discovery. This got me pretty excited, because I hardly ever meet anyone who works <a href="http://www.cs.brown.edu/~eerac/nanotechnology.html" onclick="javascript:urchinTracker ('/outbound/article/www.cs.brown.edu');">in my area of research,</a> and I was literally writing about address discovery the day I left for Texas. Also, before tonight, I only knew of <a href="http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1605223" onclick="javascript:urchinTracker ('/outbound/article/ieeexplore.ieee.org');">one other paper</a> on this subject.</p>
<p>Anyway, if conference summaries aren&#8217;t your thing, here&#8217;s a picture of the SMU&#8217;s ironically named <a href="http://www.smu.edu/newsinfo/releases/01123.html" onclick="javascript:urchinTracker ('/outbound/article/www.smu.edu');">life science building</a> (sorry about the hard to read photo).</p>
<p><img src="http://farm3.static.flickr.com/2090/2328646176_2f980b8fef.jpg"></p>
]]></content:encoded>
			<wfw:commentRss>http://www.overheardinprovidence.com/2008/03/11/big-state-blogging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>At last, a comic worthy of my office door</title>
		<link>http://www.overheardinprovidence.com/2007/11/13/at-last-a-comic-worthy-of-my-office-door/</link>
		<comments>http://www.overheardinprovidence.com/2007/11/13/at-last-a-comic-worthy-of-my-office-door/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 21:43:50 +0000</pubDate>
		<dc:creator>eerac</dc:creator>
				<category><![CDATA[comics]]></category>
		<category><![CDATA[computer science]]></category>

		<guid isPermaLink="false">http://www.overheardinprovidence.com/2007/11/13/at-last-a-comic-worthy-of-my-office-door/</guid>
		<description><![CDATA[Next time you&#8217;re wandering through the hallways of your local computer science department, just, you know, soaking in the atmosphere, you&#8217;ll no doubt feel compelled to read the various nerdy comics that students, professor and administrators have chosen to cut out and paste on their office doors (hopefully you like Dilbert). As a CS grad [...]]]></description>
			<content:encoded><![CDATA[<p>Next time you&#8217;re wandering through the hallways of your local computer science department, just, you know, soaking in the atmosphere, you&#8217;ll no doubt feel compelled to read the various nerdy comics that students, professor and administrators have chosen to cut out and paste on their office doors (hopefully you like <a href="http://www.dilbert.com/comics/dilbert/archive/" onclick="javascript:urchinTracker ('/outbound/article/www.dilbert.com');">Dilbert</a>). As a CS grad students, this is the highest honor I can bestow on a comic strip (particularly a <a href="http://2007.weblogawards.org/polls/best-comic-strip-1.php" onclick="javascript:urchinTracker ('/outbound/article/2007.weblogawards.org');">web comic strip</a> which doesn&#8217;t naturally exist in printed form). Today, for the first time, I am bestowing this honor on the <a href="http://xkcd.com/329/" onclick="javascript:urchinTracker ('/outbound/article/xkcd.com');">recent XKCD strip</a> shown below.</p>
<p><img src="http://imgs.xkcd.com/comics/turing_test.png"></p>
<p>Since this is a pretty big day for both me and XKCD, I though I should spend a few paragraphs explaining (to the non-CS types out there) exactly why this comic is so goddamn hilarious.</p>
<p>The <a href="http://en.wikipedia.org/wiki/Turing_test" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">Turing test</a> was originally proposed in 1950 by pioneering logician and computer scientist <a href="http://en.wikipedia.org/wiki/Alan_Turing" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">Alan Turing</a>. About 20 years earlier, Turing described a simple machine, now called a <a href="http://en.wikipedia.org/wiki/Turing_machine" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">Turing machine</a>, that could perform only a few simple operations. He then showed how the machine could be programmed to carry out arbitrarily complex computations. In doing so, he provided the theoretical basis for modern day computers.</p>
<p>By the 1950&#8217;s, actual computers were being built, and folks realized that a sufficeintly large computer, when properly programmed, could appear intelligent. People wondered if computers could one day &#8220;think&#8221; like people, but in many ways this question was vague. To clear things up, Turing proposed a hypothetical test of a computer&#8217;s intelligence. During a Turing test, a computer is allowed to communicate with a person through writing. If, after a long conversation, this human cannot accurately distinguish the computer from another person, the computer is deemed as intelligent as a person. As you know, today&#8217;s computers cannot yet past the Turing test.</p>
<p>So there you go, you&#8217;re finally ready to laugh. The Turing test is a way for a machine to prove that it&#8217;s truly intelligent. To do this, the machine must convince an examiner that they are talking to another person. If you were to take the test (in place of the machine), you&#8217;d no doubt pass, but it&#8217;d take some sort of Hannibal Lecter-type supergenius to convince another person that they were a computer. The comic&#8217;s suggestion that a machine could pull this off is delightfully absurd, plus a perfect set up is provided by referencing &#8220;extra credit&#8221; on a pass/fail test for computer intelligence. Finally there&#8217;s the illustration itself, a hilarious vignette in which the anonymous gray computer terminal has forced a now deeply-confused examiner to question the very essence of his being. It all fits together beautifully! I can&#8217;t wait to stand outside my office and look at it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.overheardinprovidence.com/2007/11/13/at-last-a-comic-worthy-of-my-office-door/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Smart image editing</title>
		<link>http://www.overheardinprovidence.com/2007/10/03/smart-image-editing/</link>
		<comments>http://www.overheardinprovidence.com/2007/10/03/smart-image-editing/#comments</comments>
		<pubDate>Thu, 04 Oct 2007 04:08:28 +0000</pubDate>
		<dc:creator>eerac</dc:creator>
				<category><![CDATA[computer science]]></category>
		<category><![CDATA[computer vision]]></category>
		<category><![CDATA[photos]]></category>

		<guid isPermaLink="false">http://www.overheardinprovidence.com/2007/10/03/smart-image-editing/</guid>
		<description><![CDATA[First off, since I already mentioned web-based photoshop, here&#8217;s an update (don&#8217;t worry, there&#8217;s a video, you won&#8217;t need to read anything).
Second, here&#8217;s a hot video demoing some content-aware image resizing research first presented at SIGGRAPH 2007. It&#8217;s a fairly simple idea that works surprisingly well. 

Normally when you shrink an image you either make [...]]]></description>
			<content:encoded><![CDATA[<p>First off, since I already mentioned <a href="http://www.overheardinprovidence.com/2007/09/07/online-photoshop-sort-of/" >web-based photoshop</a>, here&#8217;s <a href="http://www.news.com/8301-10784_3-9790168-7.html?tag=nefd.lede" onclick="javascript:urchinTracker ('/outbound/article/www.news.com');">an update</a> (don&#8217;t worry, there&#8217;s a video, you won&#8217;t need to read anything).</p>
<p>Second, here&#8217;s a hot video demoing some content-aware image resizing research first presented at <a href="http://www.siggraph.org/s2007/" onclick="javascript:urchinTracker ('/outbound/article/www.siggraph.org');">SIGGRAPH 2007</a>. It&#8217;s a fairly simple idea that works surprisingly well. </p>
<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/c-SSu3tJ3ns"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/c-SSu3tJ3ns" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></p>
<p>Normally when you shrink an image you either make the whole thing smaller, or crop some content from the sides. <a href="http://www.faculty.idc.ac.il/arik/" onclick="javascript:urchinTracker ('/outbound/article/www.faculty.idc.ac.il');">Ariel Shamir</a> and <a href="http://www.faculty.idc.ac.il/avidan/" onclick="javascript:urchinTracker ('/outbound/article/www.faculty.idc.ac.il');">Shai Avidan</a> take a different approach which they call &#8220;seam carving&#8221;.</p>
<p><span id="more-103"></span><br />
As the video explains, seam carving is similar to removing the least important rows and columns from the middle of an image. Instead of removing rows and columns, however, their algorithm identifies paths of unimportant pixels. These paths tend to curve around objects, so when removed, they shrink the image in way that&#8217;s not very noticeable. Basically you end up shrinking an image by removing the space between objects, but not changing the size of the objects themselves.</p>
<p>If you have some images you need to resize intelligently, a rather pricey photo shop plugin is available <a href="http://picutel.com/" onclick="javascript:urchinTracker ('/outbound/article/picutel.com');">here</a>. Alternatively, <a href="http://registry.gimp.org/plugin?id=10292" onclick="javascript:urchinTracker ('/outbound/article/registry.gimp.org');">here&#8217;s</a> a free plugin for <a href="http://en.wikipedia.org/wiki/GIMP" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">GIMP</a> (which is also free).</p>
<p>Finally, if you&#8217;re still hungry for more content-aware image editing, here&#8217;s a <a href="http://www.research.microsoft.com/~antcrim/papers/Criminisi_tip2004.pdf" onclick="javascript:urchinTracker ('/outbound/article/www.research.microsoft.com');">paper</a> by Microsoft researcher <a href="http://research.microsoft.com/users/Cambridge/antcrim/" onclick="javascript:urchinTracker ('/outbound/article/research.microsoft.com');">Antonio Criminisi</a>. Sadly there&#8217;s no flashy video, but the images in the paper do give some very impressive examples of how their algorithm automatically fills in missing regions of images. By filling in a missing region, one can also delete entire objects from a scene, remove overlaid text, or stitch together partially overlapping photos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.overheardinprovidence.com/2007/10/03/smart-image-editing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multiplication made easy?</title>
		<link>http://www.overheardinprovidence.com/2007/09/05/multiplication-made-easy/</link>
		<comments>http://www.overheardinprovidence.com/2007/09/05/multiplication-made-easy/#comments</comments>
		<pubDate>Wed, 05 Sep 2007 21:27:40 +0000</pubDate>
		<dc:creator>eerac</dc:creator>
				<category><![CDATA[computer science]]></category>
		<category><![CDATA[math]]></category>

		<guid isPermaLink="false">http://www.overheardinprovidence.com/2007/09/05/multiplication-made-easy/</guid>
		<description><![CDATA[Today on Freakonomics, Steven Levitt describes an alternative way to do multiplication. It&#8217;s also explained in this Wikipedia entry. Basically it&#8217;s a way of doing multiplication in binary (meaning base 2), even though you start with numbers written in base 10. In other words, you write one number as a sum of powers of 2 [...]]]></description>
			<content:encoded><![CDATA[<p>Today on Freakonomics, Steven Levitt <a href="http://freakonomics.blogs.nytimes.com/2007/09/05/a-little-math-puzzle-to-ponder/" onclick="javascript:urchinTracker ('/outbound/article/freakonomics.blogs.nytimes.com');">describes</a> an alternative way to do multiplication. It&#8217;s also explained in this <a href="http://en.wikipedia.org/wiki/Ancient_Egyptian_multiplication" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">Wikipedia</a> entry. Basically it&#8217;s a way of doing multiplication in binary (meaning base 2), even though you start with numbers written in base 10. In other words, you write one number as a sum of powers of 2 (e.g. 13 = 1 + 4 + 8), then multiply each of the powers by the other number (so 19*13 = 19*1 + 19*4 + 19*8). The second step only involves addition and repeated doubling of the other number, so it can be done fairly quickly.</p>
<p>I&#8217;m avoiding the temptation to rehash Steven&#8217;s more detailed example and Wikipedia&#8217;s explanation. Instead, I just wanted to highlight both pages as an illustration of what computer science is all about. Computer scientists don&#8217;t sit around and multiply numbers all day, but we also don&#8217;t write computer programs all day either. Instead we worry about the best way to solve problems (often problems involving numbers). Early on computer scientists realized that binary representations of numbers made it simpler to design circuits that performed arithmetic. They also asked questions like &#8220;How many steps does it take to multiply two number?&#8221;</p>
<p>Whether done by a computer, a person, or some sort of trained animal, the algorithm described above takes about the same number of steps as the <a href="http://en.wikipedia.org/wiki/Multiplication_algorithm#Long_multiplication" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">traditional method</a> we all learned in school. If you have two n digit numbers, the number of steps required is proportional to n*n (here a &#8220;step&#8221; means multiplying two digits, or adding two digits). The advantage of the nontraditional algorithm is that you don&#8217;t need to remember anything from a multiplication table, you just need to know how to know how to add digits and divide by 2.</p>
<p>It turns out that much faster algorithms exist. If you (or your computer) ever need to multiply two very long numbers, the <a href="http://mathworld.wolfram.com/KaratsubaMultiplication.html" onclick="javascript:urchinTracker ('/outbound/article/mathworld.wolfram.com');">Karatsuba Multiplication Algorithm</a> requires many fewer steps. For small numbers, however, it&#8217;s more complicated, so don&#8217;t feel bad about not knowing about it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.overheardinprovidence.com/2007/09/05/multiplication-made-easy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Puzzle This</title>
		<link>http://www.overheardinprovidence.com/2007/08/12/puzzle-time/</link>
		<comments>http://www.overheardinprovidence.com/2007/08/12/puzzle-time/#comments</comments>
		<pubDate>Sun, 12 Aug 2007 22:26:20 +0000</pubDate>
		<dc:creator>eerac</dc:creator>
				<category><![CDATA[computer science]]></category>
		<category><![CDATA[puzzle]]></category>

		<guid isPermaLink="false">http://www.overheardinprovidence.com/2007/08/12/puzzle-time/</guid>
		<description><![CDATA[After all my recent talk of Ferrets and Pinkberry, it&#8217;s high time for something more technical. Here is a puzzle my housemate told me about a month ago. Below the fold is my computer science style derivation of the answer.

A young man is committed to marry one of three identical sisters. Despite their genetic similarity, [...]]]></description>
			<content:encoded><![CDATA[<p>After all my recent talk of <a href="http://www.overheardinprovidence.com/2007/08/10/more-ferrets/" >Ferrets</a> and <a href="http://www.overheardinprovidence.com/2007/08/10/you-heard-it-here-first/" >Pinkberry</a>, it&#8217;s high time for something more technical. Here is a puzzle <a href="http://www.google.com/search?q=Tibet+Sprague" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');">my housemate</a> told me about a month ago. Below the fold is my computer science style derivation of the answer.</p>
<blockquote><p>
A young man is committed to marry one of three identical sisters. Despite their genetic similarity, one of the sisters always lies, one always tells the truth, and the third lies only sometimes. Also, the sisters themselves can always tell each other apart. The young man is permitted to ask one of the women, chosen at random, a single yes-no question. Based on this single response, he must select his bride. Being a man who values certainty, his goal is to select either the sister that always tells the truth, or the sister that always lies. What question should he ask?
</p></blockquote>
<p><span id="more-43"></span></p>
<p>Whatever question is asked, the response is either yes or no. When the question is asked to the sister that sometimes lies the response is meaningless. Regardless of what she says, the man must select one of the other two sisters. Since the man does not know which sister he is addressing, his question and response to it&#8217;s answer must always be the same. Thus his response to the answer must always be to select one of the two sisters he did not address.</p>
<p>So the man needs a question that differentiates between the two sisters not being addressed. When the sister that sometimes lies is addressed, it doesn&#8217;t matter which other sister is chosen. When the sister who always lies is addressed, however, the truthful sister must be selected, and when the sister who always tells the truth is addressed, the sister that always lies must be selected.</p>
<p>The man&#8217;s question must cause the always lying sister to identify the truthful sister, and the truthful sister to identify to the always lying sister. Since the lying sister always lies, the question should ask her to identify the sister that sometimes lies, while at the same time ask the truthful sister to identify the sister that always lies.</p>
<p>One such question is &#8220;Which of your two sisters always lies, or if neither always lies, which sometimes lies?&#8221; A much nicer version of this question is: &#8220;Which of your two sisters lies more?&#8221;. To turn this into a yes-no question, the man can simply point to one of the other two sisters and ask &#8220;Does she lie more than your other sister?&#8221;.</p>
<p>In the end, this puzzle has a nice short answer. From a computer science perspective, I think understanding how one can arrive at this answer is what&#8217;s interesting.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.overheardinprovidence.com/2007/08/12/puzzle-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

