6.
006
Introduction to Algorithms
Lecture 1: Document Distance
Prof. Erik Demaine
Your Professors
Prof. Erik Demaine
Prof. Piotr Indyk Prof. Manolis Kellis
Your
TAs
Kevin Kelley
Joseph Laurendi
David Wen
Tianren Qi
Nicholas Zehender
Your
Textbook
Administrivia
Handout: Course information
Webpage: [Link]
Sign up for recitation if you didnt fill out form already
Sign up for problem set server: [Link]
Sign up for Piazzza account to ask/answer questions:
[Link]
Prereqs: 6.01 (Python), 6.042 (discrete math)
Grades: Problem sets (30%)
Quiz 1
(20%; Mar. 8 @ 7.309.30pm)
Quiz 2
(20%; Apr. 13 @ 7.309.30pm)
Final
(30%)
Lectures & Recitations; Homework labs; Quiz reviews
Read collaboration policy!
Today
Class overview
Whats a (good) algorithm?
Topics
Document Distance
Vector space model
Algorithms
Python profiling & gotchas
Whats an Algorithm?
Mathematical abstraction of
computer program
Wellspecified method for solving
a computational problem
Typically, a finite sequence
of operations
Description might be structured
English, pseudocode, or real code
Key: no ambiguity
[Link]
alKhwrizm
(c. 780850)
alkharazmi
[Link]
[Link]
alKhwrizm
(c. 780850)
alkharazmi
Father of algebra
The Compendious
Book on Calculation by
Completion and
Balancing (c. 830)
Linear & quadratic
equations: some of the
first algorithms
[Link]
[Link]
mu%E1%B8%ABta%E1%B9%A3ar_f%C4%AB_%E1%B8%A5is%C4%81b_al
%C4%9Fabr_walmuq%C4%[Link]
Efficient Algorithms
Want an algorithm thats
Correct
Fast
Small space
General
Simple
Clever
Efficient Algorithms
Mainly interested in scalability
as problem size grows
Why Efficient Algorithms?
Save wait time, storage needs, energy
consumption/cost,
Scalability = win
Solve bigger problems given fixed resources
(CPU, memory, disk, etc.)
Optimize travel time, schedule conflicts,
How to Design an
Efficient Algorithm?
1. Define computational problem
2. Abstract irrelevant detail
3. Reduce to a problem you learn here
(or 6.046 or algorithmic literature)
4.
5.
6.
7.
Else design using algorithmic toolbox
Analyze algorithms scalability
Implement & evaluate performance
Repeat (optimize, generalize)
Modules & Applications
1.
2.
3.
4.
5.
6.
7.
8.
Introduction
Binary Search Trees
Hashing
Sorting
Graph Search
Shortest Paths
Dynamic Programming
Numbers Pictures (NP)
9. Beyond
Document similarity
Scheduling
File synchronization
Spreadsheets
Rubiks Cube
Google Maps
Justifying text, packing,
Computing , collision
detection, hard problem
Folding, streaming, bio
Document
Distance
Given two documents,
how similar are they?
Applications:
Find similar documents
Detect plagiarism /
duplicates
Web search
(one document is query)
[Link]
[Link]
Document
Distance
How to define
document?
Word = sequence of
alphanumeric
characters
Document =
sequence of words
Ignore punctuation &
formatting
Document
Distance
How to define
distance?
Idea: focus on
shared words
Word frequencies:
= #
occurrences of word
in document
Vector Space Model
[Salton, Wong, Yang 1975]
Treat each document
One coordinate
as a vector of its words
for every possible word
dog
Example:
= the cat
= the dog
Similarity between vectors?
Dot product:
the
1
cat
[Link]
Vector Space Model
[Salton, Wong, Yang 1975]
Problem: Dot product not scale invariant
Example 1:
dog
= the cat
= the dog
2
1
Example 2:
= the cat the cat
= the dog the dog
0
1
the
1
2
cat
[Link]
Vector Space Model
[Salton, Wong, Yang 1975]
Idea: Normalize by # words:
dog
1
the
Geometric solution:
angle between vectors
0 = identical,
cat
= orthogonal (no shared words)
[Link]
Algorithm
1.
2.
3.
4.
Read documents
Split each document into words
Count word frequencies (document vectors)
Compute dot product
Algorithm
1. Read documents
2. Split each document into words
[Link](\w+, doc)
But how does this actually work?
3. Count word frequencies (document vectors)
4. Compute dot product
Algorithm
1. Read documents
2. Split each document into words
For each line in document:
For each character in line:
If not alphanumeric:
Add previous word
(if any) to list
Start new word
3. Count word frequencies (document vectors)
4. Compute dot product
Algorithm
1. Read documents
2. Split each document into words
3. Count word frequencies (document vectors)
a. Sort the word list
b. For each word in word list:
If same as last word:
Increment counter
Else:
Add last word and its counter to list
Reset counter to 0
4. Compute dot product
Algorithm
1.
2.
3.
4.
Read documents
Split each document into words
Count word frequencies (document vectors)
Compute dot product:
For every possible word:
Look up frequency in each document
Multiply
Add to total
Algorithm
1.
2.
3.
4.
Read documents
Split each document into words
Count word frequencies (document vectors)
Compute dot product:
For every word in first document:
If it appears in second document:
Multiply word frequencies
Add to total
Algorithm
1.
2.
3.
4.
Read documents
Split each document into words
Count word frequencies (document vectors)
Compute dot product:
a. Start at first word of each document (in sorted order)
b. If words are equal:
Multiply word frequencies
Add to total
c. In whichever document has lexically
lesser word, advance to next word
d. Repeat until either document out of words
Algorithm
1. Read documents
2. Split each document into words
3. Count word frequencies (document vectors)
a. Initialize a dictionary mapping words to counts
b. For each word in word list:
If in dictionary:
Increment counter
Else:
Put 0 in dictionary
4. Compute dot product
Algorithm
1.
2.
3.
4.
Read documents
Split each document into words
Count word frequencies (document vectors)
Compute dot product:
For every word in first document:
If it appears in second document:
Multiply word frequencies
Add to total
Python Implementations
Python Profiling
Culprit
Fix
Python Implementations
docdist1
docdist2
docdist3
docdist4
docdist5
docdist6
docdist7
docdist8
initial version
add profiling
replace + with extend
count frequencies using dictionary
split words with [Link]
change insertion sort to merge sort
no sorting, dot product with dictionary
split words on whole document,
not line by line
192.5 sec
126.5 sec
73.4 sec
18.1 sec
11.5 sec
1.8 sec
0.2 sec
Experiments on Intel Pentium 4, 2.8GHz, Python 2.6.2, Linux 2.6.18.
Document 1 ([Link]) has 268,778 lines, 49,785 words, 3,354 distincts.
Document 2 ([Link]) has 1,031,470 lines, 182,355 words, 8,530 distincts.
Dont Forget!
Webpage:
[Link]
Sign up for recitation if you didnt already
receive a recitation assignment from us
Sign up for problem set server:
[Link]
Sign up for Piazzza account to ask/answer
questions: [Link]