generating permutations and subsets

Post on 18-Jan-2022

11 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Generating Permutations and Subsets

ICS 6D

Sandy Irani

Lexicographic Order

• S a set

• Sn is the set of all n-tuples whose entries are elements in S.

• If S is ordered, then we can define an ordering on the n-tuples of S called the lexicographic or dictionary order.

• For simplicity, we will discuss n-tuples of natural numbers.

Lexicographic Order: Example

(3, 8, 3, 4, 2, 1) <? Or >? (3, 8, 3, 2, 2, 1)

Lexicographic Order: Definition

(p1, p2, …, pn) ≠ (q1, q2, …, qn)

Let k be the smallest index such that pk ≠ qk

(If the n-tuples are different they have to differ somewhere).

If pk < qk, then (p1, p2, …, pn) < (q1, q2, …, qn)

If pk > qk, then (p1, p2, …, pn) > (q1, q2, …, qn)

Lexicographic Order: Examples

(2, 5, 100, 2, 4) (2, 5, 100, 2, 5)

(1, 100, 1000) (2, 1, 0)

(5, 4, 5, 6, 7) (4, 5, 8, 10, 11)

Generating all Permutations

• A permutation of {1, 2, …, n} is an n-tuple in which each number in {1, 2, …, n} appears exactly once.

Example: (5, 2, 1, 6, 7, 4, 3) is a permutation of {1, 2, 3, 4, 5, 6, 7}

• How to generate all permutations over the set {1, 2, …, n}?

Will output the permutations in lexicographic order

Lexicographic Order of Permutations

• Here are all the permutations of {1, 2, 3, 4} in lexicographic order:

(1, 2, 3, 4) (1, 2, 4, 3) (1, 3, 2, 4) (1, 3, 4, 2)

(1, 4, 2, 3) (1, 4, 3, 2) (2, 1, 3, 4) (2, 1, 4, 3)

(2, 3, 1, 4) (2, 3, 4, 1) (2, 4, 1, 3) (2, 4, 3, 1)

(3, 1, 2, 4) (3, 1, 4, 2) (3, 2, 1, 4) (3, 2, 4, 1)

(3, 4, 1, 2) (3, 4, 2, 1) (4, 1, 2, 3) (4, 1, 3, 2)

(4, 2, 1, 3) (4, 2, 3, 1) (4, 3, 1, 2) (4, 3, 2, 1)

Lexicographic Order of Permutations

• The smallest permutation of {1, 2,.., n} is

(1, 2, 3,…, n)

• The largest permutation of {1, 2,.., n} is

(n, n-1,…, 2, 1)

Lexicographic Order of Permutations

GeneratePermutationsInLexOrder(n)

Initialize P = (1, 2, …, n)

Output P

While P ≠ (n, n-1,.., 2, 1)

P = GetNext(P)

Output P

Get Next Permutation

(8, 2, 5, 3, 7, 6, 4, 1)

Get Next Permutation

GetNext (p1, p2, …, pn)

• Find the largest k such that pk < pk+1

• Find the largest j such that j > k and pj > pk

• Swap pj and pk

• Reverse the order of pk+1,…,pn

Get Next Permutation

• Examples:

(2, 1, 4, 3, 5, 6)

(5, 2, 6, 4, 3, 1)

Get Next Permutation

• Examples:

(4, 5, 6, 3, 2, 1)

(6, 5, 4, 3, 2, 1)

r-Subsets

• The order in which the elements of a subset are listed does not matter, so

{5, 8, 2} = {2, 5, 8}

In order to avoid over-counting subsets, we will always list their elements in increasing order:

Examples: {2, 5, 8}

{1, 4, 5, 16}

Lexicographic Order of r-Subsets

• First order the elements of the subset in increasing order

• The apply lexicographic ordering as if they were ordered subsets:

{4, 1, 7, 3} {5, 4, 3, 2}

Lexicographic Order of r-Subsets

• What’s the smallest 5-subset of

{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}?

• What’s the largest 5-subset of

{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}?

Lexicographic Order of r-subsets

• Here are all the 3-subsets of {1, 2, 3, 4, 5} listed in lexicographic order:

{1, 2, 3} {1, 2, 4} {1, 2, 5} {1, 3, 4} {1, 3, 5}

{1, 4, 5} {2, 3, 4} {2, 3, 5} {2, 4, 5} {3, 4, 5}

Lexicographic Order of r-Subsets

Generate-r-SubsetsInLexOrder(r, n)

Initialize P = (1, 2, …, r)

Output P

While P ≠ (n-r+1, n-r+2,.., n-1, n)

P = GetNext(P)

Output P

Get Next r-Subset

{3, 4, 7, 8, 9} from set {1, 2, 3, 4, 5, 6, 7, 8, 9}

Get Next r-Subset

GetNext {p1, p2, …, pr}

• Find the largest k such that pk < n-r+k

• pk = pk + 1

• For j = k+1,…,r

pj = pj-1 + 1

Get Next r-Subset

• Examples: (r = 5, n = 9)

{1, 2, 4, 5, 6}

{2, 4, 6, 7, 9}

Get Next r-Subset

• Examples: (r = 5, n = 9)

{2, 3, 5, 8, 9}

{4, 6, 7, 8, 9}

top related