[ harisb2012 @ 14.07.2013. 23:23 ] @
Pozdrav,

Već dugo vremena se bavim programiranjem (2-3 god). Budući da imam 16 godina, pokušavam naučiti što više.
Do sad znam: C, C++, Java, PHP, CSS, HTML, XML. Znam raditi i u Yii frameworku i u novijem, Laravel 4.

Eh sada, mnogo sam čitao o RoR-u i općenito o Ruby-u, Perlu i Pascalu. Ali čuo sam i finih priča o Delphiju.
Moja želja je bila učiti i ASP.NET, ali vidim da se taj jezik sve manje koristi i da je pored PHP-a nebitan, hajdemo reći.

Koja je vaša preporuka za idući jezik od gore navedenih?
I da li iko ima iskustva sa radom u Google-u, pošto jednog dana (aBd), kada završim fakultet ili kad već budem u mogućnosti, želim konkurisati tamo za posao. Koliko znanja i šta kokretno je potrebno?

[ reiser @ 15.07.2013. 02:33 ] @
Od ta tri koja si naveo, Ruby je daleko popularniji od ostala dva. Rekao bih u razmeru 10/1/0.1, Ruby/Perl/Delphi. Moja preporuka ti je da se fokusiras na jedan jezik i postanes "guru" u njemu, umesto da znas 10 jezika, ali nijedan dovoljno dobro. Da sam u tvojoj poziciji trenutno, razmisljao bih izmedju RoR/Python/C++/C#, zavisi sta ti najvise lezi.
[ Nedeljko @ 15.07.2013. 09:51 ] @
Što se rada u guglu tiče, istamburaj ovu knjigu da pršti

http://www.amazon.com/books/dp/0262033844

Ne kažem da ne može bez toga, ali ovo ti je sigurica i svakako bi ti tamo znanje iz te knjige koristilo.
[ harisb2012 @ 15.07.2013. 12:41 ] @
Hvala na savjetima, fokusiracu se na Ruby malo vise, a sada... PHP reci cemo da sam guru. Apsolutno sve znam napravit u njemu, pa cak sam radio i sistem pracenja za jednu firmu. Ta aplikacija bila je kombinovana i sa android aplikacijom itd.

Hvala i za knjigu! A da li ima iko ovdje ko je vec radio u Google-u ili da li znate nekoga?

[ djoka_l @ 15.07.2013. 13:03 ] @
Mislim da je pogrešan savet da ideš na Ruby, nakon tvoje tvrdnje da znaš PHP perfektno.

Ono što ne znaš, ili nisi napisao je SQL i JavaScript. Za bilo kakvu složenu web aplikaciju, potrebna ti je backend baza podataka (tj. poznavanje SQL) i malo bogatiji frontend (tj. upotreba JavaScript-a).
[ harisb2012 @ 15.07.2013. 13:08 ] @
Nisam spomenuo, al valjda se to podrazumijeva sa PHP-om. Znam i MySQL i MSSQL, takodjer znam i JavScript i librarie istoga - jQuery. :)
[ Nedeljko @ 15.07.2013. 14:44 ] @
Citat:
harisb2012: Hvala i za knjigu! A da li ima iko ovdje ko je vec radio u Google-u ili da li znate nekoga?

Znan na čemu se padalo.
[ mozdasamjaamozdainisam @ 15.07.2013. 15:05 ] @
+1 da se fokusiras na jedan jezik i da u njemu budes medju 10 najboljih strucnjaka na planeti.

Davno su rekli, nije bitno u cemu si prvi - samo da si prvi :)

A koji jezik, pa najbolje ono sto tebi najvise lezi. I da ga naucis do 0 i 1, da ga sanjas, da ga jedes, dises... Onda ti je posao skoro zagarantovan u svakoj firmi, jer strucnjaci (oni pravi) su uvek, ali uvek potrebni.

PS. pre par godina, upoznam lika koji je jedan (od tada 7 ljudi) na planeti koji je bio zaista strucnjak za neki tip servera; decko se ubijao od love, ali ruku na srce gotovo da nije imao privatan zivot, jer u roku od nedelju dana obidje 2-3 drzave :(
[ whitie2004 @ 15.07.2013. 15:26 ] @
Jezik ko jezik. Pricao engleski ili nemacki - bitno je sta pricas a ne koji jezik koristis. Mnogo se lakse nauci jezik nego posle kako da ga koristis.

Moj ti je savet da skoknes do it-ebooks.info i u pretrazivac ubacis big data (to je bitno za gugletu) i od vise knjiga izaberes neku za pocetnike - da ne kazem za dummies. Videces da je cela knjiga namenjena modeliranju, analizi i statistici ... a alati (vec pomalo matori) su hadoop, mapreduce, hive.

Ako pratis diskusije po forumima videces da se horski samosazaljevaju da pogresna upotreba tih alata paravi gomilu beskorisnih podataka. Uveli su cak i skracenicu - GIGO u smislu od djubreta nema dobre pite ...

Kad savladas gradivo dodjes opet do dela u intervju gde se spominje iskustvo u ozbiljnim fimama / projektima. Ako nisi radio na stotinak servera simultano .... dakle, ukljuci se u neki projekat gde ces pokazati da znas nesto i da to nesto vredi.
[ harisb2012 @ 15.07.2013. 15:35 ] @
Ma dobro, danas je takvo vrijeme da se defnitivno ne moze reci da je neko medju 10 najboljih na planeti. Ja mogu reci da sam, i sto se sigurnosti tice i performansi odlican. Ali, koliko jos ima momaka koji su u gotovo istoj situaciji kao ja?! Recimo da sam vec dobio stipendiju za Burch University iako sam tek zavrsio prvi razred srednje skole, napravio perfektan elektronski dnevnik.

Eh sada me godine dosta sprjecavaju da radim ono sto volim. Kada je vrijeme skole, do 4 sam u skoli, od 4 do 00:00 programiram, s tim da imam trening u 8 :D
Od malena sam impresioniran Google-om, jer kada sam imao 7-8 godina, gledao sam dokumentarac o njima. Jednostavno me impresioniralo sve to - okruzenje, da rade dosta projekata, nacin na koji odrzavaju sastanke...

To mi je sve nekako motivacija i imam veliku zelju da nekad postanem dio toga.

Svidio mi se Ruby po sintaxi totalno, ali i Delphi, pa vas pitam s dal da zapocnem sa Rubyem?

[ mr. ako @ 15.07.2013. 16:58 ] @
Google vise nije ta kompanija koju si gledao pre 7, 8 godina, sada su veci i naginju ka tromom dzinu... ali i dalje se dobro drze i nude odlicne uslove za svoje zaposlene. No, nemoj da ti samo Google bude cilj, pogledaj i ostale vrhunske kompanije sta nude, kakve uslove za rad pruzaju. O njihovim uslovima za rad i dokolicu se manje zna, ali su vrlo konkurentni u odnosu na Google, a cesto i bolji... i nude drugacije beneficije za rad/odmor/zdravstveno.
Evo slikovitog primera:
[ whitie2004 @ 15.07.2013. 18:43 ] @
Citat:
... pa vas pitam s dal da zapocnem sa Rubyem?

Pa kada ti se vec svidja svakako kreni. Glupo mi da ti pricam nesto sto ces lako naci na netu - spisak podrzanih jezika. Odes na

https://developers.google.com/appengine/downloads

i skines SDK za rubija. Ops , nema ga na spisku. Koristi ga samo tviter! Gugle, fejs, jutjub i gomila drugih - C, java, piton ... Ako volis da se pravis vazan onda GO - to ljudi i neznaju sta je! A salim se ...
[ bojan_bozovic @ 15.07.2013. 19:43 ] @
Zato može da koristi Heroku ili OpenShift. Koristi ono što svi ostali koriste nije valjan savet, jer svako sa dva grama mozga zna da, ako se programira profesionalno, moraš da se prilagodiš onome što se koristi.

Ako želiš zicer, uči Python i C/C++. Python je izuzento fleksibilan, možeš na njemu da pišeš web aplikacije, skripte ili desktop program.
Što se PHP tiče, tu će ti tražiti i javaskript i SQL (uglavnom MySQL), pa to trebaš da znaš za profesionalan rad (inače, po mom skromnom mišljenju, glupo je tražiti front-end programiranje od PHP developera, ali dobro ako Photoshop ne traže takođe, takve "bisere" imaš ovde na [es] u berzi poslova koliko hoćeš, zašto već jednom poslodavci ne shvate da dobar developer nije i grafički dizajner i obrnuto? I zato imaš sajtova koji su đubre koliko hoćeš, a o kvalitetu koda tih sajtova da ne govorim! Kad programer dizajnira i dizajner kodira.).

I ako ti neko traži i Photoshop, samo odbij. Jack of all trades is good for nothing, kako mi reče jedan, mislim da je Englez bio...
[ harisb2012 @ 15.07.2013. 20:46 ] @
Ma znam vec i C++ i kombinaciju sa GUI aplikacijama, znam i PHP i MySQL.. Dizajn kupujem ili "kradem" hahaha.
Trenutno sam u periodu kada me sve zanima. Ne kazem ja da cu raditi stranicu u Ruby-u, narvno radicu je u PHP-u jer ga znam "u dusu".

Mene samo zanima kakvi su ostali jezici, kako je raditi u njima i sl. Hocu jednostavno da znam sto vise i to je to. :)
[ plus_minus @ 15.07.2013. 21:49 ] @
Šta tebe više privlači, offline ili online/web okruženje? Ili i jedno i drugo? Sudeći po tome da php znaš u dušu, pretpostavljam da je web .. ? Nabrojao si jako dobar broj jezika i kažeš da si profi u njima. To je onda jako dobar intelekt. Sa toliko godina koliko reče da imaš.

Daj neki rad da vidimo. Ako php znaš u dušu, dakle, ostavio si traga na netu, ima te negde. Da svi mogu da vide. 101%.
Bez obzira, uzmi ti lepo i vrati se na početak. Ako već nisi, a nisi sigurno, savladaj C, kao što si savladao i php. Toliko dobro.
[ harisb2012 @ 15.07.2013. 22:55 ] @
Pa ovako. Zanima me i jedno i drugo, ali nisam toliko se bavio offline aplikacijama jer mi se cini da sada sve prelazi u web, cloud. Recimo, Microsoft je poceo izdavati Office na web-u, outlook na web-u, cak su i menadzment sistemi na webu.

Tako sam ja prosle godine, kada sam upisao 1. razred, odlucio da radim jedan projekat, koji bi ucenicima u mojoj skoli pomagao da prepisuju zadacu haha... Medjutim, taj projekat se pretvorio u nesto impresivno, barem mi je tako receno. Napravio sam elektronski dnevnik, potpuni sistem elektronskog dnevnika sa mogucnostima test generatora i live testa.

Projekat je prije svega osvojio srebro na internom takmicenju nasih (Bosna Sema) skola, ali kasnije na drzavnom nivou zlato i proglasen za projekat godine (Burch Olympiad - http://ibu.edu.ba/index.php?id=2812 - Haris Basic, web dizajn). Oko mene su se svi okupili - predstavnici Mozille i Microsofta za Bosnu i gledali me blijedo, nisu vjerovali da neko ko ima 15 godina moze napraviti nesto slicno. Web prezentacija je na adresi http://smartclass.me/ . Ako nekoga zanima da testira aplikaciju, neka se javi, ona je trenutno online. Trebao je ici i na svjetsko takmicenje u Tursku, al isu se stvari nekako iskomplikovale. Isao sam ove godine u par skola na preentaciju, ali jednostavno, ministarstvo kod nas nema nekih novaca.

Nedavno sam poceo da radim i projekat koji omogucava pracenje kretanja zastitatra za security agenciju, ali taj projekat jos nije gotov, pa nije ni online. Uglavnom, u pitanju je kombinacija - Android aplikacija i PHP aplikacija koja ce kasnije dobiti i Windows aplikaciju.

Od ostalih stranica radio sam http://med-beg.com za jednu slovenacku firmu, i u izradi je http://muscleget.com. Uradio sam i user sistem za http://crib.pm, ali jos nije potpuno online...

Sada radim aplikaciju koja olaksava rad freelancerima i nekim skupinama njih koji su rasireni po svijetu sa project management aplikacijom, takodjer PHP, ali jos nije smisljeno potpuno ime, bice uskoro aBd.

U medjuvremenu sam pravio i hrpu nekih cmsova koji su bili na mom internom serveru, ali nikad nisu stvarno ozivjeli.
[ plus_minus @ 15.07.2013. 23:11 ] @
Citat:
Oko mene su se svi okupili - predstavnici Mozille i Microsofta za Bosnu i gledali me blijedo, nisu vjerovali da neko ko ima 15 godina moze napraviti nesto slicno.


E, ovo je dakle baš to što bi, nadam se, svakom kasvetnom čoveku bilo mnogo milo i drago. Ne mora m$. Samo mozilla. Ako su te oni gledali bledo.. u pozitivnom smislu. Onda lepo vidiš šta to mozilla još voli pored php-a/sql-a, koji su to jezici. Taman. C, C++, Python + serveri. Do koske da poradiš i tu. . što bi rekli. A to do koske... ako si sve ove skroz sam napravio.. znači, za 3, 4, 5.. godina.. od danas.. otpr. .. prestaje zima za tebe u mnogim pravcima. Kopipejstovanje js-a da prevaziđeš. A hoćeš, kad-tad. Sve u svemu, jako dobar portfolio.
[ harisb2012 @ 15.07.2013. 23:18 ] @
Hehe... Ipak moram cekati 18+ godina da bih se mogao pridruziti u Mozilla Reps... Barem sam tako savjetovan, pa onda sta bude, bice :D. Ali dobro, cesto se pitam da li letim i to, ali ne vjerujem. Samo ne volim likove koji se predstavljaju da sve znaju i objavi da je uradio svoju zivotnu aplikaciju, CMS, i onda ga provalim da je to kopirao sa net.tutsplus.com tutoriala. Imam par takvih primjera na FB-u i onda cesto poletim bas zbog njih.

Valjda ce nesto biti od mene haha :D

[Ovu poruku je menjao harisb2012 dana 16.07.2013. u 00:31 GMT+1]
[ Picsel @ 16.07.2013. 01:48 ] @
Takve projekte mozes okaciti macku o rep prilikom konkurisanja za Google ako ne znas ono sto je Nedeljko preporucio

Evo ti par zadataka sa intervjua za Google. Trebalo bi da imas takvo znanje da ove zadatke mozes resiti u najboljoj slozenosti za 15ak minuta po zadatku.

1. Stize neogranicen stream float brojeva jedan po jedan. Dat je i broj N (N <= 100). Za svaki broj (osim prvih N-1) treba da kazes da li je veci od 2 * prosecne vrednosti poslednjih N brojeva.

2. Dat niz stringova, odrediti koji se string najcesce pojavljuje u nizu. (kao podpitanje za resenje pomocu hash tabele je paralelizacija tog algoritma)

3. Date dve operacije, Insert() i GetMedian(). Osmisliti strukturu podataka koja efikasno podrzava ove operacije (trazi se da je Insert O(log(n)), a GetMedian() O(1)).

4. Dat niz pravougaonika paralelnih sa osama i donja ivica im je na X osi (predstavljaju zgrade). Pravougaonici mogu da se preklapaju. Odrediti skyline (odnosno za svaku tacku na X osi, koja je najvisa zgrada, to jest koja je Y koordinata krova).
[ harisb2012 @ 16.07.2013. 02:03 ] @
Ma znam... evo skinuo sam knjigu o algoritmima, procitao nesto i mogu reci da nije losa, ali ima dosta toga da se cita (1300+ stranica). A sto se tice svega toga i tih zadataka, ja se nadam da cu za koju godinu znati da ih rijesim. U biti, PHP i MySQL su mi od samog starta bili lagani - brzo sam naucio, brzo radim, ali ovo je ono sto sam ja htio - "pravo" progamiranje, a to algoritmi jesu (tj. navode na razmisljanje prilikom programiranja). Nebitno da li cu imati finansijske koristi od algoritama, ali me to zanima :D
[ Rapaic Rajko @ 16.07.2013. 09:50 ] @
Harise, lepo je citati tvoje uspehe, svaka cast! :)

Ne daj da te obeshrabre "stare kuke" sa foruma, ti imas intelekt a za to jos nije nadjena zamena ;) . Knjige gore navedene jesu korisne, i apsolutno ih treba procitati i savladati, ali - da li si ikad procitao izraz "thinking out of box"? U prevodu: smisliti/resiti nesto na originalan nacin (jer ne postoji konvencionalan/jednostavan, hehe).
Samo guraj, za tebe se jos cuti, itekako.
Moram samo da kazem da mi je zao sto nisi dotakao Pascal (Delphi), jer on je nezaobilazan deo (istorije?) teorije programiranja; ali ti jednostavno ides prebrzo. Medjutim, postoji more gotovih resenja za najrazlicitije programerske zadatke (recimo mnozenje matrica, ili Gausovo resavanje sistema jednacina) pisanih u tkz. pseudokodu, a koji je (slucajno) najslicniji Pascalu. Eto, mojih 5 cents...

Srdacan pozdrav :)

[ Nedeljko @ 16.07.2013. 10:54 ] @
Citat:
Picsel: Takve projekte mozes okaciti macku o rep prilikom konkurisanja za Google ako ne znas ono sto je Nedeljko preporucio

Evo ti par zadataka sa intervjua za Google. Trebalo bi da imas takvo znanje da ove zadatke mozes resiti u najboljoj slozenosti za 15ak minuta po zadatku.

1. Stize neogranicen stream float brojeva jedan po jedan. Dat je i broj N (N <= 100). Za svaki broj (osim prvih N-1) treba da kazes da li je veci od 2 * prosecne vrednosti poslednjih N brojeva.

2. Dat niz stringova, odrediti koji se string najcesce pojavljuje u nizu. (kao podpitanje za resenje pomocu hash tabele je paralelizacija tog algoritma)

3. Date dve operacije, Insert() i GetMedian(). Osmisliti strukturu podataka koja efikasno podrzava ove operacije (trazi se da je Insert O(log(n)), a GetMedian() O(1)).

4. Dat niz pravougaonika paralelnih sa osama i donja ivica im je na X osi (predstavljaju zgrade). Pravougaonici mogu da se preklapaju. Odrediti skyline (odnosno za svaku tacku na X osi, koja je najvisa zgrada, to jest koja je Y koordinata krova).

Evo još nekih zadataka sa intervjua za Google:

5. Data je jednostruko povezana lista koja zauzima 9 GB prostora, a komp ima još jedan GB slobodnog prostora (nisu bitne cifre, već da je lista pojela najveći deo raspoložive memorije). Postoji mogućnost da neki član liste pokazuje na neki član liste na koji još neko pokazuje. U tom slučaju se kaže da lista ima petlju, a u suprotnom da je nema. Utvrditi da li lista čiji je početni čvor dat na ulazu ima petlju ili ne. Na kraju lista mora da ostane netaknuta.

6. Da li možeš da napraviš regularan izraz koji bi proveravao sintaksnu ispravnost izraza C jezika (možeš i da ga osakatiš samo na aritmetičke izraze sa celim brojevima)?
[ harisb2012 @ 16.07.2013. 12:09 ] @
Citat:
Rapaic Rajko: Harise, lepo je citati tvoje uspehe, svaka cast! :)

Ne daj da te obeshrabre "stare kuke" sa foruma, ti imas intelekt a za to jos nije nadjena zamena ;) . Knjige gore navedene jesu korisne, i apsolutno ih treba procitati i savladati, ali - da li si ikad procitao izraz "thinking out of box"? U prevodu: smisliti/resiti nesto na originalan nacin (jer ne postoji konvencionalan/jednostavan, hehe).
Samo guraj, za tebe se jos cuti, itekako.
Moram samo da kazem da mi je zao sto nisi dotakao Pascal (Delphi), jer on je nezaobilazan deo (istorije?) teorije programiranja; ali ti jednostavno ides prebrzo. Medjutim, postoji more gotovih resenja za najrazlicitije programerske zadatke (recimo mnozenje matrica, ili Gausovo resavanje sistema jednacina) pisanih u tkz. pseudokodu, a koji je (slucajno) najslicniji Pascalu. Eto, mojih 5 cents...

Srdacan pozdrav :)


Hvala, nadam se da cu jednog dana i Delphi uzeti, ali polako, ne zuri mi se toliko, ucicu, pa ce to, nadam se, donijeti rezultate.


Citat:
Nedeljko: Evo još nekih zadataka sa intervjua za Google:

5. Data je jednostruko povezana lista koja zauzima 9 GB prostora, a komp ima još jedan GB slobodnog prostora (nisu bitne cifre, već da je lista pojela najveći deo raspoložive memorije). Postoji mogućnost da neki član liste pokazuje na neki član liste na koji još neko pokazuje. U tom slučaju se kaže da lista ima petlju, a u suprotnom da je nema. Utvrditi da li lista čiji je početni čvor dat na ulazu ima petlju ili ne. Na kraju lista mora da ostane netaknuta.

6. Da li možeš da napraviš regularan izraz koji bi proveravao sintaksnu ispravnost izraza C jezika (možeš i da ga osakatiš samo na aritmetičke izraze sa celim brojevima)?


Pa ne znam, ima tu 1-2 pitanja koja bas i nisu preteska (ili se tako cine), ali ja se nadam da kada malo proucim algoritme i ostalo, za koju god., da cu to znati rijesiti. Sve se moze kad se hoce :)

[Ovu poruku je menjao harisb2012 dana 16.07.2013. u 13:56 GMT+1]
[ notebookFun @ 18.07.2013. 10:27 ] @
Meni ovo sve djeluje kao jedan napaljeni lame klinac. Rece da je PHP Guru :)

http://med-beg.com
Sta si ti na ovom sajtu uradio u PHP? Ovo je Wordpress a CSS je pisao Ahmet Mulalic.

A da si sam uradio ovaj dnevnik, ni to ti ne vjerujem, jer bi znao uraditi bar jedan zadatak sto ti je Picsel postavio...

Sve dok sebe budes zamisljao toliko visoko nikad neces doci tako daleko...
[ harisb2012 @ 18.07.2013. 11:37 ] @
Znam uraditi zadatak koji ce da u tekstu pronaci rijec koja se najcesce pojavljuje. Za med-beg, prosli dizajn sam ja uradio, vjerujes li da nisam ni gledao da je stranica izmjenjena u medjuvremenu.

Neka se javi ko zeli vidjeti protofolio. Link je uklonjen

Tu imas jedan dio portofolia. Takodjer, od gore navedenih problema, na takmicenju sam (pripremi za jace takmicenje), uradio skyline problem (http://uva.onlinejudge.org/external/1/105.html), slicno je.

"Gospodine", dnevnik sam apsolutno ja uradio, znaci sve od A-Ž i dobio zasluzenu nagradu, srebro i zlato, trebao ici u Tursku. To je sve u PHP-u napisano. A pitam tebe sta si radio sa 15 godina? Igrao fudbala ispred zgrade?!

[Ovu poruku je menjao harisb2012 dana 18.07.2013. u 15:20 GMT+1]
[ whitie2004 @ 18.07.2013. 13:36 ] @
Fudbal se igra ranije a u 15 se jure zenske. O programiranju se filozofira u mojim godinama - to kad vise nisi za ovo dvoje iznad... Ne potenciraj mnogo programiranje, pomislice neko da si kratak na ovim poljima ispred! Ne zezam te, govorim ozbiljnoi!!

Nikom ne pricaj da si u tim godinama otvorio nalog na nekom frilens sajtu - to se nesme. Radi se ali se cuti.

Da nekome zatvoris usta polozis neki od fri ( recimo PHP ) testova na elansu/odesku i udjes u grupu od bar 10%. Ne mora u 1% ili u prvih deset - to je glupost. Onda posaljes referencu na svoj profil ...
[ Nedeljko @ 18.07.2013. 14:13 ] @
@notebookFun

Nemoj biti toliko oštar. Normalno je da omladina ne zna koliko ne zna i to uopšte nije bitno sa stanovišta njihovog razvoja. Bitno je da imaju želju za učenjem, da ne nalupavaju čvrge onima od kojih mogu nešto da nauče i da im pristup problematici nije šarlatanski. U tom smislu, mislim da je postavljač teme na pravom putu.
Citat:
harisb2012: Znam uraditi zadatak koji ce da u tekstu pronaci rijec koja se najcesce pojavljuje.

Možeš li nam otprilike opisati kako? Ne treba kod, već samo ideja, ali koja se može implementirati.
Citat:
harisb2012: na takmicenju sam (pripremi za jace takmicenje), uradio skyline problem (http://uva.onlinejudge.org/external/1/105.html), slicno je.

Mislim da postoji bitna razlika. Kod gugla su koordinate i visine realni brojevi. To može neke stvari da promeni. Slično je, ali nije isto. Nije li tajna kako si ga rešio? Taman sam mislio da obesim rešenja ovih zadataka, ali bih sada da čujem tebe.

Gugl ima više nivoa testiranja. Ne bih znao da procenim sa kog su nivoa postavljeni zadaci, ali evo jednoga koji nisam znao da rešim dok nisam video rešenje. Sporio sam se sa jednim članom ES-a (Dejan Lozanovic aka ByteCode)* oko tog zadatka. On je imao nekakvo rešenje koje zapravo nije tačno, a kasnije je pronašao tačno. Naravno, sve to ima u knjizi koju sam preporučio.

Evo zadatka:

Napraviti što efikasniju klasu za skladištenje stringova (recimo zasnovanih na osmobitnim znakovima) koja ima sledeće osobine:

1. Ima metode sa prototipovima

void insert(string)
bool exists(string)

od kojih prva dodaje string u kontejner, a druga proverava da li je dati string do tada ubačen u kontejner.

2. metoda exists sme da da netačan rezultat sa verovatnoćom manjom od 1:1000000.

3. Klasa ne sme da koristi više od 2GB prostora.

4. Klasa mora biti sposoba da prihvati do 200 miliona stringova prosečne dužine 40 znakova.


* Ne, nije banovan, nego je izgubio staru lozinku.
[ harisb2012 @ 18.07.2013. 14:28 ] @
Pa ovako.

Prvo unos samog teksta. Program izbroji koliko je rijeci uneseno i na osnovu toga generise array. (rijeci[x], ponavljanja[x]). Nakon toga prolazi kroz svaku rijec i unosi je u arraye, prvo rijeci[x], zatim +1 u ponavljanja[x]. Ukoliko se rijec ponavlja, ne unosi je u prvi array, nego samo u drugi array.

Znaci

rijeci[1] = 'kuca'
ponavljanja[1] = 3

bi znacilo da se kuca ponavlja 3 puta, i nakon toga samo uporediti vrijednosti svakog broja, koji je najveci, taj se najvise ponavlja haha. Bitno je napomenuti da redni broj u arrayu rijeci mora biti isti kao i redni broj u arrayu 2.

A skyline problem sam radio davno, ima nekih 6 mjeseci, u Sarajevu (Bosna Sema institucije), imao sam pripremu, pa nam je taj zadatak dat... Radio sam ga 45 ili cak vise minuta, ali rijesenja mislim da nemam... provjericu mailove jer sam slao profesoru, ali nisam bas siguran.

A sto se tog zadatka tice, ima li nekih drugihzahtjeva, ako npr. ima li bazu podataka gdje se sprema ili samo array?

EDIT: u PHP-u bih mogao uraditi i sa jednim arrayom :)
[ the_tosic @ 18.07.2013. 15:51 ] @
Ti treba da napravis strukturu u kojoj ce se cuvati stringovi. Dakle da napravis hash mapu/stablo/trie...

@Nedeljko jel mozes da postavis link ka temi gde ste trazili resenje zadatka?
[ Nedeljko @ 18.07.2013. 17:35 ] @
Pazi, ja ne znam PHP (mada bih verovatno znao da pročitam). Tvoje rešenje problema sa stringovima je korektno, ali nije ni izbliza efikasno kao neka druga rešenja. To gugl ne traži. Ako si do sada uneo milion reči, onda bi za milion i prvu morao da je uporediš sa svih milion koje se nalaze u listi. To znači da bi nakon unošenja n stringova broj poređenja u najgorem slučaju bio

.

Ovo znači da za 10 puta više unetih reči treba 100 puta više poređenja

.

Kada je veliko, je malo (izračunaj ga kada je n jednako hiljadu, odnosno milion, odnosno 100 miliona), tako da je za 10 puta veći broj stringova broj poređenja na koje se svakako troši vreme oko 100 puta veći.

Postoji algoritam čije utrošeno vreme raste mnogo sporije. Evo, prilažem rešenje tog zadatka:
Code (cpp):

#include <string>

class StringCounter
{
    struct Node
    {
        typedef Node *Three;

        Three nextLetter[256];
        unsigned int counter;

        Node()
        {
            counter = 0;

            for (int i = 0; i < 256; ++i) {
                nextLetter[i] = 0;
            }
        }
    } rootNode;

    unsigned int currentMax;
    std::string currentString;

public:
    StringCounter()
    {
        currentMax = 0;
    }

    void insert(const std::string &str)
    {
        Node *currentNode = &rootNode;
        size_t size = str.size();

        for (size_t i = 0; i < size; ++i) {
            unsigned char ch = str[i];

            if (currentNode->nextLetter[ch] == 0) {
                Node *nextNode = new Node;

                currentNode->nextLetter[ch] = nextNode;
                currentNode = nextNode;
            } else {
                currentNode = currentNode->nextLetter[ch];
            }
        }

        ++(currentNode->counter);

        if (currentNode->counter > currentMax) {
            currentMax = currentNode->counter;
            currentString = str;
        }
    }

    std::string getMaxString() const
    {
        return currentString;
    }
};


Šta je fabula radnje? Imaš zasebnu strukturu podataka koja se zove drvo. Drvo ima čvorove od kojih svaki sadrži neke podatke (koji zavise od toga čemu drvo služi) i pokazivače prema drugim čvorovima. Pritom, da bi se to zvalo drvo, ne sme postojati ciklus tako da npr. čvor A pokazuje na čvor B, čvor B pokazuje na čvor C, a čvor C pokazuje na čvor A (odnosno da neki čvor pokaže na samoga sebe) i mora postojati tačno jedan čvor na koji ne pokazuje nijedan drugi čvor, pri čemu taj čvor zovemo korenom. Izuzetak je slučaj kada je drvo prazno, to jest nema nijedan čvor, pa ni koren. Ta situacija se dozvoljava. Ako znamo gde se nalazi koren drveta, lako možemo doći do svih ostalih čvorova drveta.

Možda će ti biti jasnije sa slike

http://en.wikipedia.org/wiki/Tree_%28data_structure%29

Tamo svaki čvor može imati najviše dva potomka, kada se drvo zove binarno, a inače ih može biti i više.

Svaki znak ima neku vrednost od 0 do 255. Koren predstavlja prazan string i grana se na 256 grana prema tome koje je prvo slovo u stringu. Neki od pokazivača su jednaki nuli, što znači da ne pokazuju ninakakav čvor. Ako bismo u prazan kontejner ubacili reč "Ana", onda bismo osim korena imali joštri čvora. Koren bi svojim pokazivačem koji odgovara slovu "A" pokazivao na jedan novi čvor, a ostali pokazivači korena bi bili nule. Taj novi čvor svojim pokazivačem koji odgovara slovu "n" pokazuje na drugi novi čvor, a ostali njegovi pokazivači su nule i na kraju taj drugi novi čvor pokazuje svojim pokazivačem koji odgovara slovu "a" na treći novi čvor.

Međutim, postavlja se pitanje šta da radimo ako se doda reč "Ananas". Onda će treći novi čvor koji se pojavio dodavanjem reči "Ana" svojim pokazivačem koji odgovara slovu "n" pokazivati na još jedan novi čvor itd. Ukupno ćemo osim korena imati još šest čvorova. Kako znati da su ubačene dve reči od kojih je jedna početni deo druge?

Svaki čvor mora da nosi informaciju da li kontejner sadrži reč koja predstavlja put od korena do tog čvora. U našem slučaju, osim te informacije nam treba i informacija koliko je reč puta ubačena, tj. brojač.

Na kraju, negde sa strane pamtimo koliko puta se pojavljuje najčešća reč i koja ej to reč, pa kada utvrdimo da se reč koju ubacujemo do tada češće pojavljivala, onda te informacije sa strane ažuriramo.
[ Nedeljko @ 18.07.2013. 17:36 ] @
Citat:
the_tosic: @Nedeljko jel mozes da postavis link ka temi gde ste trazili resenje zadatka?

To niej ni bitno jer tačno rešenje nije tamo dokumentovano. Otom-potom može da se postavi.
[ Nedeljko @ 18.07.2013. 17:40 ] @
Za rešenje preko ovakvog drveta, a ne klasične mape sam se opredelio zbog primedbe da na rešenje sa klasičnom mapom ide podpitanje o paralelizaciji.

Ovo se može paralelizovati, naravno upotrebom po jednog sinhrozacionog objekta za svaku promenljivu, zato što će konflikti oko zaključavanja iste promenljive biti retki. Ovo sa strane se ažurira n puta ako se najšešća reč pojavljuje n puta.
[ harisb2012 @ 18.07.2013. 17:48 ] @
OK.. u php-u bi to islo dosta lakse

array(
'rijec' => 3,);

tako bi se ubacivalo u arrey, usporedba bi isla brze. Ali ljudi, ne razmisljam ja sada onako kako cu razmisljat za 5-6 godina. Ipak, imam ja jos dosta knjiga procitati, posloziti svu tu logiku.
Mislim, ono, ne idem ja sutra na razgovor u Google... ima pripreme prije toga...

I sto se tice one knjige sto ste mi dali, mnogo hvala (Intraducing to Alghoritams), citam je, ali ona ima 1300 stranica koje se moraju fino pricitati i razmisliti, nije kao lektira. Ja se nadam da cu moci davati bolja rjesenja za koju godinu :)
[ the_tosic @ 18.07.2013. 19:33 ] @
Nedeljko, da li sam lepo razumeo sta si rekao za paralelizaciju?
Koristio si drvo, zato sto bi kod umetanja morao da lockjjes celu mapu, a kod drveta samo node koji menjas?
[ Nedeljko @ 18.07.2013. 20:15 ] @
Razumeo si.

harisb2012

Za tu knjigu treba i nesto matematike, ali upornost se isplati.

Nije poenta da li php ima neku strukturu bez obzira na to kako ta struktura radi ispod haube.
[ Nedeljko @ 18.07.2013. 22:26 ] @
harisb2012

OK je što php ima neku strukturu, ali je bitno i koliko je efikasna njena primena u ovom slučaju. Optimalno rešenje nije ono koje ima najkraći programski zapis, već ono koja najbrže radi ili troši najmanje dodatnog memorijskog prostora (osim onog koji je već potrošen na same argumente), zavisno od toga šta se traži. Prva procena ide preko asimptotskog ponašanja potrebnog vremena ili memorijskog prostora za jako složene ulaze. Tu se koristi Landauov simbol O (čita se "veliko O"). Od dva algoritma koja imaju isto asimptotsko ponašanje, algoritmi se upoređuju do na konstantan faktor.
[ harisb2012 @ 18.07.2013. 22:33 ] @
Nedeljko...

Puno hvala. Znam da treba matematike, matematike koju ja do sada nisam radio u skoli, ali pokusacu razumjeti sto vise. Malo googlat, malo knjiga, druga knjiga, c.. imam dovoljno stvari da ispunim raspust do kraja :D.

Trudicu se defnitivno da sto prije savladam neke stvari, da naucim sto vise... niko se nije rodio naucen :D

Ali drago mi je da su na ovom forumu ljudi dosta izasli u susret meni, dali mi nekih informacija, savjeta, kritika i svega ostalog.
[ whitie2004 @ 19.07.2013. 08:44 ] @
Nadje mi se jutros u posti, procitaj kad budes imao vremena ....

http://www.quora.com/Startup-A...-idea-Should-I-ask-for-funding

[ harisb2012 @ 19.07.2013. 14:26 ] @
whitie2004

To mi je trebalo. Onaj pravi motivacijski tekst. :) Hvala

Nedeljko

Poceo sam uciti C, mada izgleda relativno lagano, ne vidim sada nekih prevelikih razlika (nisam ucio C, jesam C++) do sada. Poslije toga sam odlucio da se bacim na Phyton :)

[ lelorinel @ 25.07.2013. 11:00 ] @
da se nadovezem na nedeljka sa preporukom za knjigu.
moja preporuka je ovo
the granddady of all books :)