Placeholder Image

字幕表 動画を再生する

  • The following content is provided under a Creative

  • Commons license.

  • Your support will help MIT OpenCourseWare

  • continue to offer high-quality educational resources for free.

  • To make a donation or to view additional materials

  • from hundreds of MIT courses, visit MIT OpenCourseWare

  • at ocw.mit.edu.

  • JULIAN SHUN: Hi, good afternoon, everyone.

  • So today, we're going to be talking

  • about graph optimizations.

  • And as a reminder, on Thursday, we're

  • going to have a guest lecture by Professor Johnson of the MIT

  • Math Department.

  • And he'll be talking about performance

  • of high-level languages.

  • So please be sure to attend the guest lecture on Thursday.

  • So here's an outline of what I'm going

  • to be talking about today.

  • So we're first going to remind ourselves what a graph is.

  • And then we're going to talk about various ways

  • to represent a graph in memory.

  • And then we'll talk about how to implement

  • an efficient breadth-first search algorithm, both serially

  • and also in parallel.

  • And then I'll talk about how to use graph compression and graph

  • reordering to improve the locality of graph algorithms.

  • So first of all, what is a graph?

  • So a graph contains vertices and edges,

  • where vertices represent certain objects of interest,

  • and edges between objects model relationships between the two

  • objects.

  • For example, you can have a social network,

  • where the people are represented as vertices

  • and edges between people mean that they're

  • friends with each other.

  • The edges in this graph don't have to be bi-directional.

  • So you could have a one-way relationship.

  • For example, if you're looking at the Twitter network,

  • Alice could follow Bob, but Bob doesn't necessarily

  • have to follow Alice back.

  • The graph also doesn't have to be connected.

  • So here, this graph here is connected.

  • But, for example, there could be some people

  • who don't like to talk to other people.

  • And then they're just off in their own component.

  • You can also use graphs to model protein networks, where

  • the vertices are proteins, and edges between vertices

  • means that there's some sort of interaction

  • between the proteins.

  • So this is useful in computational biology.

  • As I said, edges can be directed,

  • so their relationship can go one way or both ways.

  • In this graph here, we have some directed edges and then also

  • some edges that are directed in both directions.

  • So here, John follows Alice.

  • Alice follows Peter.

  • And then Alice follows Bob, and Bob also follows Alice.

  • If you use a graph to represent the world wide web,

  • then the vertices would be websites,

  • and then the edges would denote that there is a hyperlink

  • from one website to another.

  • And again, the edges here don't have to be bi-directional

  • because website A could have a link to website B.

  • But website B doesn't necessarily

  • have to have a link back.

  • Edges can also be weighted.

  • So you can have a weight on the edge that

  • denotes the strength of the relationship

  • or some sort of distance measure corresponding

  • to that relationship.

  • So here, I have an example where I am using a graph

  • to represent cities.

  • And the edges between cities have

  • a weight that corresponds to the distance between the two

  • cities.

  • And if I want to find the quickest way to get from city A

  • to city B, then I would be interested in finding

  • the shortest path from A to B in this graph here.

  • Here's another example, where the edge weights now

  • are the costs of a direct flight from city A to city B.

  • And here the edges are directed.

  • So, for example, this says that there's

  • a flight from San Francisco to LA for $45.

  • And if I want to find the cheapest

  • way to get from one city to another city,

  • then, again, I would try to find the shortest path in this graph

  • from city A to city B.

  • Vertices and edges can also have metadata on them,

  • and they can also have types.

  • So, for example, here's the Google Knowledge Graph,

  • which represents all the knowledge on the internet

  • that Google knows about.

  • And here, the nodes have metadata on them.

  • So, for example, the node corresponding to da Vinci

  • is labeled with his date of birth and date of death.

  • And the vertices also have a color

  • corresponding to the type of knowledge that they refer to.

  • So you can see that some of these nodes are blue,

  • some of them are red, some of them are green,

  • and some of them have other things on them.

  • So in general, graphs can have types and metadata

  • on both the vertices as well as the edges.

  • Let's look at some more applications of graphs.

  • So graphs are very useful for implementing queries

  • on social networks.

  • So here are some examples of queries

  • that you might want to ask on a social network.

  • So, for example, you might be interested in finding

  • all of your friends who went to the same high school as you

  • on Facebook.

  • So that can be implemented using a graph algorithm.

  • You might also be interested in finding

  • all of the common friends you have with somebody else--

  • again, a graph algorithm.

  • And a social network service might run a graph algorithm

  • to recommend people that you might know and want

  • to become friends with.

  • And they might use a graph algorithm

  • to recommend certain products that you

  • might be interested in.

  • So these are all examples of social network queries.

  • And there are many other queries that you

  • might be interested in running on a social network.

  • And many of them can be implemented

  • using graph algorithms.

  • Another important application is clustering.

  • So here, the goal is to find groups of vertices

  • in a graph that are well-connected

  • internally and poorly-connected externally.

  • So in this image here, each blob of vertices of the same color

  • corresponds to a cluster.

  • And you can see that inside a cluster,

  • there are a lot of edges going among the vertices.

  • And between clusters, there are relatively fewer edges.

  • And some applications of clustering

  • include community detection and social networks.

  • So here, you might be interested in finding

  • groups of people with similar interests or hobbies.

  • You can also use clustering to detect fraudulent websites

  • on the internet.

  • You can use it for clustering documents.

  • So you would cluster documents that

  • have similar text together.

  • And clustering is often used for unsupervised learning

  • and machine learning applications.

  • Another application is connectomics.

  • So connectomics is the study of the structure, the network

  • structure of the brain.

  • And here, the vertices correspond to neurons.

  • And edges between two vertices means

  • that there's some sort of interaction between the two

  • neurons.

  • And recently, there's been a lot of work

  • on trying to do high-performance connectomics.

  • And some of this work has been going on here at MIT

  • by Professor Charles Leiserson and Professor Nir Shavit's

  • research group.

  • So recently, this has been a very hot area.

  • Graphs are also used in computer vision--

  • for example, in image segmentation.

  • So here, you want to segment your image

  • into the distinct objects that appear in the image.

  • And you can construct a graph by representing the pixels

  • as vertices.

  • And then you would place an edge between every pair

  • of neighboring pixels with a weight that corresponds

  • to their similarity.

  • And then you would run some sort of minimum cost cut algorithm

  • to partition your graph into the different objects that

  • appear in the image.

  • So there are many other applications.

  • And I'm not going to have time to go through all of them

  • today.

  • But here's just a flavor of some of the applications of graphs.