Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Уплотнение групп интервалов в стате


Автор: koder 4.12.2007, 09:43
Какой алгоритм уплотнения групп интервалов в статистике, есть ли исходники?

Автор: esperant0 4.12.2007, 19:21
Цитата(koder @ 4.12.2007,  09:43)
Какой алгоритм уплотнения групп интервалов в статистике, есть ли исходники?

решаете на сколько уплотнить и уплотняете

Автор: koder 10.12.2007, 16:58
Оцените на правильность и оптимальность кода

Код

using System;

public class Groups
{
    public struct AFreq
    {
        public double StartF;
        public double EndF;
        public int Freq;
        public double StartT;
        public double EndT;
        public double DiffDisp;
        public double TheorFreq;
        public double DiffFreq;
        public double SqFreq;
        public bool Contains(double value)
        {
            if ((value >= Math.Round(StartF, 9)) && (value < Math.Round(EndF, 9)))
                return true;
            else
                return false;
        }
    }
    public AFreq[] ActualFreq;
    private AFreq[] TempFreq;
    public Groups()
    {
        
    }
    
    public int ConcateInterval(int Interval1, int Interval2){
        if ((Interval1 > ActualFreq.Length) || (Interval2 > ActualFreq.Length))
            throw new ArgumentException("Не верные аргументы!");

        ActualFreq[Interval1].EndF = ActualFreq[Interval2].EndF;
        ActualFreq[Interval1].Freq += ActualFreq[Interval2].Freq;
        ActualFreq[Interval2].Freq = -1;
        return ActualFreq[Interval1].Freq;
    }
    public void Integration() {
        for (int i = 0; i < ActualFreq.Length; i++)
        {
            if ((ActualFreq[i].Freq < 5) && (ActualFreq[i].Freq != -1))
            {
                if (i == 0)
                {
                    for (int j = 1; j < ActualFreq.Length; j++)
                    {
                        if (ConcateInterval(i, j) >= 5) break;
                    }
                }
                else if (i == ActualFreq.Length - 1)
                {
                    ConcateInterval(i - 1, i);
                }
                else if (i > 0)
                {
                    if (ActualFreq[i + 1].Freq < 5)
                    {
                        int k = i;
                        for (int j = i + 1; j < ActualFreq.Length; j++)
                        {

                            if (ConcateInterval(i, j) >= 5)
                            {
                                if (j == ActualFreq.Length - 1) i++;
                                break;
                            }
                            else if (j == ActualFreq.Length - 1) 
                            {
                                ConcateInterval(k - 1, i);
                            }
                            if (j == ActualFreq.Length - 1) i++;
                        }
                    }
                    else
                    {
                        ConcateInterval(i - 1, i);
                    }
                }
            }
        }
        int len = 0;
        for (int i = 0; i < ActualFreq.Length;i++ )
        {
            if (ActualFreq[i].Freq != -1)
            {
                len++;
            }
        }
        TempFreq = new AFreq[len];
        int z = 0;
        for (int i = 0; i < ActualFreq.Length; i++)
        {
            if (ActualFreq[i].Freq != -1)
            {
                TempFreq[z++] = ActualFreq[i];
                    
            }
        }
        ActualFreq = TempFreq;
    }
   
}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)