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

Zagonetni problem oko nizova

[es] :: PHP :: Zagonetni problem oko nizova

Strane: 1 2

[ Pregleda: 7759 | Odgovora: 28 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

iizuzetan

Član broj: 186478
Poruke: 375
*.adsl.verat.net.



+16 Profil

icon Zagonetni problem oko nizova23.03.2009. u 02:03 - pre 184 meseci
Na primer imamo sledece nizove:

Code:

$ime[1]='Ana';
$ocena[1]=6;

$ime[2]='Bilja';
$ocena[2]=8;

$ime[3]='Dejan';
$ocena[3]=7;

$ime[4]='Sasa';
$ocena[4]=5;

$ime[5]='Laza';
$ocena[5]=9;

$ime[6]='Maza';
$ocena[6]=10;


Kao sto vidimo niz $ime je nasumican a cilj nam je da ga uredimo tako da na indeksu 1 bude ime sa najvecom ocenom, znaci Maza, a na indeksu 6 da bude ime sa najmanjom oceno, to jest ime Sasa. Drugim recima napraviti skriptu koja ce urediti niz $ime po opadajucim vrednostima ocena niza $ocena tako da se dobije sledeci niz:

Code:

$ime[1]='Maza';
$ime[2]='Laza';
$ime[3]='Bilja';
$ime[4]='Dejan';
$ime[5]='Ana';
$ime[6]='Sasa';
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
79.101.75.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Zagonetni problem oko nizova23.03.2009. u 09:32 - pre 184 meseci
Ja bih ti preporučio da i imena i ocene držiš u jednom višedimenzionalnom nizu, a zatim da iskoristiš funkciju uasort() kako bi taj isti niz sortirao.

Funkcija kao prvi argument prihvata niz koji se sortira, a kao drugi argument funkciju koja definiše način na koji se niz sortira.

http://php.net/uasort

Pogledaj primere na ovom linku gore, ne bi trebalo da imaš problema sa ovim.
Laravel Srbija.

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

iizuzetan

Član broj: 186478
Poruke: 375
*.adsl.verat.net.



+16 Profil

icon Re: Zagonetni problem oko nizova23.03.2009. u 10:47 - pre 184 meseci
Citat:
Nemanja Avramović: Ja bih ti preporučio da i imena i ocene držiš u jednom višedimenzionalnom nizu, a zatim da iskoristiš funkciju uasort() kako bi taj isti niz sortirao.

Funkcija kao prvi argument prihvata niz koji se sortira, a kao drugi argument funkciju koja definiše način na koji se niz sortira.

http://php.net/uasort

Pogledaj primere na ovom linku gore, ne bi trebalo da imaš problema sa ovim.


Vidi ok je to da se ima mogucnost visedimenzionog niza. Medjutim po nekad niz se ne "pravi" na "jednom" mestu pa da ga direktno napravimo kao visedimenzionalni, vec se "prave" dva jednodimenzionalna niza na dva razlicita mesta, a ipak trebamo da na osnovu vrednosti jednog niza sortiramo drugi (kao u nasem primeru). E sad tvoja ideja da se napravi prvo od ta dva niza jedan visedimenzioni niz, pa zatim ga sortirati, i posle toga ga opet rasclaniti na dva niza itd itd mi se cini jako neekonomicnim kako u ustedi vremena izvrsenja skripte tako i u velicini skripte.

Evo na primer ajde napravi ti skriptu kako znas i umes pomocu jednog visedimenzionalnog niza ali da na kraju imas kao rezultat sortiran po opadajucim vrednostima ocena niz $ime !!! A posle toga cu ja napisati skriptu koja direktno dolazi do sortiranog po ocenama niza $ime. I na kraju videcemo koja je ekonomicnija skripta po duzini i vremenu izvrsenja KODA, tvoja ili moja !!! Nadam se da ces prihvatiti izazov, kao i ostali koji citaju ovu temu. :) :) :)
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
91.148.79.*

Sajt: norway.dakipro.com


+190 Profil

icon Re: Zagonetni problem oko nizova23.03.2009. u 10:54 - pre 184 meseci
A mogo bi i sam da lepo napises taj kod ako vec znas kako treba da radi, i resis sam sebi problem

A odakle god da se niz pravi iz vise delova, ako se drzis jedinstvenih idjeva kao kljuceva nemoz imati nikakvih problema, odmah pravis multidimenzionalni niz i picis sa jednim nizom.
Onda nemoz ekonomicniji kod jer je uasort mnogo optimizovanija i brza od bilokoje petlje koju korisnik napise a da radi isti posao.
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
79.101.75.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Zagonetni problem oko nizova23.03.2009. u 11:05 - pre 184 meseci
Ako i posle ovoga što je dakipro napisao ne veruješ da je uasort() bolje (brže, preglednije) rešenje, prihvatam izazov

S tim što upravo krećem na fax tako da ćeš morati da čekaš do večeras ili sutra za kod.

Imao sam sličan problem pre par godina (sortiranje hall of fame (u nekoj igrici) liste po broju poena) i znam da sam dosta vremena izgubio izmišljajući načine za sortiranje, sve dok mi neko (flylord ja mislim) nije ukazao na uasort() funkciju
Laravel Srbija.

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

iizuzetan

Član broj: 186478
Poruke: 375
*.adsl.verat.net.



+16 Profil

icon Re: Zagonetni problem oko nizova23.03.2009. u 11:12 - pre 184 meseci
Citat:
dakipro: A mogo bi i sam da lepo napises taj kod ako vec znas kako treba da radi, i resis sam sebi problem :D

A odakle god da se niz pravi iz vise delova, ako se drzis jedinstvenih idjeva kao kljuceva nemoz imati nikakvih problema, odmah pravis multidimenzionalni niz i picis sa jednim nizom.
Onda nemoz ekonomicniji kod jer je uasort mnogo optimizovanija i brza od bilokoje petlje koju korisnik napise a da radi isti posao.


Ok vidim da niste raspolozni za mozganje :) pa cu dati resenje. A i kad vidis resenje nadam se da ces promeniti misljenje da su samo "gotove funkcije" brze :)

Code:

<?
// ZADAVANJE VREDNOSTI NIZOVA:
$ime[1]='Ana';
$ocena[1]=6;

$ime[2]='Bilja';
$ocena[2]=8;

$ime[3]='Dejan';
$ocena[3]=7;

$ime[4]='Sasa';
$ocena[4]=5;

$ime[5]='Laza';
$ocena[5]=9;

$ime[6]='Maza';
$ocena[6]=10;


//KLUCNA SKRIPTA KOJA SORTIRA NIZ $ime U ZAVISNOSTI OD VREDNOSTI NIZA $ocena:
for($a=1;$a<=6; $a++){
    for($b=1;$b<=6; $b++){
          if($ocena[$b]<$ocena[$a]) {
               $u=$ocena[$a];$t=$ime[$a];
               $ocena[$a]=$ocena[$b];$ime[$a]=$ime[$b];
               $ocena[$b]=$u;$ime[$b]=$t;
          } 
    }
}

//LINIJA KODA KOJA ISCITAVA REZULTAT:
for($a=1;$a<=6; $a++){
     echo '$ime['.$a.']->'.$ime[$a].'<br>';
}


/*******************
*****  REZULTAT  ***
*******************

$ime[1]->Maza
$ime[2]->Laza
$ime[3]->Bilja
$ime[4]->Dejan
$ime[5]->Ana
$ime[6]->Sasa

*******************/
?>


Poenta cele price je ta da ako su indexi oba niza isti onda nizove mozemo sortirati kako nam je volja. Ako nisu isti onda moramo napraviti da su isti.

[Ovu poruku je menjao iizuzetan dana 23.03.2009. u 14:27 GMT+1]
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
91.148.79.*

Sajt: norway.dakipro.com


+190 Profil

icon Re: Zagonetni problem oko nizova23.03.2009. u 11:37 - pre 184 meseci
Kako si vec voljan da siris iskustva, uradi to sad isto kao sto ti je Nemanja napisao, pa proveri na tom prostom primeru vreme i resurse potrebne za oba primera, okaci oba primera ovde da mozemo i na drugim masinama da testiramo, sad i mene zanima kako bi to radilo u praksi , al nemogu danas nikako da se macujem sa tim.
 
Odgovor na temu

iizuzetan

Član broj: 186478
Poruke: 375
*.adsl.verat.net.



+16 Profil

icon Re: Zagonetni problem oko nizova23.03.2009. u 12:46 - pre 184 meseci
Citat:
dakipro: Kako si vec voljan da siris iskustva, uradi to sad isto kao sto ti je Nemanja napisao, pa proveri na tom prostom primeru vreme i resurse potrebne za oba primera, okaci oba primera ovde da mozemo i na drugim masinama da testiramo, sad i mene zanima kako bi to radilo u praksi :) , al nemogu danas nikako da se macujem sa tim.


Vidi, mislim da nije potrebno praviti od ta dva jednodimenzionalna niza jedan visedimenzionalni pa ga sortirati, a posle toga ga opet rasclaniti, jer je ocigledno vreme koje je potrebno za rezultat vece. Nego ajde da dokazem.

Ja sam, kao sto vidimo utrosio vreme potrebno za izvrsenje dve for petlje. Znaci moje vreme utroseno je VREME(bez uasort)=2 [for petlja].

A ajde sad da izracunamo ovako odokativno koliko nam je potrebno vreme u slucaju koriscenja uasort() funkcije:

- Prvo treba napraviti od ova dva jednodimenzionalna niza jedan visedimenzionalni. To znaci da nam je potrebno za to najmanje jedna for petlja. Znaci: VREME(uasort)1=1 [for petlja].
- Zatim sortirati taj dvodimenzionalni niz funkcijom uasort(). E sad koliko god da je optimizovana ta funkcija i njoj resenja ne padaju sa neba vec i unutar nje mora posojati najmanje dve for petlje kako bi prosla kroz oba indeksa i uporedila njihove vrednosti kako bi ih sortirala. Znaci minimum dve for petlje stim da ce mo racunati kao jednu ipo for petlju, jer eto mozda je optimizovanije i direktnije. Znaci vreme izvrsenja ovog dela skripte racunacemo kao: VREME(uasort)2=1.5 [for petlja].
- Zatim, potrebno je opet rasclaniti taj dvodimenzionalni niz i izvuci iz njega jednodimenzionalni niz $ime, sto opet iziskuje minimum jednu for petlju, mada ne verujem da moze samo jedna ali ajde. Pa imamo: VREME(uasort)3=1 [for petlja].

Rezime:
Pomocu uasort() funkcije je: VREME(uasort)=VREME(uasort)1 + VREME(uasort)2 + VREME(uasort)3 = 1+1.5+1= 3.5 [for petlja].
Neko ce reci pa zasto da rasclanjujemo, moze da se koristi u daljem radu taj dvodimenzionalni niz. OK u tom slucaju potrebno nam je: VREME(uasort)=VREME(uasort)1 + VREME(uasort)2 = 1+1.5= 2.5 [for petlja].

A da potsetim moja skripta se izvrsava brzinom: VREME(bez uasort)=2 [for petlja].

Samo da napomenem na kraju da se brze program izvrsava kad se u njemu koriste jednodimenzionalni nizovi nego kad se koriste dvodimenzionalni ili visedimenzionalni. Zato je mja preporuka kad god mozete koristite jednodimenzionalne nizove pa cak i po ceni da vam je skripta duza i glomaznija.
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
91.148.79.*

Sajt: norway.dakipro.com


+190 Profil

icon Re: Zagonetni problem oko nizova23.03.2009. u 13:04 - pre 184 meseci
Vidim da si se potrudio da napises silan text, pa necu biti grub i reci da lupas.
Ajde uzmi ti to i prakticno napsi, jer su ovo sad babe i zabe sto si ti napisao.
Naime, totalno ti je pogresan pristup da pises dva niza pa da ih spajas, receno je da napravis jedan multidimenzionalni niz u startu, to je logicniji i prakticniji pristup, da relevantne podatke drzis na jednom mestu.
Znaci, odma otpada tvoja teorija u startu, pa onda ispade da po tvojoj matematici je tvoj pristup sporiji jer nema jedne petlje
Drugo, petlja koja je u generic funkciji JESTE brza od iste te petlje koju ti napises, zato sto nije potrebno parsiranje i jos gomila stvari koju php uradi sa user kodom, vec samo izvrsi tu funckiju bez prevodjenja iz skripte i sta-ti-ja-znam jos cega, o tome mozes proguglati malo i videti zasto i kako je tako.

Drugo, kad bi se ovako 'teorijski' racunalo vreme izvrsenja funkcija, mnoooooge bi stvari pale u vodu, ali mi se svidja tvoj nacin razmisljanja, 'odokativno'
I savet, vodi racuna sta pises i sta savetujes na forumu, jer kada nekad u buducnosti budes trazio posao i ljudi malo proguglaju o tebi, sigurno ce doci ovde, i kad klijent (poslodavac) vidi principe kojima ti optimizujes kod, ne znam kako ce reagovati

Znaci uzmi iscupaj sam sebe sad, NAPISI kod u editoru, stavi ga u fajl i koristi funckije za merenje vremena i zauzeca memorije, ali odistinski, ne 'teorijski'
Onda ako to bude bilo kao sto si ti napisao, taman si dokazao i svoju teoriju pa nemas oko cega da se brines
 
Odgovor na temu

iizuzetan

Član broj: 186478
Poruke: 375
*.adsl.verat.net.



+16 Profil

icon Re: Zagonetni problem oko nizova23.03.2009. u 13:13 - pre 184 meseci
Citat:
dakipro: Vidim da si se potrudio da napises silan text, pa necu biti grub i reci da lupas.
Ajde uzmi ti to i prakticno napsi, jer su ovo sad babe i zabe sto si ti napisao.
Naime, totalno ti je pogresan pristup da pises dva niza pa da ih spajas, receno je da napravis jedan multidimenzionalni niz u startu, to je logicniji i prakticniji pristup, da relevantne podatke drzis na jednom mestu.
Znaci, odma otpada tvoja teorija u startu, pa onda ispade da po tvojoj matematici je tvoj pristup sporiji jer nema jedne petlje :)
Drugo, petlja koja je u generic funkciji JESTE brza od iste te petlje koju ti napises, zato sto nije potrebno parsiranje i jos gomila stvari koju php uradi sa user kodom, vec samo izvrsi tu funckiju bez prevodjenja iz skripte i sta-ti-ja-znam jos cega, o tome mozes proguglati malo i videti zasto i kako je tako.

Drugo, kad bi se ovako 'teorijski' racunalo vreme izvrsenja funkcija, mnoooooge bi stvari pale u vodu, ali mi se svidja tvoj nacin razmisljanja, 'odokativno' :D
I savet, vodi racuna sta pises i sta savetujes na forumu, jer kada nekad u buducnosti budes trazio posao i ljudi malo proguglaju o tebi, sigurno ce doci ovde, i kad klijent (poslodavac) vidi principe kojima ti optimizujes kod, ne znam kako ce reagovati ;)

Znaci uzmi iscupaj sam sebe sad, NAPISI kod u editoru, stavi ga u fajl i koristi funckije za merenje vremena i zauzeca memorije, ali odistinski, ne 'teorijski' ;)
Onda ako to bude bilo kao sto si ti napisao, taman si dokazao i svoju teoriju pa nemas oko cega da se brines :)



Vidi vec sam gore napisao ali ajd opet. Postoje slucajevi da se u toku pisanja skripte (ili celog programa) javljaju na razlicitim mestima kao resenja neki nizovi. Znaci nije uvek moguce napraviti ili dobiti na jednom mestu odjednom gotov visedimenzionalni niz !!.

Ja sam ispisao skriptu koja resava problem sa pocetka teme. E sad ja ne kazem da je to idealno resenja, ali ti napisi bolji KOD koji je brzi pa makar i sa tom tvojom uasort() funkcijom u koju se zaklinjes, i ako dokazes da je tvoj KOD brzi tek onda prihvatam sve tvoje kritike. Ovako "lajes" bez argumenata praznom pricom, sto mislim da nije fer.

Jos napisao si da uzimam dva niza pa da ih spajam. Koliko vidim ja nigde u mom resenju nisam spajao dva niza u jedan !!! Pa upravo je i to poenta price da prodjemo kroz dva nezavisna niza i da jedan od njih uredimo u zavisnosti od vrednosti drugog a da ih ne spajamo.

A odgovor na pitanje koliko sam strucan ili ne ako nekog zanima, sigurno nece traziti po forumima vec ce pitati licno mene koje sam to sajtove napravio, kako bi se uverio u konkretne stvari.

Jos napisao si da je moje resenje sporije jer ima jednu petlju manje. Neznam da li si pogresio u pisanju ili stvarno mislis da kad imas vise petlji u skripti da ti je skripta brza???

Zatim napisao si "petlja koja je u generic funkciji JESTE brza od iste te petlje koju ti napises". Naravno slazem se sa tobom ali moraces i ti da se slozis da koliko god da je brze nije duplo brze. Doduse nikad nisam merio ali ne verujem da je gotova funkcija duplo brza od skripte koja ima identicni KOD.

[Ovu poruku je menjao iizuzetan dana 23.03.2009. u 14:47 GMT+1]
 
Odgovor na temu

Man-Wolf
Mihailo Joksimovic
Beograd

Član broj: 17016
Poruke: 873
*.eunet.yu.



+13 Profil

icon Re: Zagonetni problem oko nizova23.03.2009. u 13:45 - pre 184 meseci
A da vi jednostavno uzmete oba primera i date rezultate ovde ? Ovakva rasprava moze da traje do sutra, a poente nema, samo se kvari tema.
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
91.148.79.*

Sajt: norway.dakipro.com


+190 Profil

icon Re: Zagonetni problem oko nizova23.03.2009. u 13:45 - pre 184 meseci
To sto postoje takvi slucajevi, to ti je greska u startu.
Znaci tu si lose poceo sa programiranjem u startu, a ti odakle god da pravis taj niz, uvek ga mozes kasnije popunjavati, evo i da naucis neke fore:
Code:

$mixedNiz = array(); // ovo radis da bi definisano promenjivu
.
.
.//neki kod u toku skripte
.

$mixedNiz[$id]['ime'] = 'Dejan'; //id menjas po potrebi
.
.//neki kod u toku skripte
.
.
$mixedNiz[$id]['ocena'] = 7;


Kada si u funckiji, onda koristis 'global' da bi tom nizu pristupio unutar funckije, kao i unutar metoda, ili ga prosledis metodama i funkciji, pogledaj i to kako se radi, posto vidim da ti oop nije jaca strana.

Znaci ovako se popunjava multidimenzionalni niz sa vise mesta, probaj malo da radis sa nizovima, procitaj manual i vidi neke primere, prosto je

A sto se 'dokazivanja' tice, kod retko kad pisem za dz, a pogotovo nekom da bi nesto dokazao kome to i ne treba, jer je ocigledno da si temu postavio kako bi pokazao kako ti znas resenje na 'zagonetne' probleme sortiranja nizova (mada, ocigledno je neko tu zagonetku resio daleko pre tebe, cak je i napisao funkciju i ljudi su je integrisali u sam php), ali dobro, kazem, sve je to pod tvojim potpisom

Deluje mi da si se uvredio nesto, ne vidim sto, samo sam ti dao lepo savet sta i kako da radis, ali dobro, svakome sujeta drugacije reaguje
Prilicno je neumesno da kazes nekom da 'laje', ali opet ok, stvar vaspitanja.
Od argumenata ovde imam jedino neko skromno iskustvo, ali verujem Nemanji (dosta iskustva) jer znam da je dobar u onome sto radi, a jos vise verujem i Flylordu (mnooooogo iskustva) koji je to i savetovao Nemanju, ali dobro, opet stoji da nisu neki argumenti, zato sam ti i reko da probas i da vids

A oko toga ko gde proverava ljude i kako, znam da kad god su firme za koje radim zaposljavale ljude, uvek smo proveravali i radove i kod sa testovima, a i bogami i forume i google, ali dobro, posto tebi u potpisu stoji 'Nezaposlen' verovatno imas svoju teoriju o tome da sigurno nece traziti po forumima.
Ljudi danas prvo pitaju google pa gledaju oko sebe.

Nemoj da se ljutis, nije mi bila namera da ti povredim sujetu, samo sam 'teo da ti pomognem najvise sto mogu. Sad bas da ti objasnjavam kako se prakticno meri vreme skripte i zauzece memorije i pisem i kod, stvarno me mrzi...

No, drzimo se teme i pravilnika, tj konkretnog problema


@ Man-Wolf, u pravu si, nadam se da ce Nemanja imati vremena kasnije, taman je on radio nesto slicno

 
Odgovor na temu

Man-Wolf
Mihailo Joksimovic
Beograd

Član broj: 17016
Poruke: 873
*.eunet.yu.



+13 Profil

icon Re: Zagonetni problem oko nizova23.03.2009. u 13:47 - pre 184 meseci
Btw, @iizuzetan, sta se desava u slucaju da postoje dve osobe sa istom ocenom ? :-) Drugo, probaj da nadjes neko univerzalno resenje, jer je ovo tvoje samo za primer kad imamo 6 elemenata u nizu, pa onda daj rezultate brzine izvrsavanja :-)

P.S. Nemoj da shvatas ovo kao kritiku, vec kao ideju :-)
 
Odgovor na temu

iizuzetan

Član broj: 186478
Poruke: 375
*.adsl.verat.net.



+16 Profil

icon Re: Zagonetni problem oko nizova23.03.2009. u 14:12 - pre 184 meseci
Citat:
Man-Wolf: Btw, @iizuzetan, sta se desava u slucaju da postoje dve osobe sa istom ocenom ? :-) Drugo, probaj da nadjes neko univerzalno resenje, jer je ovo tvoje samo za primer kad imamo 6 elemenata u nizu, pa onda daj rezultate brzine izvrsavanja :-)

P.S. Nemoj da shvatas ovo kao kritiku, vec kao ideju :-)


Ne, ne shvatam kao kritiku. Pa vidi ovde sam uzeo 6 elemenata da bi bilo razumljivije sta hocu da kazem. A nista ne menja na stvar (to jest ne menja skriptu) ako imamo i 1 000 000 elemenata oba niza. Jedino sto tad itekako je bitno vreme za koje se izvrsi skripta.
Pitanje sta bi se desilo da su oba uporedjene ocene iste kod dva razlicita imena. Pa ovako konkretno u mom resenju na manjem indeksu ce biti ime koje je bilo na manjem indeksu u nizu $ime pre sredjivanja. E sad ako zelis to da promenis ona umesto "<" stavis "<=".
Drugo, kaze u startu sam pogresno zapoceo skriptu pa sam upao u situaciju da mi se pojavljuju dva jednodimenzionalna niza u razlicitim delovima programa. Vidi ovako, ako pravis sajt klasican koji jedino sto radi je da prikuplja podatke sa sajta kroz forme, ucitava te podatke u bazu i iscitava podatke po potrebi iz baze, donkle malo ih obradi u par reda i ispisje ih u HTML KODU, onda verovatno se i nikad nece javiti bas neki slozeni medjurezultati u izvrsenju skripte. Medjutim ako imas sajtove na cijim pojedinim stranicama imas slozenije aktivnosti kao sto su neke PHP igre, ili neke slicne PHP aplikacije onda itekako se javljaju vrlo slozena medjuresenja pa i u vidu jednodimenzionalnih nizova. Neko ce reci ajde te igre pravi u JAVA ili slicno ali i tamo se javljaju nizovi a ja sam ovde izneo princip koji se moze primeniti u bilo kom jeziku koji ima mogucnost obrade nizova a ne samo PHP.
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-4.sezampro.yu.



+33 Profil

icon Re: Zagonetni problem oko nizova23.03.2009. u 15:59 - pre 184 meseci
Kome, čemu i zašto sve ovo...

Nisam čitao sve poruke, pročitao sam samo prvu, i evo mislim da bi neki prost algoritam za taj tvoj problem mogao da izgleda ovako:
Code:

for ($i = 1; $i <= count($ime) - 1; $i++) {
    for ($j = $i + 1; $j <= count($ime); $j++) {
        if ($ocena[$i] < $ocena[$j]) {
            $temp = $ime[$i];
            $ime[$i] = $ime[$j];
            $ime[$j] = $temp;
            
            $temp = $ocena[$i];
            $ocena[$i] = $ocena[$j];
            $ocena[$j] = $temp;
        }
    }
}    

I stvarno ne znam što si napravio toliku dramu od svega ovoga...

[Ovu poruku je menjao Nikola Poša dana 23.03.2009. u 17:18 GMT+1]
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-4.sezampro.yu.



+33 Profil

icon Re: Zagonetni problem oko nizova23.03.2009. u 16:18 - pre 184 meseci
btw Sad sam malo čitao poruke na ovoj temi, pa pošto vidim da voliš da teoretišeš, ovaj algoritam kojim sam ja napisao u prethodnoj poruci se zove metoda izbora.

Evo ti još nekih metoda za sortiranje nizova, pa ti prouči koji ima najbolji (najbrži) algoritam:

Metoda izbora 2
Code:

$n = count($niz);

for ($i = 0; $i < $n-1; $i++) {
    $m = $i;
    for ($j = $i + 1; $j < $n; $j++) {
        if ($niz[$j] < ($niz[$m])) 
        {    
            $m = $j;
        }
        if ($m != $i)
        {
            $p = $niz[$i]; 
            $niz[$i] = $niz[$m]; 
            $niz[$m] = $p;
        }
    }
}


Metoda umetanja
Code:

$n = count($niz);
    
for ($i=0; $i < $n; $i++) {
    $j = $i - 1;
    while ($j >= 0 && $niz[$j+1] < ($niz[$j]))
    {
        $p = $niz[$j+1]; 
        $niz[$j+1] = niz[$j]; 
        niz[$j--] = $p;
    }
}


Metoda zamene suseda
Code:

$n = count($niz);

$dalje = true;
for ($i = 0; $i < $n-1 && $dalje; $i++){
    $dalje = false;
    for ($j = $n-2; $j >= $i; $j--) {
        if ($niz[$j+1]<($niz[$j]))
        {
            $p = $niz[$j+1];
            $niz[$j+1] = $niz[$j]; 
            $niz[$j] = $p;
            $dalje = true;
        }
    }
}


I verovatno pod nekim od ovih algoritama i rade te f-je za sortiranje nizova u PHP-u, tako da ovo što ti pokušavaš da izvedeš je samo "izmišljanje tople vode"...

[Ovu poruku je menjao Nikola Poša dana 23.03.2009. u 17:35 GMT+1]
 
Odgovor na temu

iizuzetan

Član broj: 186478
Poruke: 375
*.adsl.verat.net.



+16 Profil

icon Re: Zagonetni problem oko nizova23.03.2009. u 16:31 - pre 184 meseci
Citat:
Nikola Poša: Kome, čemu i zašto sve ovo... :)

Nisam čitao sve poruke, pročitao sam samo prvu, i evo mislim da bi neki prost algoritam za taj tvoj problem mogao da izgleda ovako:
Code:

for ($i = 1; $i <= count($ime) - 1; $i++) {
for ($j = $i + 1; $j <= count($ime); $j++) {
if ($ocena[$i] < $ocena[$j]) {
$temp = $ime[$i];
            $ime[$i] = $ime[$j];
            $ime[$j] = $temp;

$temp = $ocena[$i];
            $ocena[$i] = $ocena[$j];
            $ocena[$j] = $temp;
}
}
}

I stvarno ne znam što si napravio toliku dramu od svega ovoga...

[Ovu poruku je menjao Nikola Poša dana 23.03.2009. u 17:18 GMT+1]



Ma nema drame. Ovaj KOD koji si ti napisao ima identicni pristup kao moj, samo ga malo ubrzavas sto u prvom poredjenju izbegavas da se niz $ime na istom indeksu ne uporedjuje sam sa sobom. Ali ok ovo jeste malo savrseniji KOD.
Kazes da je prosto resiti ovaj problem ali zar ne vidis da mnogi ovde govore da treba da se koristi neka funkcija da bi se doslo do resenja. Znas kako kazu "sve je prosto" kad se resi i kad se vidi resenje :)
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
93.86.158.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Zagonetni problem oko nizova23.03.2009. u 19:37 - pre 184 meseci
Evo i mog rešenja, bez ikakvih petlji (sa sve benchmarkingom):

Code:
<?php
// benchmarking deo
   $mtime = microtime();
   $mtime = explode(" ",$mtime);
   $mtime = $mtime[1] + $mtime[0];
   $starttime = $mtime;

// definisanje niza
$niz[1]['ime']='Ana';
$niz[1]['ocena']=6;

$niz[2]['ime']='Bilja';
$niz[2]['ocena']=8;

$niz[3]['ime']='Dejan';
$niz[3]['ocena']=7;

$niz[4]['ime']='Sasa';
$niz[4]['ocena']=5;

$niz[5]['ime']='Laza';
$niz[5]['ocena']=9;

$niz[6]['ime']='Maza';
$niz[6]['ocena']=10;

// funkcija za sortiranje
function sortiraj($a, $b) {
    if ($a['ocena'] == $b['ocena']) {
        return 0;
    }
    return ($a['ocena'] > $b['ocena']) ? -1 : 1;
}

// pozivamo uasort()
uasort($niz, 'sortiraj');

// ispis rezultata
echo '<pre>';
print_r($niz)

// bench. deo, prikaz vremena izvršenja skripte
   $mtime = microtime();
   $mtime = explode(" ",$mtime);
   $mtime = $mtime[1] + $mtime[0];
   $endtime = $mtime;
   $totaltime = ($endtime - $starttime);
   echo "<p>Vreme izvrsenja skripte: ".$totaltime." sec</p>";
?>


Rezultati koje dobijam su:

Code:
Array
(
    [6] => Array
        (
            [ime] => Maza
            [ocena] => 10
        )

    [5] => Array
        (
            [ime] => Laza
            [ocena] => 9
        )

    [2] => Array
        (
            [ime] => Bilja
            [ocena] => 8
        )

    [3] => Array
        (
            [ime] => Dejan
            [ocena] => 7
        )

    [1] => Array
        (
            [ime] => Ana
            [ocena] => 6
        )

    [4] => Array
        (
            [ime] => Sasa
            [ocena] => 5
        )

)

Vreme izvrsenja skripte: 0.00017118453979492 sec


Mada mislim da bi trebalo da testiramo skriptu sa bar par stotina elemenata u nizu
Laravel Srbija.

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

Tudfa
Jovicevic Vladimir

Član broj: 152699
Poruke: 384
*.dynamic.sbb.rs.



+3 Profil

icon Re: Zagonetni problem oko nizova23.03.2009. u 19:40 - pre 184 meseci
Evo da se priključim diskusiji pošto sam se i ja interesovao ranije oko toga šta je brze i kako treba resiti nešto ovako.

@iizuzetan

Ako si na studijama, normalno da ćeš probleme rešavati pišući svoja rešenja jer se to od tebe tamo i trazi i tako ucis.

Ali ako nisi na studijama ili za projekat koji radis nije bitan bas svaki bajt i milisekunda,
iz svog iskustva bi ti toplo preporucio da ovo resis funkcijama iz array palete.

Evo i mog mišljenja zašto.

Prvo te funkcije su testirane, drugo uštedeće ti vreme, trece kod će ti biti manji a mozda i pregledniji, ...
Uostalom kao jedan od primera gde se koriste ove funkcije moze da se navede phpbb forum koji koristi
prakticno celu paletu array funkcija a vazi za jedan od najboljih open source foruma. Mislim to je ipak jedan ambiciozan projekat,
i tu je bas dosta polagano na optimizaciju koda radi povecanja brzine izvrsavanja i smanjenja zauzeca memorije.

Licno nisam neki pobornik da koristim gotov kod, ali isto tako nemam problem da koristim nesto za sta se vec zna da radi posao.

Valjda je bolje da ono sto vec postoji gotovo iskoristis,
a vreme koje bi utrosio na pisanje te svoje funkcije potrosis na pisanje onog sto nemas u gotovom obliku a treba ti.

poz
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-4.sezampro.yu.



+33 Profil

icon Re: Zagonetni problem oko nizova23.03.2009. u 21:20 - pre 184 meseci
Citat:
Nemanja Avramović: Evo i mog rešenja, bez ikakvih petlji

Pa naravno da nema petlji kad imaš samo jedan niz...

@iizuzetan

Slažem se sa svim ovim što je Tudfa napisao, i naravno da treba koristiti ugrađene f-je, njih nije pisao bilo ko, već iskusni programeri, profesionalci, i one savršeno obavljaju svoj posao uz minimalno korišćenje resursa. Ali ovaj tvoj problem, za koji sam siguran da se nikad nećeš susresti s takvim nečim u realnim projektima , je bilo logičnije rešavati nekim svojim algoritmom, odnosno, praktično ga je bilo nemoguće rešiti sa nekom ugrađenom f-jom, a da prethodno ne spojiš ta dva niza u dvodimenzionalni, pa da onda ideš ovako kako je Nemanja napisao...
 
Odgovor na temu

[es] :: PHP :: Zagonetni problem oko nizova

Strane: 1 2

[ Pregleda: 7759 | Odgovora: 28 ] > FB > Twit

Postavi temu Odgovori

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