22. december 2007 - 11:20Der er
24 kommentarer og 1 løsning
Arrayværdi = arrayværdi
Hey derude.
Jeg har et array med x-koordinater
123,234,543,239 osv. De kan svinge fra 1 til en milliard... million. Skal ikke ha' betydning for projektet. Der kan også være en millard værdier i arrayet.
og naturligvis et array med y-koordinater, samme stil :).
Med php, vil jeg lave en lille kode - som skal finde ud af hvem der har samme koordinat.
Altså, hvis: x[1] = y[1]
så skal den spytte: Koordinat, og ID (altså 1) ud.
Sikker på det er nemt for jer champs, jeg har selv roddet med det, men uden held desværre - synes det løber i ring.
Vist ikk helt korrekt, Nielle :). Din checker hvis x = y. Det er x = x og y = y. Lidt forvirrende vist, du må sige hvis du skal have det forklaret bedre.
Kan se at jeg har forklaret hoved-spørgsmålet som en klaphat. Det er pga. for lidt søvn, for meget cola og programmering. Håber du forstår det nu, Nielle.
Alle mennesker i verdens' x og y-koordinater står i arrayet. Vi skal finde X/Y/id på de mennesker som står på hovedet af hinanden (dem som har samme X/Y)
Mere søvn og mindre cola, tak! Jeg vil så gerne have gaver i år. ;^)
Jeg tror desværre at du lige må gøre dig lidt mere besvære med at forklare hvordan dine arrays sre ud. Lige nu forestiller jeg mig ialt to gigantiske arrays i stil med:
Følgende tager ca. 8-9 sekunder (på min maskine), hvis du har en million værdier i både $x og $y, og dine x- og y-koordinater ligger mellem 0 og 100.000. Det tager dog 500+ mb hukommelse og jeg tør slet ikke at teste med en milliard :-)
$antalPersoner = count($x); for ($id=0; $id<$antalPersoner; $id++) {
$dubletter = false; for ($id2=$id+1; $id2<$antalPersoner; $id2++) { if ($x[$id2] == $x[$id] && $y[$id2] == $y[$id]) { if (! $dubletter) { echo "Følgende personer på samme sted som: "; echo $id . " : (" . $x[$id] . ", " . $y[$id] . ")<br>"; echo "Dubletter:<br>"; $dubletter = true; }
echo $id2 . "<br>"; } }
}
Din manglede lidt ";" og stavefejl :p. Men virker! Desværre tror jeg at løsningen er for ressource krævende, men lærte da at spørgsmålet. Bare smid et svar, Nielle.
Det var bare hypotetisk - men synes det er godt at lave sådan en test. Jeg tænkte lidt over det, inden jeg gik i seng tidligere idag. Og kom op med den konklusion at gruppere menneskene. Er muligt - og vil nedsætte krævet ressourcer. :).
Jeg synes det er sjovt at lave en alternativ løsning, frem for at gå den vej der virker mest ligetil. Sad faktisk og grublede over løsningen længe, men resultatet er egentlig overraskende simpel.
Nu kommer ressourcer i to varianter: CPU-tid og hukommelsesforbrug. Som regel kan man optimere på den ene, men det vil så gå ud over den anden.
Min løsning er en O(n^2) og terrak's ligger et eller andet sted imellem en O(n) og en O(n^2). Til gengæld går den hårdt ud over CPU'en idet der skal laves streng-sammenlægninger og oprettes array-indgange og -opslag. Den går også ud over hukommelsen da der skal oprettes et nyt array til dublet-tjekket. Det er derfor lidt svært at sige hvilken der vinder i det lange løb.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.