This preview has intentionally blurred sections. Sign up to view the full version.View Full Document
Unformatted text preview: Chapter 1 NP Completeness I By Sariel Har-Peled , September 17, 2007 Version: 1.04 "Then you must begin a reading program immediately so that you man understand the crises of our age," Ignatius said solemnly. "Begin with the late Romans, including Boethius, of course. Then you should dip rather extensively into early Medieval. You may skip the Renaissance and the Enlightenment. That is mostly dangerous propaganda. Now, that I think about of it, you had better skip the Romantics and the Victorians, too. For the contemporary period, you should study some selected comic books." "You’re fantastic." "I recommend Batman especially, for he tends to transcend the abysmal society in which he’s found himself. His morality is rather rigid, also. I rather respect Batman." – A confederacy of Dunces, John Kennedy Toole 1.1 Introduction The question governing this course, would be the development of e ffi cient algorithms. Hopefully, what is an algorithm is a well understood concept. But what is an e ffi cient algorithm? A natural answer (but not the only one!) is an algorithm that runs quickly. What do we mean by quickly? Well, we would like our algorithm to: 1. Scale with input size. That is, it should be able to handle large and hopefully huge inputs. 2. Low level implementation details should not matter, since they correspond to small improve- ments in performance. Since faster CPUs keep appearing it follows that such improvements would (usually) be taken care of by hardware. 3. What we will really care about are asymptotic running time. Explicitly, polynomial time. In our discussion, we will consider the input size to be n , and we would like to bound the overall running time by a function of n which is asymptotically as small as possible. An algorithm with better asymptotic running time would be considered to be better . This work is licensed under the Creative Commons Attribution-Noncommercial 3.0 License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/3.0/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. 1 Example 1.1.1 It is illuminating to consider a concrete example. So assume we have an algorithm for a problem that needs to perform c 2 n operations to handle an input of size n , where c is a small constant (say 10). Let assume that we have a CPU that can do 10 9 operations a second. (A somewhat conservative assumption, as currently [Jan 2006] , the blue-gene supercomputer can do about 3 · 10 14 floating-point operations a second. Since this super computer has about 131 , 072 CPUs, it is not something you would have on your desktop any time soon.) Since 2 10 ≈ 10 3 , you have that our (cheap) computer can solve in (roughly) 10 seconds a problem of size n = 27....
View Full Document
- Fall '08
- Algorithms, Computational complexity theory, Boolean satisfiability problem, polynomial time, Circuit Satisfiability