eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › Algorytm losowania obiektow posiadajacych rozna "waznosc"?
Ilość wypowiedzi w tym wątku: 3

  • 1. Data: 2009-01-16 13:05:30
    Temat: Algorytm losowania obiektow posiadajacych rozna "waznosc"?
    Od: WRonX <w...@-...net>

    Witam grupe.

    Potrzebuje wylosowac z bazy banner do wyswietlenia. Bannery maja miec
    jednak rozna waznosc, tj. rozne prawdopodobienstwo, ze zostana
    wylosowane. Jak to najlepiej zrobic?

    Jak dotad poslugiwalem sie prostym algorytmem, ktory mozna zobrazowac
    jako os wspolrzednych, na ktorej bannery sa odcinkami, polozonymi jeden
    za drugim, a ich dlugosc ma byc prawdopodobienstwem ich wylosowania. I
    po pobraniu dlugosci sumy odcinkow (tj. wartosci "konca" ostatniego
    bannera), losuje liczbe od zera do "konca" i sprawdzam, w ktory odcinek
    (banner) "trafilem".

    Niestety, okazalo sie to bardzo powolne (wykazaly to logi bazy). Czy
    jest jakis szybki i prosty algorytm pozwalajacy to zrealizowac?
    Podpowiem, ze bannery siedza w basie MySQL, a kod bedzie w PHP, chociaz
    nie wiem, czy to ma znaczenie.


    Pozdrawiam.
    --
    [= WRonX =] [= W...@-...NET =] [= http://WRonX.NET =]
    [ "...yet the blood of the wicked shall flow like a river." ]
    [ GCC d- s+:- a-- C++ US P+ L+ !E W+++ N+++ w++ !O M-- !V ]
    [ PS Y- t-- X+++ R+++ tv- !PGP b++ DI++ D+ G+ e h! r++ y? ]


  • 2. Data: 2009-01-16 15:21:02
    Temat: Re: Algorytm losowania obiektow posiadajacych rozna "waznosc"?
    Od: Mikolaj Rydzewski <m...@c...pl>

    WRonX wrote:
    > Niestety, okazalo sie to bardzo powolne (wykazaly to logi bazy).

    Jak to: powolne?

    Jak zaimplementowales ten algorytm?

    Tablica int'ow wypelniona ID bannerow (aby uzyskac owa 'os'). Potem
    zwykle random() i wyciagasz banner po jego ID z bazy.

    Taka tablice aktualizujesz po zmiane w bannerach badz ich wagach.


  • 3. Data: 2009-01-16 20:00:11
    Temat: Re: Algorytm losowania obiektow posiadajacych rozna "waznosc"?
    Od: "Artur Halaczkiewicz" <a...@g...com>

    > Tablica int'ow wypelniona ID bannerow (aby uzyskac owa 'os'). Potem zwykle
    > random() i wyciagasz banner po jego ID z bazy.

    aha :)
    przy zalozeniu ze wagi sa procentami i sumuja sie do 100
    a waga_banera[] to tablica z wagami banerow, liczba_banerow to liczba
    banerow :)
    to w takim pseudo C powinno wygladac mniej wiecej tak:
    [code]
    int t[100];
    int id=0;
    for (int id_banera=0;id_banera<liczba_banerow;id_banera++)
    for (int b=0;b<waga_banera[nr_banera];b++)
    t[id++]=id_banera;
    [/code]
    (tylko nie testowalem - napisalem z glowy w mailu :) )
    i teraz tylko jak chcesz to wywolujesz:
    [code]
    id_banera_do_wyswietlenia=t[rand()%100];
    [/code]

    imo - szybciej i prosciej sie nie da
    oczywiscie wszystko wali w leb jezeli zalezy ci na dokladniejszych wagach
    niz 1% oraz gdy banerow jest wiecej niz 100
    ale wowczas wystarczy tylko zwiekszyc tablice t i chula :)

    --
    arturh

    +----------------------------------+
    | www.txt2dots.com |
    | To create inscription or logo |
    | using small elements like |
    | coins, LEDs, matches etc. |
    +----------------------------------+


strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: