Пример #1
0
        public double CalculatePercentile(SortedMultiSet <double> set)
        {
            double result = default;

            if (set.TotalCount > 0)
            {
                double currentFloorRankPlusOne = 0;

                double floorRank = this.percentile * (set.TotalCount - 1);
                double dividend  = floorRank % 1;
                floorRank = Math.Floor(floorRank);

                var enumerator = set.GetEnumerable().GetEnumerator();
                for (int index = 0; index <= floorRank; index++)
                {
                    enumerator.MoveNext();
                }
                var currentFloorRank = enumerator.Current;

                if (dividend != 0)
                {
                    enumerator.MoveNext();
                    currentFloorRankPlusOne = enumerator.Current;
                }

                result = currentFloorRank + dividend * (currentFloorRankPlusOne - currentFloorRank);
            }

            return(result);
        }
Пример #2
0
        private List <RankedEvent <T> > GetTopK(SortedMultiSet <T> set)
        {
            int  count      = (int)Math.Min(this.k, set.TotalCount);
            var  result     = new List <RankedEvent <T> >(count);
            int  nextRank   = 1;
            int  outputRank = 1;
            bool first      = true;
            T    rankValue  = default;

            foreach (var value in set.GetEnumerable())
            {
                if (first || this.compiledRankComparer(rankValue, value) != 0)
                {
                    if (result.Count >= count)
                    {
                        break;
                    }

                    outputRank = nextRank;
                    rankValue  = value;
                    first      = false;
                }

                // Ranking has gaps on it, this is expected
                // Rank value follows the same as Sql Rank and not Dense_Rank
                result.Add(new RankedEvent <T>(outputRank, value));
                nextRank++;
            }

            return(result);
        }
Пример #3
0
        public SlidingMinAggregate(IComparerExpression <T> comparer, QueryContainer container)
        {
            Contract.Requires(comparer != null);
            this.comparer = comparer.GetCompareExpr().Compile();

            var generator = comparer.CreateSortedDictionaryGenerator <T, long>(container);
            Expression <Func <Func <SortedDictionary <T, long> >, MinMaxState <T> > > template
                = (g) => new MinMaxState <T> {
                savedValues = new SortedMultiSet <T>(g), currentValue = default, currentTimestamp = InvalidSyncTime
Пример #4
0
        private static HuffmanNode BuildHuffmanTree(int[] frequences)
        {
            var sortedMultiSet = new SortedMultiSet <HuffmanNode>(GetNodes(frequences));

            while (sortedMultiSet.Count() > 1)
            {
                var firstMin  = sortedMultiSet.PopMinOrDefault();
                var secondMin = sortedMultiSet.PopMinOrDefault();
                //var a = new HuffmanNode(secondMin, firstMin, firstMin.Frequency + secondMin.Frequency, null);
                sortedMultiSet.Add(new HuffmanNode(secondMin, firstMin, firstMin.Frequency + secondMin.Frequency, null));
            }
            return(sortedMultiSet.Peek());
        }
Пример #5
0
        public double CalculatePercentile(SortedMultiSet <double> set)
        {
            double result = default;

            if (set.TotalCount > 0)
            {
                int rank = (int)Math.Ceiling(this.percentile * set.TotalCount) - 1;

                var enumerator = set.GetEnumerable().GetEnumerator();
                for (int index = 0; index <= rank; index++)
                {
                    enumerator.MoveNext();
                }
                result = enumerator.Current;
            }

            return(result);
        }
Пример #6
0
        public static void BasicTest(SortedMultiSet dict)
        {
            PrintTestHeader(dict);

            dict.Print();

            TestOperation(dict.Insert, 5, true);
            TestOperation(dict.Insert, 8, true);
            TestOperation(dict.Insert, 2, true);
            TestOperation(dict.Insert, 9, true);
            TestOperation(dict.Insert, 0, true);
            TestOperation(dict.Insert, 5, true);

            dict.Print();

            TestOperation(dict.Search, 5, true);
            TestOperation(dict.Search, -4, false);
            TestOperation(dict.Search, 10, false);
            TestOperation(dict.Search, 4, false);

            dict.Print();

            // TODO check if dict is sorted

            TestOperation(dict.Delete, 2, true);
            TestOperation(dict.Delete, 5, true);
            TestOperation(dict.Delete, 0, true);
            TestOperation(dict.Delete, 6, false);
            TestOperation(dict.Delete, 8, true);
            TestOperation(dict.Delete, 9, true);
            TestOperation(dict.Delete, 5, true);
            TestOperation(dict.Delete, 5, false);

            dict.Print();

            Console.WriteLine();
        }
Пример #7
0
 public Expression <Func <MinMaxState <T> > > InitialState()
 {
     Expression <Func <Func <SortedDictionary <T, long> >, MinMaxState <T> > > template
         = (g) => new MinMaxState <T> {
         savedValues = new SortedMultiSet <T>(g), currentValue = default, currentTimestamp = InvalidSyncTime