Avatar billede f_bar Nybegynder
14. oktober 2002 - 16:04 Der er 6 kommentarer og
1 løsning

søge algoritme

JEg har brug for en søge algoritme der kan gøre dette.
1. jeg har en hashtable med nogle objekter, disse objekter har 2 variabler int x og int y : 2 koordinater. Denne hashtable er > 20
2. jeg skal så have en metode / søge algoritme der får en nyt sæt int, nyX og nyY med som input. Denne algoritme skal så finde de x objekter i hashtablen, der er nærmest det nye sæt koordinater nyX og nyY.
Det er jo ikke så galt vel :)
Avatar billede arne_v Ekspert
14. oktober 2002 - 16:20 #1
Du bliver vel nødt til at søge igennem alle elementer i
hash tabellen.

For hver enkelt beregne afstanden (kvadratroden
af kvadratet på forskellen i X + kvadratet på forskellen
i Y).

Sammenligne resultatet med den hidtil mindste værdi
og hvis den nye værdi er mindre, så gemme en ny
mindste værdi og en referance til objektet.
Avatar billede arne_v Ekspert
14. oktober 2002 - 16:25 #2
Hvis den hash tabel er en java.util.HashMap, så kan du søge gennem
alle elementer med:

Iterator it = hm.keySet().iterator();
while(it.hasNext()) {
    key = it.next();
    value = hm.get(key);
}
Avatar billede f_bar Nybegynder
14. oktober 2002 - 16:48 #3
ja det ved jeg men det er en Hashtable, så der bruger jeg enumeration, men det var mere til hvordan jeg lige gjorde det, så jeg vil lige se om jeg kan få implementeret dit første svar
Avatar billede f_bar Nybegynder
17. oktober 2002 - 19:03 #4
arne_v>> kan du komme med et eksempel, og hvis man bare kører igennem denne hashtable 1 for 1 så er det vel ikke den mest optimale måde at gøre det på, der skal vel bruges en søge algoritme af en eller anden slags
Avatar billede f_bar Nybegynder
17. oktober 2002 - 19:03 #5
altså et eksempel på det du mener med kvadratroden af kvadratet på forskellen i x osv.
Avatar billede arne_v Ekspert
17. oktober 2002 - 19:43 #6
Du bliver nødt til at løbe alle elementer i din
hash tabel igennem.

Du kan ikke bruge den direkte lookup til noget.

Så:

Z z0 = det objekt som vi skal finde nærmeste object til;
long minval = et eller andet ekstremt stort;
Z minobj = null;
while(e.hasMoreElements()) {
    Z z = (Z)e.nextElement();
    long val = (z.x - z0.x) * (z.x - z0.x) + (z.y - z0.y) * (z.y - z0.y);
    if(val < minval) {
        minval = val;
        minobj = z;
    }
}

For at val og minval var den ægte afstand skal man
tage kvadrat-roden, men algoritmen virker lige godt uden,
så det har jeg sparet.
Avatar billede f_bar Nybegynder
20. oktober 2002 - 11:43 #7
Har først lige fået tid til at kigge på det nu, men takker !!
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB