.[ ČeskéHry.cz ].
vymysleni algoritmu

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
KralLam



Založen: 22. 09. 2007
Příspěvky: 8

PříspěvekZaslal: 19. duben 2009, 15:31:50    Předmět: vymysleni algoritmu Odpovědět s citátem

Ahoj,
nejak jsem se zasekl na domacim ukolu a tak bych moc uvital, kdyby tu nekdo nemel co jineho na praci nez mi poradit Smile

Pracujete s databazi, ktera obsahuje informace o studentech a studijnich oborech. Kazdy student studuje prave jeden studijni obor. Kazdy studijni obor muze studovat vice studentu. Rekneme, ze dva studenti jsou spoluzaci, prave kdyz studuji stejny studujni obor.
Vasim ukolem je zjistit, zda v souboru N studentu existuje skupina alespon N/2 spoluzaku, tj. studentu studujicich stejny studijni obor. Problem je, ze jediny databazovy dotaz, ktery k tomu muzete vyuzit, je dotaz na dva studenty; jako odpoved obdrzite pouze informaci zda jsou anebo nejsou spoluzaci.
Navrhnete algoritmus, ktery nalezne pozadovanou odpoved a pritom pocet provedenych dotazu bude O(N log N). Pri navrhu algoritmu pouzijte techniku rozdel a panuj.


Pocmaral jsem asi deset A4, ale worst case mam vzdy kvadraticky. Sad
Tak predem dekuju, pokud nekdo poradite.


Naposledy upravil KralLam dne 19. duben 2009, 16:31:57, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Houp



Založen: 28. 07. 2007
Příspěvky: 672

PříspěvekZaslal: 19. duben 2009, 16:10:16    Předmět: Odpovědět s citátem

já ti poradím jen málo, možná vůbec(že ti řeknu, co už ti dávno došlo). Šel bych na to od konce, tedy ne stylem navrhnout algoritmus, a pak se kouknout na jeho složitost, ale začít tou požadovanou složitostí.

Jelikož se po tobě chce n . log n, tak řešení bude pravděpodobně vypadat stylem nejdřív se zeptej na všechny dvojice. Pak z výsledku nějak zavolat totéž na dvojice dvojic, pak na dvojice čtveřic atd. Teď stačí vymyslet "jen", co to bude dělat.

Vím, asi jsem ti nepomohl. Smile
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
KralLam



Založen: 22. 09. 2007
Příspěvky: 8

PříspěvekZaslal: 19. duben 2009, 16:16:21    Předmět: Odpovědět s citátem

no to myslim, uz napovida docela zadani - rozdel a panuj Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mike.pr



Založen: 29. 07. 2007
Příspěvky: 6

PříspěvekZaslal: 19. duben 2009, 19:01:10    Předmět: Odpovědět s citátem

No jestli ti to vraci jen jestli je spoluzak nebo ne tak je to dost jednoduchy.

Protoze jakmile zjistis, ze Petr je spoluzak Pavla, tak te pak zajimaji jen spoluzaci Pavla, protoze jsou to to i spoluzaci Petra atd atd. Samozrejme v kazdem kroku predavas spoluzakovi mensi a mensi mnozinu k prohledavani.



Krasny D&C

Chybu na krase to bude mit, kdyz bude relace skupin N:M. To pak fakt jinak nez se slozitosti N^2 nepujde.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 19. duben 2009, 19:41:38    Předmět: Odpovědět s citátem

mike.pr> Zkus to trochu rozepsat, nejak v tom navod k reseni v NlogN nevidim (a pokud bys v kazdem kroce ubral jen jednoho spoluzaka, tak nejhorsi pripad bude O(n^2)).

Reseni v N*logN pomoci rozdel a panuj me zrovna nenapada, takze aspon reseni v O(n) (dvema pruchody seznamem spoluzaku):

Prvni pruchod:
Projdi seznam studentu a udrzuj si citac N a aktualni studijni program (reprezentovany jednim jeho clenem C).
Na zacatku N <- 1, C <- prvni student v seznamu
Pro kazdeho dalsiho studenta S proved jedno z nasledujicich:
1) pokud N > 0 a S a C jsou spoluzaci, pak N <- N + 1 a pokracuj dalsim.
2) pokud N > 0 a S a C nejsou spoluzaci, pak N <- N - 1 a pokracuj dalsim.
3) pokud N = 0, pak C <- S a N <- 1

Lemma: Da se rozmyslet, ze pokud na nejakem studijnim programu je ostre vic nez N/2 studentu, pak po projdeni seznamu vsech studentu bude N > 0 a v C bude reprezentant tohoto studijniho programu (resp., coz je dulezitejsi, studijni programy, ktere C nestuduje, nemuzou mit vic nez N/2 studentu).

Druhy pruchod:
Projdi seznam studentu znovu a spocitej, kolik ma C, co vysel na konci predchoziho kroku, spoluzaku.

Pozor, pokud N je sude a studentu v nejvetsim studijnim programu je presne N/2, tak Lemma neplati a je potreba to osetrit. To jde udelat snadno tretim pruchodem, ale na to urcite prijdes, at z toho ukolu neco mas Wink
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 19. duben 2009, 20:11:31    Předmět: Odpovědět s citátem

Tak chvile ve vane a uz me napadlo i to reseni pomoci rozdel a panuj v N*logN. Ono to vlastne je celkem jednoduche Smile
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
KralLam



Založen: 22. 09. 2007
Příspěvky: 8

PříspěvekZaslal: 19. duben 2009, 20:42:05    Předmět: Odpovědět s citátem

Tak se podel Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 19. duben 2009, 20:47:30    Předmět: Odpovědět s citátem

Reseni v linearnim case nestaci? Smile
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
KralLam



Založen: 22. 09. 2007
Příspěvky: 8

PříspěvekZaslal: 19. duben 2009, 21:02:11    Předmět: Odpovědět s citátem

No rozhodne za nej dekuji, je pekne a elegantni, ale ja stravil nekolik osklivych hodin nad tim jak to udelat pomoci rozdel a panuj v N log N...jsem zvedavy Very Happy
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 19. duben 2009, 21:04:42    Předmět: Odpovědět s citátem

No, vsechno je to zalozene na celkem jednoduche uvaze, ze pokud nadpolovicni vetsina studentu z mnoziny S patri do studijniho programu A a S libovolne rozdelis na dve stejne velke podmnoziny, tak alespon v jedne z nich nadpolovicni vetsina studentu patri do A. Dal to urcite zvladnes Wink
Teda ono to plati, at uz S rozdelis na dve podskupiny jakkoliv...
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 19. duben 2009, 21:22:45    Předmět: Odpovědět s citátem

Hm, tohle jsem taky řešil do školy. Vymyslel jsem brutálně obrovský a složitý algoritmus s asi 10 speciálními případy na principu co říkal ondrasej Smile
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
adragon



Založen: 23. 08. 2007
Příspěvky: 72
Bydliště: Praha

PříspěvekZaslal: 19. duben 2009, 22:35:39    Předmět: Odpovědět s citátem

Quiark napsal:
Hm, tohle jsem taky řešil do školy. Vymyslel jsem brutálně obrovský a složitý algoritmus s asi 10 speciálními případy na principu co říkal ondrasej Smile

Zvlastni me vysel algortimus, ktery ma jen 2 pripady a jeden z nich se deli na 2 podpripady.
princip spociva ve funkci, ktera v dane mnozine najde nejvetsi skupinu a jejiho reprezentanta.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
KralLam



Založen: 22. 09. 2007
Příspěvky: 8

PříspěvekZaslal: 21. duben 2009, 17:33:14    Předmět: Odpovědět s citátem

OndraSej napsal:
Dal to urcite zvladnes Wink


Crying or Very sad Nezvladnu...dalsi indicii prosiiim...jsem asi ztraceny pripad.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 21. duben 2009, 18:03:02    Předmět: Odpovědět s citátem

No, pocitat budes asi smerem "zdola nahoru", takze slucovat mensi mnoziny. Co si pri tomhle slucovani budes zachovavat, uz jsem naznacoval vys: s kazdou mnozinou by sis mel predavat, jestli v ni alespon polovina studentu studuje stejny program. A pokud ano, tak bys mel zaroven predat studenta, ktery ten program reprezentuje.

No a ted si predstav, ze mas dve takove mnoziny (a nejvyse dva reprezentanty) a potrebujes je nejak sloucit do jedne (s nejvyse jednim reprezentantem). Otazka je jak. (ale to uz bys mel fakt zvladnout i kdyz jsi beznadejny pripad) Jeste drobna napoveda - abys pocital v NlogN, tak slucovani dvou mnozin studentu o celkove velikosti K ti staci provest v O(K) krocich.

A pak je tu jeste ten problem, kdy studenti v urcite mnozine studuji dva programy a obe skupiny jsou stejne velke (tj. jedna pulka studuje program A, druha program B). Pozor na to - ten postup co jsem popsal je potreba mirne (ale fakt jen mirne) poopravit, aby fungoval i v tomto pripade. Ale na to bys taky uz mel prijit.
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna