Download presentation
Presentation is loading. Please wait.
1
Opracowanie językowe dr inż. J. Jarnicki
Internet Engineering Czesław Smutnicki Discrete Mathematics – Combinatorics
2
CONTENTS Functions and distributions Combinatorial objects K-subsets
Sequences Set partitions Number partitions Stirling numbers Bell numbers Permutations Set on/off rule
3
FUNCTIONS AND DISTRIBUTIONS
X elements, Y boxes X Y Element can be packed to any box: n-length sequence Each box contains at most one element: set partition Box contains exactly one element: permutation
4
K-SUBSETS Generate all subsets with k-elements from the set of n elements 1234 1235 1236 1245 1246 1256 1345 1346 1356 1456 2345 2346 2356 2456 3456
5
SUBSETS 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001
6
SET PARTITION (1) (1)(2) (1,2) (1,3)(2) (1)(2,3) (1)(2)(3) (1,2,3)
(1,2)(3)
7
NUMBER PARTITION 7 6 1 5 2 5 1 1 4 3 4 2 1 3 3 1
8
SECOND TYPE STIRLING NUMBERS
9
BELL NUMBERS n Bn 1 2 3 5 4 15 52 6 203 7 877 8 4140
10
PERMUTATIONS. INTRODUCTION
Inverse permutation Id permutation Composition Inversions Cycles Sign
11
PERMUTATIONS. DISTANCE MEASURES
Move type API NPI INS DA (, ) DS (, ) DI (, ) measure n minus the number of cycles in -1 o n minus the lenght of the maximal increasing subsequence in -1 o number of inversion in -1 o receipt mean variance complexity
12
GENERATING PERMUTATIONS. IN ANTYLEXICOGRAPHICAL ORDER
void swap(int& a, int& b) { int c=a; a=b; b=c; } void reverse(int m) { int i=1,j=m; while (i<j) swap(pi[i++],pi[j--]); } void antylex(int m) { int i; if (m==1) { for (i=1;i<=m;i++) cout << pi[i] << ' '; cout << endl; } else for (i=1;i<=m;i++) { antylex(m-1); if (i<m) { swap(pi[i],pi[m]); reverse(m-1); }} }
13
GENERATING PERMUTATIONS. MINIMAL NUMBER OF TRANSPOSITIONS
void swap(int& a, int& b) { int c=a; a=b; b=c; } int B(int m, int i) { return (!(m%2)&&(m>2))?(i<(m-1)?i:m-2):m-1; } void perm(int m) { int i; if (m==1) { for (i=1;i<=n;i++) cout << pi[i] << ' '; cout << endl; } else for (i=1;i<=m;i++) { perm(m-1); if (i<m) swap(pi[B(m,i)],pi[m]); } }
14
GENERATING PERMUTATIONS. MINIMAL NUMBER OF ADJACENT SWAPS
void swap(int& a, int& b) { int c=a; a=b; b=c; } void permtp(int m) { int i,j,x,k; int *c=new int[m+1],*pr=new int[m+1]; for (i=1;i<m;i++) { pi[i]=i; c[i]=1; pr[i]=1; } c[m]=0; for (j=1;j<=n;j++) cout << pi[j] << ' '; cout << endl; i=1; while (i<m) { i=1; x=0; while (c[i]==(m-i+1)) { pr[i]=!pr[i]; c[i]=1; if (pr[i]) x++; i++; } if (i<m) { k=pr[i]?c[i]+x:m-i+1-c[i]+x; swap(pi[k],pi[k+1]); c[i]++; for (j=1;j<=n;j++) cout << pi[j] << ' '; cout << endl; } delete[] c; delete[] pr;
15
Thank you for your attention
DISCRETE MATHEMATICS Czesław Smutnicki
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.