natix.SimilaritySearch.PivotGroup.Build C# (CSharp) Méthode

Build() public méthode

public Build ( MetricDB DB, double alpha, int min_bs, int seed, bool do_far ) : void
DB MetricDB
alpha double
min_bs int
seed int
do_far bool
Résultat void
        public virtual void Build(MetricDB DB, double alpha, int min_bs, int seed, bool do_far)
        {
            var idxDynamic = new DynamicSequentialOrdered ();
            idxDynamic.Build (DB, RandomSets.GetRandomPermutation(DB.Count, new Random(seed)));
            // this.Items = new ItemPair[DB.Count];
            var pivs = new List<Pivot> (32);
            var items = new List<ItemPair> (DB.Count);
            int I = 0;
            var extreme_items = new List<ItemPair>(idxDynamic.Count);
            while (idxDynamic.Count > 0) {
                var pidx = idxDynamic.GetAnyItem();
                object piv = DB[pidx];
                idxDynamic.Remove(pidx);
                // this.Items[pidx] = new ItemPair(pidx, 0);
                DynamicSequential.Stats stats;
                Pivot piv_data;
                double near_first = double.MaxValue;
                double near_last = 0;
                double far_first = double.MaxValue;
                int num_near = 0;
                int num_far = 0;
                {
                    IResult near, far;
                    this.SearchExtremes(idxDynamic, extreme_items, piv, alpha, min_bs, out near, out far, out stats);
                    foreach (var pair in near) {
                        near_first = Math.Min (near_first, pair.Dist);
                        near_last = Math.Max (near_last, pair.Dist);
                        items.Add( new ItemPair { ObjID = pair.ObjID, Dist = pair.Dist} );
                    }
                    num_near = near.Count;
                    idxDynamic.Remove(near);
                    if (do_far) {
                        foreach (var pair in far) {
                            far_first = Math.Min (far_first, pair.Dist);
                            items.Add( new ItemPair {ObjID = pair.ObjID, Dist = pair.Dist} );
                        }
                        num_far = far.Count;
                        idxDynamic.Remove(far);
                    }
                    piv_data = new Pivot(pidx, stats.mean, stats.stddev, near_last, far_first, num_near, num_far);
                    pivs.Add(piv_data);
                }
                if (I % 10 == 0) {
                    Console.WriteLine ("");
                    Console.WriteLine (this.ToString());
                    Console.WriteLine("-- I {0}> remains: {1}, alpha: {2}, mean: {3}, stddev: {4}, pivot: {5}, min_bs: {6}, db: {7}, do_far: {8}",
                                      I, idxDynamic.Count, alpha, stats.mean, stats.stddev, pidx, min_bs, DB.Name, do_far);
                    if (piv_data.num_near > 0) {
                        Console.WriteLine("-- (NORMVAL) first-near: {0}, last-near: {1}, near-count: {2}",
                                          near_first / stats.max, piv_data.last_near / stats.max, piv_data.num_near);

                    }
                    if (piv_data.num_far > 0) {
                        Console.WriteLine("++ (NORMVAL) first-far: {0}, far-count: {1}",
                                          piv_data.first_far / stats.max, piv_data.num_far);
                    }
                }
                ++I;

                //Console.WriteLine("Number of objects after: {0}",idxDynamic.DOCS.Count);
            }
            Console.WriteLine("Number of pivots per group: {0}", I);
            this.Pivs = pivs.ToArray ();
            this.Items = items.ToArray ();
        }