2. Agenda Items and Presenters
Bell Numbers
All Pairs Shortest Path
Shell Sort and Radix Sort Psuedocode
3. Bell Numbers
A Use Case
In how many ways, counting ties, can 8 horses cross a finish line?
4. Bell Numbers
Horse Racing Example
Let’s consider just four horses for now and develop a recurrence
relation, a systematic way of counting the possible outcomes.
In mathematics, a recurrence relation is an equation that recursively
defines a sequence, one or more initial terms are given: each further
term of the sequence is defined as a function of the preceding terms.
Four horses may finish in one, two, three or four “blocks”.
Define “blocks”…
A block in this case is a pattern of possible ways the horses can
finish.
If we have fours horses as follows…
9. Bell Numbers
More Background Info
Three block example:
(Alpha) (Boxtrot) (Yisele, Xray) have finished separately.
Yisele and Xray have tied.
10. Bell Numbers
Blocks
Three blocks – (Alpha), (Beta), (Yisele, Xray) may be arranged in 3!
= 6 ways.
The arrangements for a block of three ways in which the horses can
finish.
Note: This does not take into account places (first, second, third,
fourth).
(Alpha) (Boxtrot) (Yisele, Xray), (Alpha) (Yisele) (Boxtrot, Xray),
(Alpha) (Xray) (Boxtro, Yisele), (Boxtrot) (Yisele) (Alpha, Xray),
(Boxtrot) (Xray) (Alpha, Yisele), (Yisele) (Xray) (Alpha, Beta)
11. Bell Numbers
Blocks, Partitions
Arrangements and Outcomes
# Blocks Partitions
1
(Alpha, Boxtrot, Yisele, Xray)
Total Partitions
1
Arrangements per Partition
1!
Outcomes Possible
1
2
(Alpha) (Boxtrot, Yisele, Xray) , (Boxtrot) (Alpha, Yisele, Xray),
(Yisele) (Alpha, Boxtrot, Xray), (Xray) (Alpha, Boxtrot, Yisele).
(Alpha, Boxtrot) (Yisele, Xray), (Alpha, Yisele) (Boxtrot, Xray),
(Alpha, Xray) (Boxtrot, Yisele)
7
2!
14
3
(Alpha) (Boxtrot) (Yisele, Xray), (Alpha) (Yisele) (Boxtrot, Xray),
(Alpha) (Xray) (Boxtro, Yisele), (Boxtrot) (Yisele) (Alpha, Xray),
(Boxtrot) (Xray) (Alpha, Yisele), (Yisele) (Xray) (Alpha, Beta)
6
3!
36
4
(Alpha) (Boxtrot) (Yisele) (Xray)
1
15
4!
24
Bell Number
The number of ways a set of n elements can be partitioned into m
nonempty subsets S(n,m) is the Bell number. In this case 4
horses (elements) can be partitioned in 15 different ways. In this
case we added it up manually but we can determine a formula
and also a graphical way to calculate as follows….
12. Bell Numbers Calculate Graphically
The numbers can be constructed by using the Bell Triangle. Start
with a row with the number one. Afterward each row begins with the
last number of the previous row and continues to the right adding
each number to the number above it to get the next number in the
row..
13. Bell Numbers
The Formula
S(n+1) = S(n,m-1) + m * S(n,m)
n = elements
m = blocks
B(5) = S(5,1) + S(5,2) + S(5,3) + S(5,4) + S(5,5)
14. Answer to the Problem
H8 =
Where S(n,k) denotes the # ways n horses can cross in k blocks.
H8 = 1×1! + 127×2! + 966×3! + 1701×4! +
1050×5! + 266×6! + 28×7! + 1×8!
= 545835.
H8 denotes the number of ways 8 horses can cross the finish line.
15. Bell Numbers
Psuedocode
How do you represent a partitioning of a set of n elements?
(This example is somewhat more challenging that the previous ones. Feel free to skim it, and
go on.) The n’th Bell number Bn is the number of ways of partitioning n (distinct) objects. One
way of computing the Bell numbers is by using the following double recursive algorithm. This
algorithm computes numbers with two arguments: B(i,j). The n’th Bell number, Bn is computed
as
B(n,n). For example to find B3 compute B(3,3).1
B(1,1) = 1.
B(n,1) = B(n-1,n-1) for n > 1.
B(i,j) = B(i-1,j-1) + B(i,j-1) for n > 1 and 1 < j # i.
Technical Information:
Language:
Objects:
16. All Pairs Shortest Path
Given a weighted graph G(V,E,w), the all-pairs shortest paths
problem is to find the shortest paths between all pairs of vertices vi,
vj ∈ V.
A number of algorithms are known for solving this problem.
17. All Pairs Shortest Path
Consider the multiplication of the weighted adjacency matrix with itself
- except, in this case, we replace the multiplication operation in matrix
multiplication by addition, and the addition operation by minimization.
Notice that the product of weighted adjacency matrix with itself
returns a matrix that contains shortest paths of length 2 between any
pair of nodes.
It follows from this argument that An contains all shortest paths.
Transitive Closure : of R is the smallest transitive relation containing R.
18. All Pairs Shortest Path
0
0
1
0
0
0
1
0
0
1
0
1
0
1
0
1
0
0
0
1
0
0
0
1
0
1
0
0
0
1
0
0
R
R[i,j] = {
P1
1
0
Pk [i,j] = {
1
0
If there is a path of
exactly K from i-> j
20. All Pairs Shortest Path
An is computed by doubling powers - i.e., as A, A2, A4, A8, and so on.
We need log n matrix multiplications, each taking time O(n3).
The serial complexity of this procedure is O(n3log n).
This algorithm is not optimal, since the best known algorithms have
complexity O(n3).
21. All Pairs Shortest Path
Parallel Formulation
Each of the log n matrix multiplications can be performed in parallel.
We can use n3/log n processors to compute each matrix-matrix
product in time log n.
The entire process takes O(log2n) time.
22. All Pairs Shortest Path
Parallel Formulation
def adj2(i,j):
if adj(i,j) == 1:
return 1
else:
for k in range(0,n): # where n is the number of vertices in G
if adj(i,k) == 1 and adj(k,j) == 1:
return 1
return 0
26. Shell Sort
Psuedocode
# Sort an array a[0...n-1].
gaps = [701, 301, 132, 57, 23, 10, 4, 1]
foreach (gap in gaps)
{
# Do an insertion sort for each gap size.
for (i = gap; i < n; i += 1)
{
temp = a[i]
for (j = i; j >= gap and a[j - gap] > temp; j -= gap)
{
a[j] = a[j - gap]
}
a[j] = temp
}
}
Technical Information:
Language:
Programming Constructs:
Efficiency:
27. Radix Sort
For simplicity, say you want to use the decimal radix (=10) for sorting. Then you would start
by separating the numbers by units and then putting them together again; next you would
separate the numbers by tens and then put them together again; then by hundreds and so on
until all the numbers are sorted. Each time you loop, just read the list from left to right. You
can also imagine you are separating the numbers into buckets. Here is an illustration using
28. Radix Sort
5, 213, 55, 21, 2334, 31, 20, 430
Separate by units:
zeros: 20, 430
ones: 21, 31
twos:
threes: 213
fours: 2334
fives: 5, 55
Back together: 20, 430, 21, 31, 213, 2334, 5, 55
To put them back together, first read the zeroes bucket, then the ones bucket, then so on,
until you read the nines bucket.
29. Radix Sort
Separate by tens:
zeros: 05
ones: 213
twos: 20, 21
threes: 430, 2334,
fours:
fives: 55
Back together: 5, 213, 20, 21, 430, 2334, 55
30. Radix Sort
Separate by hundreds:
zeros: 005, 020, 021, 055
ones:
twos: 213
threes: 2334
fours: 430
fives:
Back together: 5, 20, 21, 55, 213, 2334, 430
31. Radix Sort
Separate by thousands:
zeros: 0005, 0020, 0021, 0055,0213, 0430
ones:
twos: 2334
threes:
fours:
fives:
Back together: 5, 20, 21, 55, 213, 430, 2334