back to indexRichard Karp: Algorithms and Computational Complexity | Lex Fridman Podcast #111
link |
The following is a conversation with Richard Karp, a professor at Berkeley and one of the most
link |
important figures in the history of theoretical computer science. In 1985, he received the
link |
Turing Award for his research in the theory of algorithms, including the development of the
link |
admiral's Karp algorithm for solving the max flow problem on networks, Hopcroft's Karp algorithm
link |
for finding maximum cardinality matchings in bipartite graphs, and his landmark paper in
link |
complexity theory called reducibility among combinatorial problems, in which he proved 21
link |
problems to be NP complete. This paper was probably the most important catalyst in the
link |
explosion of interest in the study of NP completeness and the P versus NP problem in general.
link |
Quick summary of the ads to sponsors a sleep mattress and cash app. Please consider supporting
link |
this podcast by going to a sleep comm slash Lex and downloading cash app and using code Lex
link |
podcast. Click the links by the stuff. It really is the best way to support this podcast.
link |
If you enjoy this thing, subscribe on YouTube review it with five stars and up a podcast
link |
supporting on Patreon or connect with me on Twitter at Lex freedman. As usual, I'll do a few
link |
minutes of ads now and never any ads in the middle that can break the flow of the conversation.
link |
This show is sponsored by eight sleep and it's pod pro mattress that you can check out at eight
link |
sleep comm slash Lex to get $200 off. It controls temperature with an app. It can cool down to
link |
as low as 55 degrees and each side of the bed separately. Research shows the temperature has
link |
a big impact on the quality of our sleep. Anecdotally, it's been a game changer for me. I love it.
link |
It's been a couple of weeks now. I just been really enjoying it both in the fact that I'm
link |
getting better sleep and then it's a smart mattress. Essentially, I kind of imagine it's
link |
being the early days of artificial intelligence being a part of every aspect of our lives and
link |
certainly infusing AI in one of the most important aspects of life, which is sleep.
link |
I think has a lot of potential for being beneficial. The pod pro is packed with sensors that track
link |
heart rate, heart rate variability and respiratory rate showing it all in their app. The apps health
link |
metrics are amazing, but the cooling alone is honestly worth the money. I don't know we sleep,
link |
but when I do, I choose the eighth sleep pod pro mattress. Check it out at eight sleep comm slash
link |
lex to get $200 off. And remember just visiting the site and considering the purchase helps convince
link |
the folks at eight sleep that this silly old podcast is worth sponsoring in the future.
link |
This show is also presented by the great and powerful cash app, the number one finance app
link |
in the app store. When you get it, use code lexpodcast. Cash app lets you send money to friends
link |
by Bitcoin and invest in the stock market with as little as $1. It's one of the best design
link |
interfaces of an app that I've ever used. To me, a good design is when everything is easy and natural.
link |
Bad design is when the app gets in the way, either because it's buggy or because it tries too hard
link |
to be helpful. I'm looking at you clippy from Microsoft, even though I love you. Anyway,
link |
there's a big part of my brain and heart that loves to design things and also to appreciate
link |
great design by others. So again, if you get cash out from the app store, Google Play and use the
link |
code lexpodcast, you get $10 and cash up will also donate $10 to first an organization that is helping
link |
to advance robotics and STEM education for young people around the world. And now here's my conversation
link |
with Richard Karp. You wrote that at the age of 13, you were first exposed to playing geometry
link |
and was wonder struck by the power and elegance of form of proofs. Are there problems, proofs,
link |
properties, ideas in playing geometry that from that time that you remember being mesmerized by
link |
or just enjoying to go through to prove various aspects? So Michael Rabin told me this story
link |
about an experience he had when he was a young student who was tossed out of his classroom
link |
for bad behavior and was wandering through the corridors of his school
link |
and came upon two older students who were studying the problem of finding the shortest
link |
distance between two non overlapping circles. And Michael thought about it and said,
link |
you take the straight line between the two centers and the segment between the two circles is the
link |
shortest because a straight line is the shortest distance between the two centers and any other
link |
line connecting the circles would be on a longer line. And he thought and I agreed that this was
link |
just elegant. The pure reasoning could come up with such a result. Certainly the shortest distance
link |
from the two centers of the circles is a straight line. Could you once again say
link |
what's the next step in that proof? Well, any segment joining the two circles
link |
if you extend it by taking the radius on each side, you get a path with three
link |
edges, which connects the two centers. And this has to be at least as long as the shortest path,
link |
which is the straight line. The straight line. Yeah. Well, yeah, that's quite simple. So what
link |
is it about that elegance that you just find compelling? Well, just that you could establish
link |
a fact about geometry beyond dispute by pure reasoning. I also enjoy the challenge of solving
link |
puzzles in plain geometry. It was much more fun than the earlier mathematics courses,
link |
which were mostly about arithmetic operations and manipulating them.
link |
Was there something about geometry itself, the slightly visual component of it that you can
link |
visualize? Oh, yes, absolutely. Although I lacked three dimensional vision. I wasn't very good at
link |
three dimensional vision. You mean being able to visualize three dimensional objects?
link |
Or surfaces, hyperplanes, and so on. So there, I didn't have an intuition. But
link |
for example, the fact that the sum of the angles of a triangle is 180 degrees
link |
is proved convincingly. And it comes as a surprise that that can be done.
link |
Why is that surprising? Well, it is a surprising idea, I suppose. Why is that proved difficult?
link |
It's not. That's the point. It's so easy, and yet it's so convincing.
link |
Do you remember what is the proof that it adds up to 180?
link |
You start at a corner and draw a line parallel to the opposite side,
link |
and that line sort of trisects the angle between the other two sides. And you get a
link |
half plane, which has to add up to 180 degrees. And it consists in the angles by the quality of
link |
alternate angles, what's it called? You get a correspondence between the angles created along
link |
the side of the triangle and the three angles of the triangle. Has geometry had an impact on,
link |
when you look into the future of your work with combinatorial algorithms, has it had some kind
link |
of impact in terms of the puzzles, the visual aspects that were first so compelling to you?
link |
Not Euclidean geometry, particularly. I think I use tools like linear programming and integer
link |
programming a lot, but those require high dimensional visualization. And so I tend to go
link |
by the algebraic properties. Right. You go by the linear algebra and not by the
link |
visualization. Well, the interpretation in terms of, for example, finding the highest point on
link |
a polyhedron, as in linear programming, is motivating. But again, I don't have the high
link |
dimensional intuition that would particularly inform me. So I sort of lean on the algebra.
link |
So to linger on that point, what kind of visualization do you do when you're trying to
link |
think about, we'll get to combinatorial algorithms, but just algorithms in general.
link |
What's inside your mind when you're thinking about designing algorithms?
link |
Or even just tackling any mathematical problem?
link |
Well, I think that usually an algorithm involves a repetition of some inner loop.
link |
And so I can sort of visualize the distance from the desired solution
link |
as iteratively reducing until you finally hit the exact solution.
link |
And try to take steps that get you closer to the…
link |
Try to take steps that get closer and having the certainty of converging. So it's basically the
link |
mechanics of the algorithm is often very simple. But especially when you're trying something out
link |
on the computer, so for example, I did some work on the traveling salesman problem. And
link |
I could see there was a particular function that had to be minimized, and it was
link |
fascinating to see the successive approaches to the optimum.
link |
You mean, so first of all, traveling salesman problem is where you have to visit
link |
it every city without ever the only ones. Yeah, that's right. Find the shortest path through
link |
the cities. Yeah, which is sort of a canonical standard, a really nice problem that's really
link |
hard. Exactly. So can you say again, what was nice about being able to think about the
link |
objective function there and maximizing it or minimizing it?
link |
Well, just so that as the algorithm proceeded, you were making progress,
link |
continual progress, and eventually getting to the optimum point.
link |
So there's two parts, maybe. Maybe you can correct me. But first is like getting an intuition
link |
about what the solution would look like, or even maybe coming up with a solution. And two is
link |
proving that this thing is actually going to be pretty good. What part is harder for you?
link |
Where's the magic happen? Is it in the first sets of intuitions, or is it in the
link |
messy details of actually showing that it is going to get to the exact solution,
link |
and it's going to run at a certain complexity?
link |
Well, the magic is just the fact that the gap from the optimum decreases monotonically,
link |
and you can see it happening. And various metrics of what's going on are improving
link |
all along until finally you hit the optimum. Perhaps later we'll talk about the assignment
link |
problem that I can illustrate a little better. Now zooming out again, as you write, Don Knuth
link |
has called attention to a breed of people who derive great aesthetic pleasure from contemplating
link |
the structure of computational processes. So Don calls these folks geeks. And you write that you
link |
remember the moment you realized you were such a person, you were showing the Hungarian algorithm
link |
to solve the assignment problem. So perhaps you can explain what the assignment problem is,
link |
and what the Hungarian algorithm is. So in the assignment problem, you have
link |
n boys and n girls, and you are given the desirability or the cost of matching
link |
the ith boy with the jth girl for all i and j. You're given a matrix of numbers,
link |
and you want to find the one to one matching of the boys with the girls, such that the sum
link |
of the associated costs will be minimized. So the best way to match the boys with the girls,
link |
or men with jobs, or any two sets. Any possible matching is possible?
link |
Yeah, all one to one correspondences are permissible. If there is a connection that
link |
is not allowed, then you can think of it as having an infinite cost. So what you do is
link |
to depend on the observation that the identity of the optimal assignment, or as we call it,
link |
the optimal permutation is not changed if you subtract
link |
a constant from any row or column of the matrix. You can see that the comparison between
link |
the different assignments is not changed by that. Because if you decrease a particular row,
link |
all the elements of a row by some constant, all solutions decrease by the cost of that,
link |
by an amount equal to that constant. So the idea of the algorithm is to start with a matrix of
link |
nonnegative numbers and keep subtracting from rows or entire columns in such a way that you
link |
subtract the same constant from all the elements of that row or column, while maintaining the
link |
property that all the elements are nonnegative. Simple. Yeah. And so what you have to do is
link |
find small moves which will decrease the total cost while subtracting constants from rows or
link |
columns. And there's a particular way of doing that by computing the shortest path through
link |
the elements in the matrix. And you just keep going in this way until you finally get a full
link |
permutation of zeros while the matrix is nonnegative, and then you know that that has to be the cheapest.
link |
Is that as simple as it sounds? So the shortest path through the matrix part?
link |
Yeah. The simplicity lies in how you find, I oversimplified slightly, what you will end up
link |
subtracting a constant from some rows or columns and adding the same constant back to other rows
link |
and columns. So as not to reduce any of the zero elements, you leave them unchanged.
link |
But each individual step modifies several rows and columns by the same amount,
link |
but overall decreases the cost. So there's something about that elegance that made you go,
link |
aha, this is beautiful. It's amazing that something so simple can solve a problem like this.
link |
Yeah, it's really cool. If I had mechanical ability, I would probably like to do woodworking or
link |
other activities where you sort of shape something into something beautiful and orderly.
link |
And there's something about the orderly, systematic nature of that iterative algorithm
link |
that is pleasing to me. So what do you think about this idea of geeks as Don Knuth calls them?
link |
Is it something specific to a mindset that allows you to discover the elegance in
link |
computational processes or can all of us discover this beauty? Are you born this way?
link |
I think so. I always like to play with numbers. I used to amuse myself by multiplying four digit
link |
decimal numbers in my head and putting myself to sleep by starting with one and
link |
doubling the number as long as I could go and testing my memory, my ability to retain the
link |
information. And I also read somewhere that you wrote that you enjoyed showing off to your friends
link |
by, I believe, multiplying four digit numbers, a couple of four digit numbers.
link |
Yeah, I had a summer job at a beach resort outside of Boston. And the other employee,
link |
I was the barker at a ski ball game. I used to sit at a microphone saying, come one,
link |
come all, come in and play, ski ball, five cents to play, nickel to win, and so on.
link |
That's what a barker, I wasn't sure if I should know, but barker, you're the charming,
link |
outgoing person that's getting people to come in.
link |
Yeah, well, I wasn't particularly charming, but I could be very repetitious and loud.
link |
And the other employees were sort of juvenile delinquents who had no academic
link |
bent, but somehow I found that I could impress them by performing this mental or arithmetic.
link |
You know, there's something to that. You know, one of some of the most popular videos on the
link |
internet is, there's a YouTube channel called Numberphile that shows off different mathematical
link |
ideas. There's still something really profoundly interesting to people about math, the beauty
link |
of it. Something, even if they don't understand the basic concept of even being discussed,
link |
there's something compelling to it. What do you think that is? Any lessons you drew from your
link |
early teen years when you were showing off to your friends with the numbers? What is it that
link |
attracts us to the beauty of mathematics, do you think? The general population, not just the
link |
computer scientists and mathematicians? I think that you can do amazing things. You can
link |
test whether the large numbers are prime. You can solve little puzzles about cannibals and
link |
missionaries. And there's a kind of achievement. It's puzzle solving. And at a higher level,
link |
the fact that you can do this reasoning, that you can prove in an absolutely ironclad way that
link |
some of the angles of a triangle is 180 degrees. Yeah. It's a nice escape from the messiness of
link |
the real world where nothing can be proved. And we'll talk about it, but sometimes the ability
link |
to map the real world into such problems where you can prove it is a powerful step.
link |
It's amazing that we can do it. Of course, another attribute of geeks is they're not necessarily
link |
endowed with emotional intelligence. So they can live in a world of abstractions without having to
link |
master the complexities of dealing with people.
link |
Just to link on the historical note, as a PhD student in 1955, you joined the Computational
link |
Lab at Harvard where Howard Agen had built the Mark I and the Mark IV computers.
link |
Just to take a step back into that history, what were those computers like?
link |
The Mark IV filled a large room much bigger than this large office that we're talking in now.
link |
And you could walk around inside it. There were rows of relays. You could just walk around the
link |
interior. And the machine would sometimes fail because of bugs, which literally meant
link |
flying creatures landing on the switches. So I never used that machine for any
link |
practical purpose. The lab eventually acquired one of the earlier commercial computers.
link |
This is already in the 60s? No, in the mid 50s.
link |
The mid 50s? Late 50s.
link |
There was already commercial computers in there?
link |
Yeah, we had a Univac with 2,000 words of storage. So you had to work hard to allocate
link |
the memory properly to also the excess time from one word to another depended on the
link |
number of the particular words. And so there was an art to sort of arranging the storage
link |
allocation to make fetching data rapid. Were you attracted to this actual physical
link |
world implementation of mathematics? So it's a mathematical machine that's actually doing
link |
the math physically? No, not at all. I was attracted to the underlying algorithms.
link |
But did you draw any inspiration? So what did you imagine was the future of these giant
link |
computers? Could you have imagined that 60 years later would have billions of these computers
link |
all over the world? I couldn't imagine that, but there was a sense in the laboratory
link |
that this was the wave of the future. In fact, my mother influenced me. She told me that data
link |
processing was going to be really big and I should get into it. She's a smart woman.
link |
Yeah, she was a smart woman. And there was just a feeling that this was going to change the world
link |
but I didn't think of it in terms of personal computing. I had no anticipation that we would
link |
be walking around with computers in our pockets or anything like that. Did you see computers as
link |
tools, as mathematical mechanisms to analyze sort of theoretical computer science or as the AI folks,
link |
which is an entire other community of dreamers, as something that could one day have human level
link |
intelligence? Well, AI wasn't very much on my radar. I did read Turing's paper about the
link |
the Turing test computing and intelligence. Yeah, the Turing test.
link |
What did you think about that paper? Was that just like science fiction?
link |
I thought that it wasn't a very good test because it was too subjective. I didn't feel that the
link |
Turing test was really the right way to calibrate how intelligent an algorithm could be.
link |
But to link on that, do you think it's because you've come up with some incredible
link |
tests later on, tests on algorithms that are strong, reliable, robust across a bunch of
link |
different classes of algorithms? But returning to this emotional mess that is intelligence,
link |
do you think it's possible to come up with a test that's as ironclad as some of the
link |
computational complexity work? Well, I think the greater question is whether it's possible to
link |
achieve human level intelligence. So first of all, let me, at the philosophical level,
link |
do you think it's possible to create algorithms that reason and would seem to us to have the
link |
same kind of intelligence as human beings? It's an open question. It seems to me that
link |
most of the achievements operate within a very limited set of ground rules and for a very limited,
link |
precise task, which is a quite different situation from the processes that go on in the minds of
link |
humans, where they have to function in changing environments. They have emotions,
link |
they have physical attributes for exploring their environment,
link |
they have intuition, they have desires, emotions, and I don't see anything in the
link |
current achievements of what's called AI that come close to that capability.
link |
I don't think there's any computer program which surpasses a six month old child in terms of
link |
comprehension of the world. Do you think this complexity of human intelligence,
link |
all the cognitive abilities you have, all the emotion, do you think that could be reduced one
link |
day or just fundamentally reduced to a set of algorithms or an algorithm? Can a towing machine
link |
achieve human level intelligence? I am doubtful about that. I guess the argument in favor of it
link |
is that the human brain seems to achieve what we call intelligence, cognitive abilities of
link |
different kinds. If you buy the premise that the human brain is just an enormous interconnected
link |
set of switches, so to speak, then in principle, you should be able to diagnose what that
link |
interconnection structure is like, characterize the individual switches and build a simulation outside.
link |
Why that may be true in principle, that cannot be the way we're eventually going to tackle this
link |
problem. That does not seem like a feasible way to go about it. There is however an existence
link |
proof that if you believe that the brain is just a network of neurons operating by rules,
link |
I guess you could say that that's an existence proof of the capabilities of a mechanism.
link |
But it would be almost impossible to acquire the information unless we got enough insight into the
link |
operation of the brain. There's so much mystery there. What do you make of consciousness, for
link |
example? As an example of something we completely have no clue about, the fact that we have this
link |
subjective experience, is it possible that this network of this circuit of switches is able to
link |
create something like consciousness? To know its own identity. To know itself. I think if you try
link |
to define that rigorously, you'd have a lot of trouble. I know that there are many who
link |
believe that general intelligence can be achieved. There are even some who feel certain
link |
that the singularity will come and we will be surpassed by the machines which will then learn
link |
more and more about themselves and reduce humans to an inferior breed. I am doubtful that this
link |
will ever be achieved. Just for the fun of it, could you linger on why, what's your intuition,
link |
why you're doubtful? There are quite a few people that are extremely worried about this existential
link |
threat of artificial intelligence of us being left behind by the superintelligent new species.
link |
What's your intuition, why that's not quite likely? Just because none of the achievements in
link |
speech or robotics or natural language processing or creation of
link |
flexible computer assistants or any of that comes anywhere near close to that level of cognition.
link |
What do you think about ideas if we look at Moore's law and exponential improvement
link |
to allow us that would surprise us? Our intuition fall apart with exponential improvement
link |
because we're not able to think in linear improvement. We're not able to imagine a world
link |
that goes from the Mark I computer to an iPhone X. We could be really surprised by the exponential
link |
growth or on the flip side, is it possible that also intelligence is actually way, way, way, way
link |
harder even with exponential improvement to be able to crack? I don't think any constant factor
link |
improvement could change things. Given our current comprehension of what cognition requires,
link |
it seems to me that multiplying the speed of the switches by a factor of a thousand or a million
link |
will not be useful until we really understand the organizational principle behind the network of
link |
switches. Well, let's jump into the network of switches and talk about combinatorial algorithms
link |
if we could. Let's step back for the very basics. What are combinatorial algorithms and what are
link |
some major examples of problems they aim to solve? A combinatorial algorithm is one which
link |
deals with a system of discrete objects that can occupy various states or take on various
link |
values from a discrete set of values and need to be arranged or selected in such a way as to
link |
achieve some, to minimize some cost function or to prove the existence of some combinatorial
link |
configuration. An example would be coloring the vertices of a graph. What's a graph?
link |
Let's step back. It's fun to ask one of the greatest computer scientists of all time,
link |
the most basic questions in the beginning of most books. For people who might not know,
link |
but in general, how you think about it, what is a graph? A graph? That's simple. It's a set of
link |
points, certain pairs of which are joined by lines called edges. They represent the,
link |
in different applications, represent the interconnections between
link |
discrete objects. They could be the interconnections between switches in a digital circuit
link |
or interconnections indicating the communication patterns of a human community.
link |
And they could be directed or undirected. And then, as you've mentioned before, might have
link |
costs. They can be directed or undirected. You can think of them as, if a graph were
link |
representing a communication network, then the edge could be undirected, meaning that information
link |
could flow along it in both directions or it could be directed with only one way communication.
link |
A road system is another example of a graph with weights on the edges. And then a lot of problems
link |
of optimizing the efficiency of such networks or learning about the performance of such networks
link |
are the object of a combinatorial algorithm. So it could be scheduling classes at a school
link |
where the vertices, the nodes of the network are the individual classes and the edges indicate
link |
the constraints which say that certain classes cannot take place at the same time or certain
link |
teachers are available only for certain classes, etc. Or I talked earlier about the assignment
link |
problem of matching the boys with the girls, where you have there a graph with an edge from
link |
each boy to each girl with a weight indicating the cost. Or in logical design of computers,
link |
you might want to find a set of so called gates switches that perform logical functions,
link |
which can be interconnected to realize some function. So you might ask,
link |
how many gates do you need in order for a circuit to give a yes output if at least
link |
a given number of inputs are ones and no if fewer are present.
link |
My favorite is probably all the work with network flows. So anytime you have,
link |
I don't know why it's so compelling, but there's something just beautiful about it.
link |
It seems like there's so many applications and communication networks
link |
in traffic flow that you can map into these. And then you could think of pipes and water
link |
going through pipes and you could optimize it in different ways. There's something always
link |
visually and intellectually compelling to me about it. And of course, you've done work there.
link |
Yeah. So there the edges represent channels along which some commodity can flow. It might be
link |
gas, it might be water, it might be information. Maybe supply chain as well, like products
link |
being products flowing from one operation to another. And the edges have a capacity,
link |
which is the rate at which the commodity can flow. And a central problem is to determine,
link |
given a network of these channels, in this case, the edges of communication channels,
link |
the challenges to find the maximum rate at which the information can flow along these
link |
channels to get from a source to a destination. And that's a fundamental combinatorial problem
link |
that I've worked on. Jointly with the scientist Jack Edmonds, I think we're the first to give
link |
a formal proof that this maximum flow problem through a network can be solved in polynomial time.
link |
Which I remember the first time I learned that, just learning that in maybe even grad school.
link |
I don't think it was even undergrad. No. Algorithm, yeah. Do network flows get taught in
link |
in basic algorithms courses? Yes, probably. Okay. So yeah, I remember being very surprised
link |
that max flow is a polynomial time algorithm. Yeah. That there's a nice fast algorithm that
link |
solves max flow. But so there is an algorithm named after you and Edmonds, the Edmond Karp
link |
algorithm for max flow. So what was it like tackling that problem and trying to arrive
link |
at a polynomial time solution? And maybe you can describe the algorithm, maybe you can describe
link |
what's the running time complexity that you showed. Yeah. Well, first of all, what is a
link |
polynomial time algorithm? Yeah. Perhaps we could discuss that. So yeah, let's actually just even,
link |
yeah, that's what is algorithmic complexity? What are the major classes of algorithm complexity?
link |
So in a problem like the assignment problem or scheduling schools or any of these applications,
link |
you have a set of input data, which might, for example, be a set of vertices connected by edges
link |
with, you're given for each edge the capacity of the edge. And you have algorithms which are,
link |
think of them as computer programs with operations such as addition, subtraction,
link |
multiplication, division, comparison of numbers and so on. And you're trying to construct an
link |
algorithm based on those operations, which will determine in a minimum number of computational
link |
steps the answer to the problem. In this case, the computational step is one of those operations.
link |
And the answer to the problem is, let's say, the configuration of the network that
link |
carries the maximum amount of flow. And an algorithm is said to run in polynomial time
link |
if, as a function of the size of the input, the number of vertices, the number of edges,
link |
and so on, the number of basic computational steps grows only as some fixed power of that size.
link |
A linear algorithm would execute a number of steps linearly proportional to the size.
link |
Quadratic algorithm would be steps proportional to the square of the size and so on.
link |
And algorithms whose running time is bounded by some fixed power of the size are called polynomial
link |
algorithms. And that's supposed to be a relatively fast class of algorithms.
link |
That's right. Theoreticians take that to be the definition of an algorithm being
link |
efficient and we're interested in which problems can be solved by such efficient algorithms.
link |
One can argue whether that's the right definition of efficient because you could have an algorithm
link |
whose running time is the 10,000th power of the size of the input and that wouldn't be
link |
really efficient. And in practice, it's oftentimes reducing from an n squared algorithm to an n log
link |
n or a linear time is practically the jump that you want to make to allow a real world system
link |
to solve a problem. Yeah, that's also true because especially as we get very large networks,
link |
the size can be in the millions and then anything above n log n where n is the size
link |
would be too much for practical solution. Okay, so that's polynomial time algorithms.
link |
What other classes of algorithms are there? So that usually they designate polynomials
link |
of the letter P. Yeah. There's also NP, NP complete and NP hard. Yeah. So can you try to
link |
disentangle those by trying to define them simply? Right. So a polynomial time algorithm
link |
is one whose running time is bounded by a polynomial and the size of the input.
link |
Then the class of such algorithms is called P. In the worst case, by the way, we should say,
link |
right? Yeah, that's very important that in this theory, when we measure the complexity of an
link |
algorithm, we really measure the growth of the number of steps in the worst case. So you may
link |
have an algorithm that runs very rapidly in most cases, but if there's any case where it gets into
link |
a very long computation, that would increase the computational complexity by this measure.
link |
And that's a very important issue because there are, as we may discuss later, there are some
link |
very important algorithms which don't have a good standing from the point of view of their
link |
worst case performance and yet are very effective. So theoreticians are interested in P, the class of
link |
problem solvable in polynomial time. Then there's NP, which is the class of problems
link |
which may be hard to solve, but where when confronted with a solution,
link |
you can check it in polynomial time. Let me give you an example there.
link |
So if we look at the assignment problem, so you have n boys, you have n girls, the number of numbers
link |
that you need to write down to specify the problem instances n squared. And the question is
link |
how many steps are needed to solve it? And Jack Edmonds and I were the first to show that it
link |
could be done in time in cubed earlier algorithms required into the fourth. So as a polynomial
link |
function of the size of the input, this is a fast algorithm. Now to illustrate the class NP,
link |
the question is how long would it take to verify that a solution is optimal?
link |
So for example, if the input was a graph, we might want to find the largest
link |
clique in the graph or a clique is a set of vertices such that any vertex,
link |
each vertex in the set is adjacent to each of the others. So the clique is a complete subgraph.
link |
Yeah, so if it's a Facebook social network, everybody's friends with everybody else. It's
link |
close clique. That would be what's called a complete graph. It would be.
link |
No, I mean within that clique. Within that clique, yeah. They're all friends.
link |
So a complete graph is when everybody's friends with everybody.
link |
So the problem might be to determine whether in a given graph there exists a clique of a certain
link |
size. Well, that turns out to be a very hard problem. But if somebody hands you a clique
link |
and asks you to check whether it is, hands you a set of vertices and asks you to check whether
link |
it's a clique, you could do that simply by exhaustively looking at all of the edges
link |
between the vertices in the clique and verifying that they're all there.
link |
And that's a polynomial time algorithm.
link |
That's a polynomial. So the problem of finding the clique
link |
appears to be extremely hard. But the problem of verifying a clique
link |
to see if it reaches a target number of vertices is easy to verify. So finding the
link |
clique is hard. Checking it is easy. Problems of that nature are called
link |
nondeterministic polynomial time algorithms. And that's the class NP.
link |
And what about NP complete and NP hard?
link |
Okay. Let's talk about problems where you're getting a yes or no answer rather than a numerical
link |
value. So either there is a perfect matching of the boys with the girls or there isn't.
link |
It's clear that every problem in P is also in NP. If you can solve the problem exactly,
link |
then you can certainly verify the solution. On the other hand, there are problems in the class
link |
NP. This is the class of problems that are easy to check, although they may be hard to solve.
link |
It's not at all clear that problems in NP lie in P. So for example, if we're looking at scheduling
link |
classes at a school, the fact that you can verify when handed a schedule for the school,
link |
whether it meets all the requirements, that doesn't mean that you can find the schedule
link |
rapidly. So intuitively, NP nondeterministic polynomial checking rather than finding is
link |
going to be harder than, is going to include, is easier. Checking is easier and therefore
link |
the class of problems that can be checked appears to be much larger than the class of problems that
link |
can be solved. Then you keep adding appears to and sort of these additional words that designate
link |
that we don't know for sure yet. We don't know for sure. So the theoretical question, which is
link |
considered to be the most central problem in theoretical computer science or at least computational
link |
complexity theory, combinatorial algorithm theory. The question is whether P is equal to NP. If P
link |
were equal to NP, it would be amazing. It would mean that every problem where a solution can be
link |
rapidly checked can actually be solved in polynomial time. We don't really believe that's
link |
true. If you're scheduling classes at a school, we expect that if somebody hands you a satisfying
link |
schedule, you can verify that it works. That doesn't mean that you should be able to find such a
link |
schedule. So intuitively, NP encompasses a lot more problems than P. So can we take a small tangent
link |
and break apart that intuition? Do you first of all think that the biggest open problem in
link |
computer science, maybe mathematics, is whether P equals NP? Do you think P equals NP or do you
link |
think P is not equal to NP? If you had to bet all your money on it. I would bet that P is unequal to
link |
NP simply because there are problems that have been around for centuries and have been studied
link |
intensively in mathematics and even more so in the last 50 years since the P versus NP was stated.
link |
And no polynomial time algorithms have been found for these easy to check problems.
link |
So one example is a problem that goes back to the mathematician Gauss who was interested in
link |
factoring large numbers. So we know what a number is prime if it cannot be written as the
link |
product of two or more numbers unequal to one. So if we can factor the number like
link |
91 at seven times 13. But if I give you 20 digit or 30 digit numbers, you're probably going to be
link |
at a loss to have any idea whether they can be factored. So the problem of factoring very large
link |
numbers does not appear to have an efficient solution. But once you have found the factors,
link |
expressed the number as a product to smaller numbers, you can quickly verify that they are
link |
factors of the number. And your intuition is a lot of brilliant people have tried to find
link |
algorithms. For this one particular problem, there's many others like it that are really well
link |
studied and will be great to find an efficient algorithm for.
link |
Right. And in fact, we have some results that I was instrumental in obtaining following up on
link |
work by the mathematician Stephen Cook to show that within the class NP of easy to check problems,
link |
there's a huge number that are equivalent in the sense that either all of them or none of them lie
link |
in P. And this happens only if P is equal to NP. So if P is unequal to NP, we would also know
link |
that virtually all the standard combinatorial problems, if P is unequal to NP, none of them
link |
can be solved in polynomial time. Can you explain how that's possible to tie together so many
link |
problems in a nice bunch that if one is proven to be efficient, then all are?
link |
The first and most important stage of progress was a result by Stephen Cook
link |
who showed that a certain problem called the satisfiability problem of propositional logic
link |
is as hard as any problem in the class P. So the propositional logic problem
link |
is expressed in terms of expressions involving the logical operations and or and not operating
link |
operating on variables that can be the true or false. So an instance of the problem would be
link |
some formula involving and or and not. And the question would be whether there is an
link |
assignment of truth values to the variables in the problem that would make the formula true.
link |
So for example, if I take the formula A or B and A or not B and not A or B and not A or not B
link |
and take the conjunction of all four of those so called expressions, you can determine that
link |
no assignment of truth values to the variables A and B will allow that conjunction of
link |
what are called clauses to be true. So that's an example of a formula in
link |
propositional logic involving expressions based on the operations and or and not.
link |
That's an example of a problem which is not satisfiable. There is no solution that satisfies all
link |
of those constraints. And that's like one of the cleanest and fundamental problems in computer
link |
science. It's like a nice statement of a really hard problem. It's a nice statement of a really
link |
hard problem. And what Cook showed is that every problem in NP can be re expressed as an instance
link |
of the satisfiability problem. So to do that, he used the observation that a very simple
link |
abstract machine called the Turing machine can be used to describe any algorithm.
link |
An algorithm for any realistic computer can be translated into an equivalent algorithm
link |
on one of these Turing machines which are extremely simple.
link |
So a Turing machine, there's a tape and you can walk along that. You have data on a tape and you
link |
have basic instructions, a finite list of instructions which say if you're reading a
link |
particular symbol on the tape and you're in a particular state, then you can move to
link |
a different state and change the state of the number or the element that you were looking at,
link |
the cell of the tape that you were looking at. And that was like a metaphor and a mathematical
link |
construct that Turing put together to represent all possible computation. All possible computation.
link |
Now one of these so called Turing machines is too simple to be useful in practice,
link |
but for theoretical purposes we can depend on the fact that an algorithm for any computer can be
link |
translated into one that would run on a Turing machine. And then using that fact,
link |
he could describe any possible nondeterministic polynomial time algorithm. Any algorithm for
link |
a problem in NP could be expressed as a sequence of moves of the Turing machine
link |
described in terms of reading a symbol on the tape while you're in a given state and moving
link |
to a new state and leaving behind a new symbol. And given that the fact that any
link |
nondeterministic polynomial time algorithm can be described by a list of such instructions,
link |
you could translate the problem into the language of the satisfiability problem.
link |
Is that amazing to you, by the way? If you take yourself back when you were first thinking about
link |
the space of problems, how amazing is that? It's astonishing. When you look at Cook's proof,
link |
it's not too difficult to figure out why this is so, but the implications are staggering.
link |
It tells us that this, of all the problems in NP, all the problems where solutions are easy to
link |
check, they can all be rewritten in terms of the satisfiability problem.
link |
Yeah, it's adding so much more weight to the P equals NP question because all it takes is to show
link |
that one algorithm in this class. So the P versus NP can be reexpressed as simply asking whether the
link |
satisfiability problem of propositional logic is solvable in polynomial time.
link |
But there's more. I encountered Cook's paper when he published it in a conference in 1971.
link |
And yeah, so when I saw Cook's paper and saw this reduction of each of the problems in NP
link |
by a uniform method to the satisfiability problem of propositional logic,
link |
that meant that the satisfiability problem was a universal combinatorial problem.
link |
And it occurred to me through experience I had had in trying to solve other combinatorial problems
link |
that there were many other problems which seemed to have that universal structure.
link |
And so I began looking for reductions from the satisfiability to other problems.
link |
One of the other problems would be the so called integer programming problem of
link |
solving a determining whether there's a solution to a set of linear inequalities involving integer
link |
variables. Just like linear programming, but there's a constraint that the variables must
link |
remain integers. Integers in fact must be the zero or one that could only take on those values.
link |
And that makes the problem much harder. Yes, that makes the problem much harder.
link |
And it was not difficult to show that the satisfiability problem can be restated
link |
as an integer programming problem. So can you pause on that? Was that one of the first
link |
mappings that you tried to do? And how hard is that mapping? You said it wasn't hard to show, but
link |
that's a big leap. It is a big leap, yeah. Well, let me give you another example.
link |
Another problem in NP is whether a graph contains a clique of a given size.
link |
And now the question is, can we reduce the propositional logic problem to the problem of
link |
whether there's a clique of a certain size? Well, if you look at the propositional logic
link |
problem, it can be expressed as a number of clauses, each of which is of the form
link |
A or B or C, where A is either one of the variables in the problem or the negation of one of the
link |
variables. And an instance of the propositional logic problem can be rewritten using operations of
link |
Boolean logic, can be rewritten as the conjunction of a set of clauses, the AND of a set of ORs,
link |
where each clause is a disjunction on OR of variables or negated variables.
link |
So the question in the satisfiability problem is whether those clauses can be simultaneously
link |
satisfied. Now, to satisfy all those clauses, you have to find one of the terms in each clause,
link |
which is going to be true in your truth assignment, but you can't make the same
link |
variable both true and false. So if you have the variable A in one clause and you want to
link |
satisfy that clause by making A true, you can't also make the complement of A true in some other
link |
clause. And so the goal is to make every single clause true if it's possible to satisfy this,
link |
and the way you make it true is at least… One term in the clause must be true.
link |
So now to convert this problem to something called the independent set problem, where you're
link |
just sort of asking for a set of vertices in a graph such that no two of them are adjacent,
link |
sort of the opposite of the clique problem.
link |
So we've seen that we can now express that as finding a set of terms one in each clause
link |
without picking both the variable and the negation of that variable because if the variable is
link |
assigned the truth value, the negated variable has to have the opposite truth value. And so
link |
we can construct the graph where the vertices are the terms in all of the clauses and you have
link |
an edge between two occurrences of terms, either if they're both in the same clause
link |
because you're only picking one element from each clause and also an edge between them if they
link |
represent opposite values of the same variable because you can't make a variable both true
link |
and false. And so you get a graph where you have all of these occurrences of variables,
link |
you have edges, which mean that you're not allowed to choose both ends of the edge,
link |
either because they're in the same clause or they're con negations of one another.
link |
That's a really powerful idea that you can take a graph and connect it to a logic equation
link |
and do that mapping for all possible formulations of a particular problem on a graph.
link |
I mean, that still is hard for me to believe. That's possible. What do you make of that?
link |
There's such a union of, there's such a friendship among all these problems across
link |
that somehow are akin to combinatorial algorithms that they're all somehow related.
link |
I know it can be proven, but what do you make of it that that's true?
link |
Well, that they just have the same expressive power. You can take any one of them and
link |
translate it into the terms of the other. The fact that they have the same expressive power
link |
also somehow means that they can be translatable. Right. And what I did in the 1971 paper was to
link |
take 21 fundamental problems, commonly occurring problems of packing, covering, matching, and so
link |
forth, lying in the class NP and show that the satisfiability problem can be reexpressed as any
link |
of those, that any of those have the same expressive power.
link |
And that was like throwing down the gauntlet of saying there's probably many more problems like
link |
this, but that's just saying that, look, they're all the same. They're all the same,
link |
but not exactly. They're all the same in terms of whether they are rich enough to express any of
link |
the others. But that doesn't mean that they have the same computational complexity. But what we
link |
can say is that either all of these problems or none of them are solvable in polynomial time.
link |
Yes, so where does NP completeness and NP hard as classes?
link |
Oh, that's just a small technicality. So when we're talking about decision problems,
link |
that means that the answer is just yes or no. There is a clique of size 15 or there's not a
link |
clique of size 15. On the other hand, an optimization problem would be asking, find the largest
link |
clique. The answer would not be yes or no, it would be 15. So when you're asking for the,
link |
when you're putting a valuation on the different solutions and you're asking for the one with the
link |
highest valuation, that's an optimization problem. And there's a very close affinity between the
link |
two kinds of problems. But the counterpart of being the hardest decision problem, the hardest yes,
link |
no problem, the kind of part of that is to minimize or maximize an objective function. And so a problem
link |
that's hardest in the class when viewed in terms of optimization, those are called NP hard, rather
link |
than NP complete. And NP complete is for decision problems. And NP complete is for decision problems.
link |
And NP complete is for decision problems. So if somebody shows that P equals NP,
link |
what do you think that proof will look like if you were to put on yourself, if it's possible to show
link |
that as a proof or to demonstrate an algorithm? All I can say is that it will involve concepts
link |
that we do not now have and approaches that we don't have. Do you think those concepts are out
link |
there in terms of inside complexity theory, inside of computational analysis of algorithms?
link |
Do you think there's concepts that are totally outside of the box who haven't considered yet?
link |
I think that if there is a proof that P is equal to NP or that P is not equal to NP,
link |
it'll depend on concepts that are now outside the box.
link |
Now, if that's shown, either way, P equals NP or P not, well, actually P equals NP, what impact,
link |
you kind of mentioned a little bit, but can you link on it, what kind of impact would it have
link |
on theoretical computer science and perhaps software based systems in general?
link |
Well, I think it would have enormous impact on the world in either case. If P is unequal to NP,
link |
which is what we expect, then we know that for the great majority of the combinatorial problems
link |
that come up, since they're known to be NP complete, we're not going to be able to solve them by
link |
efficient algorithms. However, there's a little bit of hope in that it may be that we can solve
link |
most instances. All we know is that if a problem is not in P, then it can't be solved efficiently
link |
on all instances. But basically, if we find that P is unequal to NP, it will mean that we
link |
can't expect always to get the optimal solutions to these problems. And we have to depend on
link |
heuristics that perhaps work most of the time or give us good approximate solutions, but not.
link |
So we would turn our eye towards the heuristics with a little bit more acceptance and comfort
link |
on our hearts. Exactly. Okay, so let me ask a romanticized question. What to you is one of the
link |
most or the most beautiful combinatorial algorithm in your own life or just in general in the field
link |
that you've ever come across or have developed yourself? I like the stable matching problem,
link |
or the stable marriage problem very much. What's the stable matching problem? Imagine that you
link |
want to marry off end boys with end girls. And each boy has an ordered list of his preferences
link |
among the girls, his first choice, his second choice through her nth choice. And each girl
link |
also has an ordering of the boys, his first choice, second choice, and so on. And we'll say
link |
that a one to one matching of the boys with the girls is stable if there are
link |
no two couples in the matching such that the boy in the first couple
link |
prefers the girl in the second couple to her mate and she prefers the boy to her current mate. In
link |
other words, the matching is stable if there is no pair who want to run away with each other
link |
leaving their partners behind. Gosh, yeah. Actually, this is relevant to matching
link |
residents with hospitals and some other real life problems, although not quite in the form that I
link |
describe. So it turns out that there is that a stable, for any set of preferences, a stable
link |
matching exists. And moreover, it can be computed by a simple algorithm in which each boy starts
link |
making proposals to girls. And if the girl receives a proposal, she accepts it tentatively,
link |
but she can drop it if she can end it, she can drop it later if she gets a better proposal
link |
from her point of view. And the boys start going down their lists proposing to their first,
link |
second, third choices until stopping when a proposal is accepted. But the girls,
link |
meanwhile, are watching the proposals that are coming into them and the girl will drop her
link |
current partner if she gets a better proposal. And the boys never go back through the list?
link |
They never go back. Yeah. So once they've been denied, they don't try again because the girls
link |
are always improving their status as they get more, as they receive better and better proposals.
link |
The boys are going down their list starting with their top preferences. And one can prove that
link |
the process will come to an end where everybody will get matched with somebody and you won't have
link |
any pairs that want to abscond from each other.
link |
Do you find that proof or the algorithm itself beautiful or is it the fact that with the simplicity
link |
of just the two marching, I mean, the simplicity of the underlying rule of the algorithm,
link |
is that the beautiful part? Both, I would say. And you also have the observation that
link |
you might ask, who is better off the boys who are doing the proposing or the girls who are
link |
reacting to proposals? And it turns out that it's the boys who are doing the best,
link |
that as each boy is doing at least as well as he could do in any other staple matching.
link |
So there's a sort of lesson for the boys that you should go out and be proactive and make those
link |
proposals go for broke. I don't know if this is directly mappable philosophically to our society,
link |
but certainly seems like a compelling notion. And like you said, there's probably a lot of
link |
actual real world problems that this could be mapped to.
link |
Yeah, well, you get complications. For example, what happens when a husband and wife want to
link |
be assigned to the same hospital? So you have to take those constraints into account. And then
link |
the problem becomes NP hard. Why is it a problem for the husband and wife to be assigned to the
link |
same hospital? No, it's desirable. Or at least go to the same city. So if you're assigning
link |
residents to hospitals. And then you have some preferences for the husband and wife or for the
link |
hospitals. The residents have their own preferences. Residents, both male and female, have their own
link |
preferences. The hospitals have their preferences. But if resident A, the boy, is going to Philadelphia,
link |
then you'd like his wife also to be assigned to a hospital in Philadelphia. So...
link |
Which step makes it an NP hard problem that you mentioned?
link |
The fact that you have this additional constraint. That it's not just the preferences of individuals,
link |
but the fact that the two partners to a marriage have to be assigned to the same place.
link |
I'm being a little dense. The perfect matching? No, not the stable matching,
link |
is what you referred to. That's when two partners are trying to...
link |
Okay. What's confusing you is that in the first
link |
interpretation of the problem, I had boys matching with girls.
link |
In the second interpretation, you have humans matching with institutions.
link |
And there's a coupling between within the, gotcha, within the humans. Any added little
link |
constraint will make it an NP hard problem. Well, yeah.
link |
Okay. By the way, the algorithm you mentioned wasn't one of yours?
link |
No, no, that was due to Gail and Shapley. And my friend David Gail passed away before he could
link |
get part of the Nobel Prize, but his partner, Shapley, shared in the Nobel Prize with somebody
link |
else for economics. For ideas stemming from the stable matching idea.
link |
So you've also developed yourself some elegant, beautiful algorithms. Again, picking your children.
link |
So the Robin Karp algorithm for string searching, pattern matching,
link |
Edmund Karp algorithm for max flows we mentioned, Hopcroft Karp algorithm for finding
link |
maximum cardinality, matchings, and bipartite graphs. Is there ones that stand out to you,
link |
ones you're most proud of, or just whether it's beauty, elegance, or just being the right discovery
link |
development in your life that you're especially proud of?
link |
I like the Robin Karp algorithm because it illustrates the power of randomization.
link |
So the problem there is to decide whether a given long string of symbols from some
link |
alphabet contains a given word, whether a particular word occurs within some very much longer word.
link |
And so the idea of the algorithm is to associate with the word that we're looking for,
link |
a fingerprint, some number, or some combinatorial object that
link |
describes that word, and then to look for an occurrence of that same fingerprint as you
link |
slide along the longer word. And what we do is we associate with each word a number. So first
link |
of all, we think of the letters that occur in a word as the digits of, let's say,
link |
decimal or whatever base here, whatever number of different symbols there are in the alphabet.
link |
That's the base of the numbers, yeah. Right. So every word can then be thought of as a number
link |
with the letters being the digits of that number. And then we pick a random prime number in a certain
link |
range and we take that word viewed as a number and take the remainder on dividing that number by
link |
the prime. So coming up with a nice hash function. It's a kind of hash function. Yeah.
link |
It gives you a little shortcut for that particular word. Yeah. So that's the,
link |
that's the... It's very different than any other algorithms of its kind that we're trying to do
link |
search, string matching. Yeah. Which usually are combinatorial and don't involve the idea of
link |
taking a random fingerprint. Yes. And doing the fingerprinting has two advantages. One is that
link |
as we slide along the long word, digit by digit, we can, we keep a window of a certain size,
link |
the size of the word we're looking for. And we compute the fingerprint of every
link |
stretch of that length. And it turns out that just a couple of arithmetic
link |
operations will take you from the fingerprint of one part to what you get when you slide over by
link |
one position. So the computation of all the fingerprints is simple. And secondly, it's
link |
unlikely if the prime is chosen randomly from a certain range that you will get
link |
two of the segments in question having the same fingerprint. And so there's a small probability
link |
of error which can be checked after the fact. And also the ease of doing the computation
link |
because you're working with these fingerprints, which are remainder's modulo some big prime.
link |
So that's the magical thing about randomized algorithms is that if you add a little bit
link |
of randomness, it somehow allows you to take a pretty naive approach, a simple looking approach
link |
and allow it to run extremely well. So can you maybe take a step back and say what is a randomized
link |
algorithm, this category of algorithms? Well, it's just the ability to draw a random number from
link |
such, from some range or to associate a random number with some object or to draw
link |
a random from some set. So another example is very simple if we're conducting a presidential
link |
election and we would like to pick the winner. In principle, we could draw a random sample of
link |
all of the voters in the country. And if it was of substantial size, say a few thousand,
link |
then the most popular candidate in that group would be very likely to be the correct choice
link |
that would come out of counting all the millions of votes. And of course, we can't do this because
link |
first of all, everybody has to feel that his or her vote counted. And secondly, we can't really do
link |
a purely random sample from that population. And I guess thirdly, there could be a tie in which case
link |
we wouldn't have a significant difference between two candidates.
link |
But those things aside, if you didn't have all that messiness of human beings,
link |
you could prove that that kind of random picking would solve the problem with a very low probability
link |
of error. Another example is testing whether a number is prime. So if I want to test whether
link |
17 is prime, I could pick any number between 1 and 17 and raise it to the 16th power,
link |
modulo 17, and you should get back the original number. That's a famous formula due to Fermat
link |
about what's called Fermat's little theorem, that if you take any A, any number A in the range
link |
0 through n minus 1 and raise it to the n minus 1th power, modulo n, you'll get back the number A
link |
if A is prime. So if you don't get back the number A, that's a proof that a number is not prime.
link |
And you can show that suitably define the probability that you will get
link |
a value unequal. You will get a violation of Fermat's result is very high, and so this gives
link |
you a way of rapidly proving that a number is not prime. It's a little more complicated than that
link |
because there are certain values of n where something a little more elaborate has to be done,
link |
but that's the basic idea. You're taking an identity that holds for primes, and therefore,
link |
if it ever fails on any instance for a nonprime unit, you know that the number is not prime.
link |
It's a quick choice, a fast choice, fast proof that a number is not prime.
link |
Can you maybe elaborate a little bit more what's your intuition why randomness works so well
link |
and results in such simple algorithms? Well, the example of conducting an election
link |
where you could take, in theory, you could take a sample and depend on the validity of the sample
link |
to really represent the whole is just the basic fact of statistics, which gives a lot of opportunities.
link |
I actually exploited that sort of random sampling idea in designing an algorithm for
link |
counting the number of solutions that satisfy a particular formula and propositional logic.
link |
In particular, so some version of the satisfiability problem? A version of the satisfiability problem.
link |
Is there some interesting insight that you want to elaborate on? What some aspect of
link |
that algorithm that might be useful to describe? You have a collection of
link |
formulas and you want to count the number of solutions that satisfy at least one of the formulas.
link |
And you can count the number of solutions that satisfy any particular one of the formulas,
link |
but you have to account for the fact that that solution might be counted many times if it solves
link |
more than one of the formulas. And so what you do is you sample from the formulas according to
link |
the number of solutions that satisfy each individual one. In that way, you draw a random
link |
solution, but then you correct by looking at the number of formulas that satisfy that random solution
link |
and don't double count. So you can think of it this way. So you have a matrix of zeros and ones
link |
and you want to know how many columns of that matrix contain at least one one.
link |
And you can count in each row how many ones there are. So what you can do is draw from
link |
the rows according to the number of ones. If a row has more ones, it gets drawn more frequently.
link |
But then, if you draw from that row, you have to go up the column and looking at
link |
where that same one is repeated in different rows and only count it as a success or a hit
link |
if it's the earliest row that contains the one. And that gives you a robust statistical estimate
link |
of the total number of columns that contain at least one of the ones. So that is an example of
link |
the same principle that was used in studying random sampling. Another viewpoint is that
link |
if you have a phenomenon that occurs almost all the time, then if you sample one of the
link |
occasions where it occurs, you're most likely to and you're looking for an occurrence. A random
link |
occurrence is likely to work. So that comes up in solving identities, solving algebraic
link |
identities. You get two formulas that may look very different. You want to know if they're
link |
really identical. What you can do is just pick a random value and evaluate the formulas at that
link |
value and see if they agree. And you depend on the fact that if the formulas are distinct,
link |
then they're going to disagree a lot. And so, therefore, a random choice will exhibit the
link |
disagreement. If there are many ways for the two to disagree and you only need to find one
link |
disagreement, then random choice is likely to yield it.
link |
And in general, so we've just talked about randomized algorithms, but we can look at
link |
the probabilistic analysis of algorithms. And that gives us an opportunity to step back and,
link |
as we said, everything we've been talking about is worst case analysis.
link |
Because you may be comment on the usefulness and the power of worst case analysis versus
link |
best case analysis, average case probabilistic. How do we think about the future of theoretical
link |
computer science, computer science, and the kind of analysis we do of algorithms? Does
link |
worst case analysis still have a place, an important place, or do we want to try to move
link |
forward towards kind of average case analysis? And what are the challenges there?
link |
So, if worst case analysis shows that an algorithm is always good, that's fine. If worst case analysis
link |
is used to show that the problem, that the solution is not always good,
link |
then you have to step back and do something else to ask, how often will you get a good solution?
link |
That's just to pause on that for a second. That's so beautifully put because I think we
link |
tend to judge algorithms. We throw them in the trash the moment their worst case is shown to be bad.
link |
Right. And that's unfortunate. I think a good example is going back to the satisfiability
link |
problem. There are very powerful programs called SAT solvers, which in practice,
link |
fairly reliably solve instances with many millions of variables that arise in
link |
digital design or in proving programs correct and other applications.
link |
And so, in many application areas, even though satisfiability, as we've already
link |
discussed, is NP complete, the SAT solvers will work so well that the people in that discipline
link |
tend to think of satisfiability as an easy problem. So, in other words, just for some
link |
reason that we don't entirely understand, the instances that people formulate in designing
link |
digital circuits or other applications are such that satisfiability is not hard to check.
link |
And even searching for a satisfying solution can be done efficiently in practice.
link |
And there are many examples. For example, we talked about the traveling salesman problem.
link |
So, just to refresh our memories, the problem is you've got a set of cities. You have
link |
pairwise distances between cities. And you want to find a tour through all the cities that
link |
minimizes the total cost of all the edges traversed, all the trips between cities.
link |
The problem is NP hard, but people using integer programming codes together with some
link |
other mathematical tricks can solve geometric instances of the problem where the cities are,
link |
let's say, points in the plane and get optimal solutions to problems with tens of thousands
link |
of cities. Actually, it'll take a few computer months to solve a problem of that size, but for
link |
problems of size 1,000 or two, it'll rapidly get optimal solutions, provably optimal solutions,
link |
even though, again, we know that it's unlikely that the traveling salesman problem can be
link |
solved in polynomial time. Are there methodologies like rigorous
link |
systematic methodologies for, you said in practice. In practice, this algorithm sounds
link |
pretty good. Are there systematic ways of saying in practice, this one's pretty good?
link |
So, in other words, average case analysis. Or you've also mentioned that average case
link |
kind of requires you to understand what the typical cases, typical instances, and that
link |
might be really difficult. That's very difficult. So, after I did my original work on showing all
link |
these problems through NP complete, I looked around for a way to shed some positive light on
link |
combinatorial algorithms. And what I tried to do was to study problems, behavior on the average,
link |
or with high probability. But I had to make some assumptions about what's the probability space,
link |
what's the sample space, what do we mean by typical problems. That's very hard to say. So,
link |
I took the easy way out and made some very simplistic assumptions. So, I assumed, for example,
link |
that if we were generating a graph with a certain number of vertices and edges,
link |
then we would generate the graph by simply choosing one edge at a time at random until we got the
link |
right number of edges. That's a particular model of random graphs that has been studied
link |
mathematically a lot. And within that model, I could prove all kinds of wonderful things,
link |
I and others who also worked on this. So, we could show that we know exactly how many edges
link |
there have to be in order for there be a so called Hamiltonian circuit. That's a cycle that
link |
visits each vertex exactly once. We know that if the number of edges is a little bit more than n log n,
link |
where n is the number of vertices, then where such a cycle is very likely to exist,
link |
and we can give a heuristic that will find it with high probability. And we got the community
link |
in which I was working got a lot of results along these lines. But the field tended to be rather
link |
lukewarm about accepting these results as meaningful because we were making such a
link |
simplistic assumption about the kinds of graphs that we would be dealing with. So, we could show
link |
all kinds of wonderful things. It was a great playground. I enjoyed doing it. But after a while,
link |
I concluded that it didn't have a lot of bite in terms of the practical application.
link |
Okay. So, there's too much into the world of toy problems. Is there a way to find
link |
nice representative real world impactful instances of a problem on which demonstrate
link |
that an algorithm is good? So, the machine learning world is kind of what they
link |
at its best tries to do is find a data set from the real world and show the performance all of
link |
the all the conferences are all focused on beating the performance of on that real world data set.
link |
Is there an equivalent in complexity analysis?
link |
Not really. Don Knuth started to collect examples of graphs coming from various places. So, he
link |
would have a whole zoo of different graphs that he could choose from and he could study the
link |
performance of algorithms on different types of graphs. But there, it's really important and
link |
compelling to be able to define a class of graphs. So, the actual act of defining a class of graphs
link |
that you're interested in, it seems to be a non trivial step before talking about instances that
link |
we should care about in the real world. Yeah. There's nothing available there that would be
link |
analogous to the training set for supervised learning where you sort of assume that the world
link |
has given you a bunch of examples to work with. We don't really have that for problems,
link |
for combinatorial problems on graphs and networks.
link |
You know, there's been a huge growth, a big growth of data sets available. Do you think
link |
some aspect of theoretical computer science might be contradicting my own question while saying it,
link |
but will there be some aspect, an empirical aspect of theoretical computer science,
link |
which will allow the fact that these data sets are huge will start using them for analysis?
link |
Sort of, you know, if you want to say something about a graph algorithm, you might take
link |
a social network like Facebook and looking at subgraphs of that and prove something about the
link |
Facebook graph and be respected. And at the same time, be respected in the theoretical computer
link |
science community. That hasn't been achieved yet, I'm afraid. Is that P equals NP? Is that
link |
impossible? Is it impossible to publish a successful paper in the theoretical computer
link |
science community that shows some performance on a real world data set? Or is that really just
link |
those two different worlds? They haven't really come together. I would say that there is a field
link |
of experimental algorithmics where people, sometimes they're given some family of examples.
link |
Sometimes they just generate them at random and they report on performance. But there's no
link |
convincing evidence that the sample is representative of anything at all.
link |
So let me ask, in terms of breakthroughs and open problems, what are the most
link |
compelling open problems to you? And what possible breakthroughs do you see in the near term
link |
in terms of theoretical computer science? Well, there are all kinds of relationships
link |
among complexity classes that can be studied. Just to mention one thing, I wrote a paper with
link |
Richard Lipton in 1979 where we asked the following question. If you take a combinatorial problem
link |
in NP, let's say, and you pick the size of the problem. I say it's a traveling salesman problem,
link |
but of size 52. And you ask, could you get an efficient, a small Boolean circuit tailored for
link |
that size, 52, where you could feed the edges of the graph in as Boolean inputs and get as an
link |
output the question of whether or not there's a tour of a certain length. And that would,
link |
in other words, briefly, what you would say in that case is that the problem has small circuits,
link |
polynomial size circuits. Now, we know that if P is equal to NP, then, in fact, these problems
link |
will have small circuits. But what about the converse? Could a problem have small circuits,
link |
meaning that an algorithm tailored to any particular size could work well,
link |
and yet not be a polynomial time algorithm? That is, you couldn't write it as a single
link |
uniform algorithm good for all sizes. Just to clarify, small circuits for a problem of particular
link |
size or even further constraint, small circuit for a particular... No, for all the inputs of that
link |
size. Of that size. Is that a trivial problem for a particular instance? So coming up an automated
link |
way of coming up with a circuit, I guess that's... That would be hard. But there's the existential
link |
question. Everybody talks nowadays about existential questions, existential challenges.
link |
Yeah. You could ask the question, does the Hamiltonian circuit problem have
link |
a small circuit for every size, for each size, a different small circuit?
link |
In other words, could you tailor solutions depending on the size and get polynomial size?
link |
Even if P is not equal to NP. Right. That would be fascinating if that's true.
link |
Yeah. What we proved is that if that were possible, then something strange would happen
link |
in complexity theory, some high level class which I could briefly describe, something strange would
link |
happen. So I'll take a stab at describing what I mean. Sure. Let's go there.
link |
So we have to define this hierarchy in which the first level of the hierarchy is P
link |
and the second level is NP. And what is NP? NP involves statements of the form
link |
there exists a something, such that something holds. So for example, there exists a coloring
link |
such that a graph can be colored with only that number of colors or there exists a Hamiltonian
link |
circuit. There's a statement about this graph. Yeah. So the NP deals with statements of that
link |
kind, that there exists a solution. Now, you could imagine a more complicated
link |
expression which says for all x, there exists a y such that some proposition holds involving
link |
both x and y. So that would say, for example, in game theory, for all strategies for the first
link |
player, there exists a strategy for the second player such that the first player wins. That would
link |
be at the second level of the hierarchy. The third level would be there exists an A such
link |
that for all B, there exists a C, but something holds. And you can imagine going higher and higher
link |
in the hierarchy. And you'd expect that the complexity classes that correspond to those
link |
different cases would get bigger and bigger. Sorry, they'd get harder and harder to solve.
link |
And what Lifton and I showed was that if NP had small circuits, then this hierarchy would collapse
link |
down to the second level. In other words, you wouldn't get any more mileage by complicating
link |
your expressions with three quantifiers or four quantifiers or any number.
link |
I'm not sure what to make of that exactly. Well, I think it would be evidence that NP doesn't have
link |
small circuits because something so bizarre would happen. But again, it's only evidence,
link |
not proof. Well, yeah, that's not even evidence because you're saying P is not equal to NP because
link |
something bizarre has to happen. I mean, that's proof by the lack of
link |
bizarreness in our science. But it seems like just the very notion of P equals NP would be
link |
bizarre. So any way you arrive it, there's no way you have to fight the dragon at some point.
link |
Yeah. Okay. Well, for whatever it's worth, that's what we proved.
link |
Awesome. So that's a potential space of interesting problems. Let me
link |
ask you about this other world of machine learning, of deep learning. What's your
link |
thoughts on the history and the current progress of machine learning field that's often progressed
link |
sort of separately as a space of ideas and space of people than the theoretical computer science
link |
or just even computer science world? Yeah. It's really very different from the theoretical computer
link |
science world because the results about algorithmic performance tend to be empirical. It's more akin
link |
to the world of SAT solvers where we observe that for formulas arising in practice, the solver does
link |
well. So it's of that type. We're moving into the empirical evaluation of algorithms.
link |
Now, it's clear that there have been huge successes in image processing, robotics,
link |
natural language processing a little less so. But across the spectrum of
link |
game playing is another one. There have been great successes. And one of those
link |
effects is that it's not too hard to become a millionaire if you can get a reputation in
link |
machine learning and there'll be all kinds of companies that will be willing to offer you
link |
the moon because they think that if they have AI at their disposal,
link |
then they can solve all kinds of problems. But there are limitations.
link |
One is that the solutions that you get to
link |
supervise learning problems through convolutional neural networks seem to perform
link |
amazingly well even for inputs that are outside the training set.
link |
But we don't have any theoretical understanding of why that's true.
link |
Secondly, the solutions, the networks that you get are very hard to understand and so very little
link |
insight comes out. So yeah, they may seem to work on your training set and you may be able to
link |
discover whether your photos occur in a different sample of inputs or not.
link |
But we don't really know what's going on. We don't know the features that distinguish
link |
the photographs or the objects are not easy to characterize.
link |
Well, it's interesting because you mentioned coming up with a small circuit
link |
to solve a particular size problem. It seems that neural networks are kind of small circuits.
link |
In a way, yeah. But they're not programs. Sort of like the things you've designed are algorithms,
link |
programs, algorithms. Neural networks aren't able to develop algorithms to solve a problem.
link |
Well, they are algorithms. It's just that they're...
link |
But sort of, yeah, it could be a semantic question, but there's not
link |
a algorithmic style manipulation of the input. Perhaps you could argue there is.
link |
Yeah, well, it feels a lot more like a function of the input.
link |
It's a function. It's a computable function.
link |
And once you have the network, you can simulate it on a given input and figure out the output.
link |
But if you're trying to recognize images, then you don't know what features of the image are really
link |
being determinant of what the circuit is doing. The circuit is sort of very intricate and it's
link |
not clear that the simple characteristics that you're looking for, the edges of the objects or
link |
whatever they may be, they're not emerging from the structure of the circuit.
link |
Well, it's not clear to us humans, but it's clear to the circuit.
link |
Yeah, well, right. I mean, it's not clear to sort of the
link |
elephant how the human brain works, but it's clear to us humans, we can explain to each other
link |
our reasoning and that's why the cognitive science and psychology field exist.
link |
Maybe the whole thing of being explainable to humans is a little bit overrated.
link |
Oh, maybe, yeah. I guess you can say the same thing about our brain that when we perform
link |
acts of cognition, we have no idea how we do it really. We do, though. I mean, for
link |
at least for the visual system, the auditory system and so on, we do
link |
get some understanding of the principles that they operate under, but
link |
for many deeper cognitive tasks, we don't have that.
link |
That's right. Let me ask, you've also been doing work on bioinformatics.
link |
Does it amaze you that the fundamental building blocks, so if we take a step back
link |
and look at us humans, the building blocks used by evolution to build us intelligent
link |
human beings is all contained there in our DNA?
link |
It's amazing, and what's really amazing is that we are beginning to learn how to edit
link |
DNA, which is very, very, very fascinating. This ability to
link |
take a sequence, find it in the genome, and do something to it.
link |
That's really taking our biological systems towards the worlds of algorithms.
link |
But it raises a lot of questions. You have to distinguish between doing it on an individual
link |
or doing it on somebody's germline, which means that all of their descendants will be affected.
link |
So, that's an ethical…
link |
Yeah, so it raises very severe ethical questions.
link |
Even doing it on individuals, there's a lot of hubris involved that you can assume that
link |
knocking out a particular gene is going to be beneficial because you don't know what the
link |
side effects are going to be. So, we have this wonderful new world of gene editing,
link |
which is very, very impressive, and it could be used in agriculture, it could be used in medicine
link |
in various ways, but very serious ethical problems arise.
link |
What are, to you, the most interesting places where algorithms…
link |
Sort of the ethical side is an exceptionally challenging thing that I think we're going to
link |
have to tackle with all of genetic engineering. But on the algorithmic side, there's a lot of
link |
benefit that's possible. So, is there areas where you see exciting possibilities for algorithms to
link |
help model optimized study biological systems? Yeah, I mean, we can certainly analyze genomic data to
link |
figure out which genes are operative in the cell and under what conditions and which proteins affect
link |
one another, which proteins physically interact. We can sequence proteins and modify them.
link |
Is there some aspect of that that's a computer science problem,
link |
or is that still fundamentally a biology problem? Well, it's a big data,
link |
it's a statistical big data problem for sure. So, the biological data sets are increasing,
link |
our ability to study our ancestry, to study the tendencies towards disease, to personalize
link |
treatment according to what's in our genomes and what tendencies for disease we have,
link |
to be able to predict what troubles might come upon us in the future and anticipate them to
link |
to understand whether you, for a woman, whether her perclivity for breast cancer is so strong
link |
enough that you would want to take action to avoid it. You dedicate your 1985 Turing Award
link |
lecture to the memory of your father. What's your fondest memory of your dad?
link |
Seeing him standing in front of a class at the blackboard drawing perfect circles
link |
by hand and showing his ability to attract the interest of the motley collection of
link |
eighth grade students that he was teaching. When did you get a chance to see him draw the perfect
link |
circles? On rare occasions, I would get a chance to sneak into his classroom and observe it.
link |
I think he was at his best in the classroom. I think he really came to life
link |
and had fun, not only teaching, but engaging in chit chat with the students and
link |
you know, ingratiating himself with the students. And what I inherited from that is
link |
a great desire to be a teacher. I retired recently and a lot of my former students came,
link |
students with whom I had done research or who had read my papers or who had been in my classes.
link |
And when they talked about me, they talked not about my 1979 paper or 1992 paper,
link |
but about what came away in my classes and not just the details, but just the approach
link |
on the manner of teaching. And so I sort of take pride in the, at least in my early years as a
link |
faculty member at Berkeley, I was exemplary in preparing my lectures and I always came in
link |
prepared to the teeth and able, therefore, to deviate according to what happened in the class
link |
and to really, really provide a model for the students.
link |
So is there advice you could give out for others on how to be a good teacher? So preparation is
link |
one thing you've mentioned being exceptionally well prepared, but there are other things,
link |
pieces of advice that you can impart. Well, the top three would be preparation,
link |
preparation and preparation. Why is preparation so important, I guess?
link |
It's because it gives you the ease to deal with any situation that comes up in the classroom. And
link |
if you discover that you're not getting through one way, you can do it another way. If the students
link |
have questions, you can handle the questions. Ultimately, you're also feeling the crowd,
link |
the students of what they're struggling with, what they're picking up, just looking at them
link |
through the questions, but even just through their eyes. And because of the preparation,
link |
you can dance. You can dance. You can say it another way or give it another angle.
link |
Are there, in particular, ideas and algorithms of computer science that you find were big aha
link |
moments for students where they, for some reason, once they got it, it clicked for them and they
link |
fell in love with computer science? Or is it individual? Is it different for everybody?
link |
It's different for everybody. You have to work differently with students. Some of them just
link |
don't need much influence. They're just running with what they're doing and they just need an
link |
ear now and then. Others need a little prodding. Others need to be persuaded to collaborate
link |
among themselves rather than working alone. They have their personal ups and downs,
link |
so you have to deal with each student as a human being and bring out the best.
link |
Humans are complicated. Perhaps a silly question. If you could relive a moment in your life outside
link |
of family because it made you truly happy or perhaps because it changed the direction of your
link |
life in a profound way, what moment would you pick? I was kind of a lazy student as an undergraduate
link |
and even in my first year in graduate school. I think it was when I started doing research.
link |
I had a couple of summer jobs where I was able to contribute and I had an idea.
link |
Then there was one particular course on mathematical methods and operations research
link |
where I just gobbled up the material and I scored 20 points higher than anybody else in the class
link |
then came to the attention of the faculty. It made me realize that I had some ability
link |
that was going somewhere. You realize you're pretty good at this thing.
link |
I don't think there's a better way to end it, Richard. It was a huge honor.
link |
Thank you for decades of incredible work. Thank you for talking to us.
link |
Thank you. It's been a great pleasure. You're a superb interviewer.
link |
Thanks for listening to this conversation with Richard Karp and thank you to our sponsors,
link |
Aidsleep and Cash App. Please consider supporting this podcast by going to aidsleep.com to check out
link |
their awesome mattress and downloading Cash App and using code LEX podcast.
link |
Click the links, buy the stuff, even just visiting the site, but also considering the purchase
link |
helps them know that this podcast is worth supporting in the future.
link |
It really is the best way to support this journey I'm on. If you enjoy this thing,
link |
subscribe on YouTube, review it with Five Stars and Apple Podcasts, support it on Patreon,
link |
or connect with me on Twitter at Lex Freedman if you can figure out how to spell that.
link |
And now let me leave you with some words from Isaac Asimov.
link |
I do not fear computers. I fear lack of them. Thank you for listening and hope to see you next time.