Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Proporcionalno koriscenje podataka?

[es] :: PHP :: Proporcionalno koriscenje podataka?

[ Pregleda: 1725 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

NenadS
Nenad Strainovic
Beograd

Član broj: 857
Poruke: 910
*.mediaworksit.net.

Sajt: www.strainovic.com


+7 Profil

icon Proporcionalno koriscenje podataka?02.10.2011. u 07:38 - pre 152 meseci
Potrebna mi je ideja u resavanju ovog problema.

Radi se o tome da u bazi imam podatke sa 10 razlicitih lokacija (isti tip podataka je u pitanju) ali svaka lokacija ima odredjen broj podataka koji moze da varira od recimo 5 000 na jednoj lokaciji do 500 000 na drugoj lokaciji...

Ja te podatke treba da "izmesam" tako da svi budu proporcionalno jednako zastupljeni. Jasno je da ce podaci sa nekih lokacija morati da idu jedan za drugim jer ih ima daleko vise od onih sa druh lokacija ali ne bi trebalo da se desi da recimo ako lokacija ima 5 000 podataka, da imam njih 10 jedan za drugom, a zatim sledi 1 sa lokacije koja ima 500 000 podataka jer bi logicno bilo da bude obrnuto i da na kraju svega sa svih lokacija budu iscitani svi podaci.

Ima li neko ideju kako bi funkcija koja radi ovaj posao trebala da izgleda, treba mi neka smernica u kom pravcu da razmsljam?

Hvala svima!
Pozdrav, NenadS!
 
Odgovor na temu

NenadS
Nenad Strainovic
Beograd

Član broj: 857
Poruke: 910
*.mediaworksit.net.

Sajt: www.strainovic.com


+7 Profil

icon Re: Proporcionalno koriscenje podataka?03.10.2011. u 10:20 - pre 152 meseci
Reseno :)

Trebalo je samo da razmislim umesto da filozofiram :)
Pozdrav, NenadS!
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
*.dynamic.isp.telekom.rs.

Sajt: https://avramovic.info


+46 Profil

icon Re: Proporcionalno koriscenje podataka?03.10.2011. u 12:34 - pre 152 meseci
Sad napiši i kako si rešio problem, možda neko nekad bude imao sličan problem :)
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

NenadS
Nenad Strainovic
Beograd

Član broj: 857
Poruke: 910
*.mediaworksit.net.

Sajt: www.strainovic.com


+7 Profil

icon Re: Proporcionalno koriscenje podataka?03.10.2011. u 18:42 - pre 152 meseci
Danas sam shvatio da problem ipak nije resen do kraja... a evo i zasto.

Ako imamo podatke sa 10 lokacija, mozemo jednostavno da izracunamo koliko svaka lokacija procentualno ima podataka i da na osnovu toga odredimo koliko ce njenih podataka biti prikazano i to je prvi deo... primer

- 1
- 4
- 6
- 10
- 2 itd...

Ono sto je ostalo kao problem ako recimo izmemo jedan podataka sa prve lokacije, a zatim proporcionalno dolazi deset podataka sa druge, pa 5 sa trece... to bi trebalo izmesati tako da se izmedju svaka dva podatka sa druge prikaze po jedan sa trece.

Umesto 1 2 2 2 2 2 3 3 3, trebalo bi da se prikaze ovako 1 2 3 2 3 2 3 2 2 i to mi sada pravi problem...
Pozdrav, NenadS!
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6279

Sajt: pedja.supurovic.net


+1570 Profil

icon Re: Proporcionalno koriscenje podataka?04.10.2011. u 16:15 - pre 152 meseci
A što ti je taj redosled uopšte bitan? Zar ne postoji neki logičniji uslov za sortiranje podataka od te proporcionalnosti?
 
Odgovor na temu

NenadS
Nenad Strainovic
Beograd

Član broj: 857
Poruke: 910
*.mediaworksit.net.

Sajt: www.strainovic.com


+7 Profil

icon Re: Proporcionalno koriscenje podataka?04.10.2011. u 16:36 - pre 152 meseci
Posto tabele sadrze razlicit broj podataka, a svi oni treba proporcionalno da budu zastupljeni, ne znam kako bi se to drugacije izvelo, a uz sve to prilikom prikazivanja treba ih prikazati tako da dva podatka iz iste tabele ne budu jedan za drugim sve dok je to moguce...
Pozdrav, NenadS!
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6279

Sajt: pedja.supurovic.net


+1570 Profil

icon Re: Proporcionalno koriscenje podataka?04.10.2011. u 18:45 - pre 152 meseci
i dalej en razume čemu to al ajde...


Na početku izračunaš procente zastupljenosti za svaku tabelu.

Zatim napraviš osnovnu petlju koja iz svake tabele uzima po jedan slog i prikazuje ga. Pre početka petlje, porecenat prikazivanja za svaku tabelu je nula.

Pre prikaza sloga iz tekuce tabele izracunas procenat prikazanosti slogova iz te tabele i ako je manji od procenta zastupljenosti uzimas novi slog i prikazujes ga. Ako je procenat prikazanosti jednak ili veci od zastupljenosti onda preskaces prikaz sloga za tu tabelu. I tako za svaku tabelu.

Kada je petlja prosla kroz eve tabele ako bar jedna tabela ima procenat prikazanosti manji od procenta zastupljenosti, ponavljas prikazivanje svih tabela uz novi racun procenta prikazanosti.

I tako vrtis u krug dok za sve tabele ne bude postignut procenat prikazanosti jednak ili veci od procenta zatupljensoti.

Sada se vratis na pocetak petlje, resetujes procenat prikazanosti i Jovo - nanovo prikazujes slogove.

Sve se to tako vrti dok svi slogovi ne budu prikazani.


 
Odgovor na temu

NenadS
Nenad Strainovic
Beograd

Član broj: 857
Poruke: 910
*.mediaworksit.net.

Sajt: www.strainovic.com


+7 Profil

icon Re: Proporcionalno koriscenje podataka?04.10.2011. u 18:57 - pre 152 meseci
Hvala ti Pedja, flylord mi je pomogao oko scripte, tako da sada imam ono sto mi treba, a verzija sa demo podacima izgleda ovako:

Code:
<?php

$data = array(
    '1' => array(1),
    '3' => array(6, 7),
    '2' => array(2, 3, 4, 5),
    '4' => array(8, 9, 10, 11, 13, 14, 15, 16),
    '5' => array(1),
    '6' => array(9, 2, 4, 5, 6, 7, 9, 1, 3, 12, 134, 53, 34, 55, 64, 37, 86, 134, 1243),
);


$CTableSort = new CTableSort($data);
$tmpData = $CTableSort->run();

class CTableSort {
    private $data;
    private $numOfTables;
    private $tableKeys;
    
    function  __construct($data) {
        asort($data);
        $data = array_map(array($this, 'arrRandom'), $data);
        
        $this->data = $data;
        $this->numOfTables = count($data);
        $this->tableKeys = array_keys($this->data);
    }

    public function run() {
        $tmpData = array();
        for($i = 0; $i < $this->numOfTables; $i++) {
            $tmpData = $this->twoTable($tmpData, $this->data[$this->tableKeys[$i]], $this->tableKeys[$i]);
        }
        return $tmpData;
    }

    private function twoTable($tbl1, $tbl2, $tbl2Index) {
        $tbl1Index = -1;
        $tData = array();
        if (count($tbl2) > count($tbl1)) {
            $tmp = $tbl1;
            $tbl1 = $tbl2;
            $tbl2 = $tmp;
            $tbl1Index = $tbl2Index;
            $tbl2Index = -1;
        }
        foreach ($tbl1 as $tI=>$d) {
            $tData[] = $tbl1Index == -1 ? $d : array('table' => $tbl1Index, 'data' => $d);
            if (isset($tbl2[$tI])) {
                $tData[] = $tbl2Index == -1 ? $tbl2[$tI] : array('table' => $tbl2Index, 'data' => $tbl2[$tI]);
            }
        }
        return $tData;
    }

    private function arrRandom($n) {
        shuffle($n);
        return $n;
    }

}

echo '<pre>';

print_r($data);
print_r($tmpData);

?>


Output je sledeci:

Code:
Array
(
    [0] => Array
        (
            [table] => 6
            [data] => 5
        )

    [1] => Array
        (
            [table] => 5
            [data] => 1
        )

    [2] => Array
        (
            [table] => 6
            [data] => 9
        )

    [3] => Array
        (
            [table] => 4
            [data] => 16
        )

    [4] => Array
        (
            [table] => 6
            [data] => 12
        )

    [5] => Array
        (
            [table] => 2
            [data] => 3
        )

    [6] => Array
        (
            [table] => 6
            [data] => 53
        )

    [7] => Array
        (
            [table] => 4
            [data] => 8
        )

    [8] => Array
        (
            [table] => 6
            [data] => 55
        )

    [9] => Array
        (
            [table] => 3
            [data] => 7
        )

    [10] => Array
        (
            [table] => 6
            [data] => 9
        )

    [11] => Array
        (
            [table] => 4
            [data] => 14
        )

    [12] => Array
        (
            [table] => 6
            [data] => 3
        )

    [13] => Array
        (
            [table] => 2
            [data] => 4
        )

    [14] => Array
        (
            [table] => 6
            [data] => 6
        )

    [15] => Array
        (
            [table] => 4
            [data] => 9
        )

    [16] => Array
        (
            [table] => 6
            [data] => 64
        )

    [17] => Array
        (
            [table] => 1
            [data] => 1
        )

    [18] => Array
        (
            [table] => 6
            [data] => 4
        )

    [19] => Array
        (
            [table] => 4
            [data] => 13
        )

    [20] => Array
        (
            [table] => 6
            [data] => 1243
        )

    [21] => Array
        (
            [table] => 2
            [data] => 2
        )

    [22] => Array
        (
            [table] => 6
            [data] => 7
        )

    [23] => Array
        (
            [table] => 4
            [data] => 11
        )

    [24] => Array
        (
            [table] => 6
            [data] => 1
        )

    [25] => Array
        (
            [table] => 3
            [data] => 6
        )

    [26] => Array
        (
            [table] => 6
            [data] => 86
        )

    [27] => Array
        (
            [table] => 4
            [data] => 15
        )

    [28] => Array
        (
            [table] => 6
            [data] => 34
        )

    [29] => Array
        (
            [table] => 2
            [data] => 5
        )

    [30] => Array
        (
            [table] => 6
            [data] => 37
        )

    [31] => Array
        (
            [table] => 4
            [data] => 10
        )

    [32] => Array
        (
            [table] => 6
            [data] => 134
        )

    [33] => Array
        (
            [table] => 6
            [data] => 2
        )

    [34] => Array
        (
            [table] => 6
            [data] => 134
        )

)


Posto podataka iz tabele 6 ima najvise, oni se na kraju ipak ponavljaju je ne mogu da budu pomesani sa ostalim podacima, sto u gore navednom nizu moze jasno da se vidi.

I radi bas ono sto sam trazio :)

Ovom prilikom bih se zahvalio i Jovanu Turanjaninu koji mi je poslao njegovo resenje koje je za malo odstupalo od onoga sto sam trazio.


Pozdrav, NenadS!
 
Odgovor na temu

[es] :: PHP :: Proporcionalno koriscenje podataka?

[ Pregleda: 1725 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.