Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Rund um die Programmierung ::  Median mit streaming daten  
Gehen Sie zu Seite Zurück  1, 2
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
rapso
Moderator

Benutzerprofil
Anmeldungsdatum: 17.06.2002
Beiträge: 7215
Beitrag rapso Moderator 15:49:13 09.02.2010   Titel:   Re: Median mit streaming daten            Zitieren

Shade Of Mine schrieb:
Hallo Leute.

Ich will den Median einer quasi endlosen Zahlenreihe berechnen. Quasi endlos, da sie schon irgendwann aufhört, ich sie aber nicht speichern kann.
bei sowas macht man wohl oefter ein histogram, du teilst also den wertebereich in buckets auf und approximierst darin dann den median.

_________________
Kilo Byte=1000,Kilobyte=1024 ANSI/IEEE Standard 1084-1986
rapso
-Mod im Spiele-/Grafikprogrammierung| rapsoo@hotmail.com | #dionysos irc.quakenet.org | amazon stole my PS3 :(
__Stefan__
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.04.2007
Beiträge: 332
Beitrag __Stefan__ Mitglied 18:22:31 09.02.2010   Titel:              Zitieren

Ich hoffe, das verdeutlicht das Prinzip:

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include
<queue>
#include
<vector>

class Average
{
    public:

        Average(std::size_t median_size): m_median_size(median_size), m_deque(median_size, 0), m_count(0), m_sum(0)
        {
        }

        void Insert(double x)
        {
            // Laenge der deque bleibt konstant!
            m_deque.pop_front();
            m_deque.push_back(x);

            // Inhalt der deque sortieren
            std::vector<double> tmp(m_deque.begin(), m_deque.end());
            std::sort(tmp.begin(), tmp.end());

            // Median dazu addieren
            m_sum += tmp[m_median_size / 2];
            ++m_count;
        }

        double GetAverage() const
        {
            return m_sum / m_count;
        }

    private:

        std::size_t m_median_size;
        std::deque<double> m_deque;
        std::size_t m_count;
        double m_sum;
};

int main()
{
    Average a(15);

    for(int i = 0; i < 1000; ++i)
    {
        a.Insert(std::rand());
    }

    std::cout << a.GetAverage();


    return 0;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include
<queue>
#include
<vector>

class Average
{
public:

Average(std::size_t median_size): m_median_size(median_size), m_deque(median_size, 0), m_count(0), m_sum(0)
{
}

void Insert(double x)
{
// Laenge der deque bleibt konstant!
m_deque.pop_front();
m_deque.push_back(x);

// Inhalt der deque sortieren
std::vector<double> tmp(m_deque.begin(), m_deque.end());
std::sort(tmp.begin(), tmp.end());

// Median dazu addieren
m_sum += tmp[m_median_size / 2];
++m_count;
}

double GetAverage() const
{
return m_sum / m_count;
}

private:

std::size_t m_median_size;
std::deque<double> m_deque;
std::size_t m_count;
double m_sum;
};

int main()
{
Average a(15);

for(int i = 0; i < 1000; ++i)
{
a.Insert(std::rand());
}

std::cout << a.GetAverage();


return 0;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include
<queue>
#include
<vector>

class Average
{
    public:

        Average(std::size_t median_size): m_median_size(median_size), m_deque(median_size, 0), m_count(0), m_sum(0)
        {
        }

        void Insert(double x)
        {
            // Laenge der deque bleibt konstant!
            m_deque.pop_front();
            m_deque.push_back(x);

            // Inhalt der deque sortieren
            std::vector<double> tmp(m_deque.begin(), m_deque.end());
            std::sort(tmp.begin(), tmp.end());

            // Median dazu addieren
            m_sum += tmp[m_median_size / 2];
            ++m_count;
        }

        double GetAverage() const
        {
            return m_sum / m_count;
        }

    private:

        std::size_t m_median_size;
        std::deque<double> m_deque;
        std::size_t m_count;
        double m_sum;
};

int main()
{
    Average a(15);

    for(int i = 0; i < 1000; ++i)
    {
        a.Insert(std::rand());
    }

    std::cout << a.GetAverage();


    return 0;
}
Shade Of Mine
Moderator

Benutzerprofil
Anmeldungsdatum: 04.05.2001
Beiträge: 17587
Beitrag Shade Of Mine Moderator 20:11:00 09.02.2010   Titel:              Zitieren

__Stefan__ schrieb:
Ich hoffe, das verdeutlicht das Prinzip:

Genial. Auf die Idee den Durchschnitt aller Median Werte zu nehmen bin ich nicht gekommen. Aber macht vollkommen Sinn. Danke.

_________________
Mein C++ Tutorial - ewig nicht mehr aktualisiert :(
A language that doesn't affect the way you think about programming is not worth knowing.
C/C++ Forum :: Rund um die Programmierung ::  Median mit streaming daten  
Gehen Sie zu Seite Zurück  1, 2
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.