Advertisement
mathsnalgo

Mapping between natural numbers and permutation in O(n)

Jul 10th, 2014
1,630
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 0.62 KB | None | 0 0
  1. public static int[] perm(int n, int k)
  2. {
  3.     int i, ind, m=k;
  4.     int[] permuted = new int[n];
  5.     int[] elems = new int[n];
  6.  
  7.     for(i=0;i<n;i++) elems[i]=i;
  8.        
  9.     for(i=0;i<n;i++)
  10.     {
  11.         ind=m%(n-i);
  12.         m=m/(n-i);
  13.         permuted[i]=elems[ind];
  14.         elems[ind]=elems[n-i-1];
  15.     }
  16.        
  17.     return permuted;
  18. }
  19.    
  20. public static int inv(int[] perm)
  21. {
  22.     int i, k=0, m=1;
  23.     int n=perm.length;
  24.     int[] pos = new int[n];
  25.     int[] elems = new int[n];
  26.        
  27.     for(i=0;i<n;i++) {pos[i]=i; elems[i]=i;}
  28.        
  29.     for(i=0;i<n-1;i++)
  30.     {
  31.         k+=m*pos[perm[i]];
  32.         m=m*(n-i);
  33.         pos[elems[n-i-1]]=pos[perm[i]];
  34.         elems[pos[perm[i]]]=elems[n-i-1];
  35.     }
  36.        
  37.     return k;
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement