Пример #1
0
 public IVec part(LVec v) {
   IVec parts = new IVec(v.size());
   for (int i = 0; i < v.size(); i++) {
     int r = (int) ((v.data[i] - ibase) / cumk);
     parts.data[i] = r % k;
   }
   return parts;
 }
Пример #2
0
 public LVec[] partition(LVec vv, IVec part, IVec[] mapback) {
   int[] lens = new int[k];
   LVec[] parts = new LVec[k];
   int n = vv.size();
   for (int i = 0; i < k; i++) {
     lens[i] = 0;
   }
   for (int i = 0; i < n; i++) {
     int r = part.data[i];
     lens[r]++;
   }
   for (int i = 0; i < k; i++) {
     parts[i] = new LVec(lens[i]);
     mapback[i] = new IVec(lens[i]);
     lens[i] = 0;
   }
   if (mapback != null) {
     for (int i = 0; i < n; i++) {
       long v = vv.data[i];
       int r = part.data[i];
       parts[r].data[lens[r]] = v;
       mapback[r].data[lens[r]] = i;
       lens[r]++;
     }
   } else {
     for (int i = 0; i < n; i++) {
       long v = vv.data[i];
       int r = part.data[i];
       parts[r].data[lens[r]] = v;
       lens[r]++;
     }
   }
   return parts;
 }