示例#1
0
 public static PermutationBuilder GetCyclicPermsListIRS64(int t, BitmapFromList64 bb = null)
 {
     return delegate (IList<int> perm) {
         var P = new CyclicPerms_MRRR ();
         P.Build (perm, t, ListIBuilders.GetListIRS64(bb), ListIBuilders.GetListIFS());
         return P;
     };
 }
示例#2
0
 public static SequenceBuilder GetSeqXLB(short t, BitmapFromList64 bitmap_builder)
 {
     return delegate (IList<int> seq, int sigma) {
         var seqxl = new SeqXLB ();
         seqxl.Build (seq, sigma, t, bitmap_builder);
         return seqxl;
     };
 }
示例#3
0
文件: SeqXLB.cs 项目: sadit/natix
        public void Build(IList<int> seq, int sigma, int t = 16, BitmapFromList64 bitmap_builder = null)
        {
            this.sigma = sigma;
            long n = seq.Count;
            var L = new long[n];

            var counters = new int[sigma + 1];
            // counters.Add (0, sigma); <- if ListIFS
            for (int i = 0; i < n; ++i) {
                var sym = seq [i];
                try {
                    counters [sym + 1] += 1;
                } catch (Exception e) {
                    Console.WriteLine ("===== sigma: {0}, sym: {1}, i: {2}, n: {3}", sigma, sym, i, n);
                    throw e;
                }
            }
            for (int i = 1; i <= sigma; ++i) {
                counters [i] += counters [i - 1];
            }
            for (int i = 0; i < n; ++i) {
                var sym = seq [i];
                long long_sym = n * ((long)sym) + i;
                L [counters [sym]] = long_sym;
                counters [sym] += 1;
            }
            counters = null;
            /**** slow construction ****/
            /*****
            for (int i = 0; i < n; ++i) {
                long s = seq [i];
                L [i] = n * s + i;
                //L.Add (n * s + i);
            }
            Array.Sort (L);
            *****/
            if (bitmap_builder == null) {
                bitmap_builder = BitmapBuilders.GetSArray64 ();
            }
            this.xl_bitmap = bitmap_builder (L, n * sigma);
            // now building the permutation for access
            var p = new ListGen_MRRR ();
            p.Build (this.GetNotIdxPERM (), t, null);
            this.perm = p;
        }