26. september 2003 - 14:32Der er
54 kommentarer og 2 løsninger
Hvilken datastruktur bør jeg anvende?
Jeg er igang med at lave en intelligent ordbog (som set på eks. Nokias telefoner). Man skriver et ord og ordbogen kommer selv med et foreslag alt efter hvilke bogstaver man har indtastet...Altså jeg skal have organiseret en pokkers masse danske ord i en form for datastruktur.
Jeg har mine overvejelser om binære søgetræer eller hashmaps, men jeg er ikke helt sikker på hvad der ville give den bedste performance.
Det jeg tænker på, er at programmet skal lede efter et ord på bagrund af 1, 2 eller 3 indtastede bogstaver således at hvis jeg skriver "int" så vil programmet foreslå mig det første resultat den finder i mine data der starter med "int". Altså skal jeg ikke søge i min datastruktur efter hele ordet. Men derimod kun efter det/de ord der starter med mit kriterie. Hvad ville være mest hensigtsmæssigt at bruge?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Du kunne bruge java.util.TreeSet, men hvis du ved hvor mange ord du skal loade inden du loader, så vil et godt gammeldags simpelt array nok være lige så godt.
Der skal aldrig fjernes noget og kun indsættes ting een enkelt gang. Det din struktur først og fremmest skal bruges til er at slå op. så den del skal prioriteres.
Noget andet der skal prioriteres er plads. en mobilos har ikke for meget. så jeg ville nok vælge et hashmap. eller måske sågar noget så simpelt som en perfekt heap, implementeret i 2 arrays som du så sifter dine entries ned i. (den er tung at bygge, men når den først er bygget er den hurtig at søge i og fylder endnu mindre end den der hashtabel).
Ét enkelt array? Jeg synes at det lyder vildt...Kan du ikke sætte en ca værdi på hvor mange ord du mener at dette array kunne indeholde og stadig være nogenlunde hurtigt?
Jeg har netop færdiggjort det...Jeg lavede hashmap med første bogstav som key og en arraylist som værdi.. Pænt?? Måske ikke, men den søger på max 1/100 af et sekund med 60.000 ord i sin map....Det er godt nok til mig...BTW er der nogen der har et link til en fil med alle danske ord??
Tak til alle Arne, soreno og jakoba ... Så mangler jeg bare lige at høre om en sidste ting... Filen jeg henter med alle de danske ord er en flad fil med alle ord adskildt af små firkanter...Representerer disse firkanter et linieskift når teksten formateres? Hvordan fanges disse af java´en? indtil videre har jeg brugt en filereader der læser en linie ad gangen og fyrer det hele ind i en Stringtokenizer for at kunne skille ordene ad...Hvordan får jeg fanget og individualliseret de nye ord?
Binær søgning er det med at vælge midten og derefter se om objektet er størrer eller mindre end det man leder efter, og derefter dele op igen osv...? Og hvorfor hedder det egentlig binær søgning?
Der er stadig lidt af et problem...Jeg skal jo ikke søge efter ét ord i min hashmap. Den skal returnere en liste af ord der starter med de indtastede bogstaver.. Kan man stadig anvende binær søgning til det?? på nuværende tidspunkt returnerer mit hashmap en arraylist af Strings som starter med de bogstaver man spørger efter...
Det havde jeg også lavet...Jeg har et hashmap med forbogstavet som nøgle og en arraylist med stringobjekter som værdi..Det virker fint der er 380000 ord i. Men jeg vil nu ændre det fra sekventiel til binær søgning. Jeg har konstrueret det således at man tilgår mit hashmap via en metode der får en String med som parameter. Denne metode returnerer en arraylist med de stringobjekter fra hashmappen der starter med den string man sendte med som parameter.
Alt dette foregår sekventielt, det vil sige via. en forlykke der kører igennem en af hashmappens arraylister (alt efter forbogstav) og hiver matchende resultater(sammenlignet på forbogstaver) ind i en ny arraylist som den returnerer...Det er dette jeg gerne ville have gjort binært...
Det kan godt være at jeg ikke fatter det helt, men er binær søgning ikke kun ideélt hvis jeg vil søge på et aksakt ord, det jeg søger efter er jo alle ord der starter med xxx, altså skulle den binære søgning jo resultere mere end et match...Bliver den så ikke sekventiel alligevel?? jeg søger efter 'and'...Den binære søgning halverer indtil den står med 'andalusien'...Hvad herefter??? Skal den søge igen for at finde 'andedam', 'anders' og 'andres'??
Det er meget muligt at jeg ikke kan se skoven for bare træer.. :)
Du må da meget gerne komme med et eksempel på en binær søgning der returnerer en række resultater baseret på forbogstaver fra et array (for points selvfølgelig)
cas >> er også igang med at lave et eksempel (også for min egen fornøjelse) ... Men jeg tænkte på... skal det være en "nummer-styret" opslagsmetode, dvs. tasten "2" dækker over A, B og C ; "3" dækker over D E og F lige som når man skriver "hurtige" sms'er på nokia-telefoner...
Hej...Jeg har lavet et nyt spørgsmål med points i til dig(http://www.eksperten.dk/spm/408016). Angående fejlen så skal jeg nok vende tilbage...jeg ved ikke endnu hvornår men tiden er lidt knap...Tak for Hjælpen.
Mvh Casualty
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.