Avatar billede sennels Nybegynder
10. juni 2003 - 12:32 Der er 1 kommentar og
1 løsning

søgning i arrays (rekursiv)(binær)?

Hej
Jeg har et array i ASP, som jeg gerne skulle have lavet en knaldhurtig søgning på. Så er der nogen som har en opskrift på hvordan det skal bygges op

Det jeg har er:
Et sorteret array 2D, hvor der findes en søjle med sprogid og en søjle med Tekst.


Nu kommer jeg så med sprogid i hånden, og vil meget gerne blaste gennem array'et og genfinde det sprogid, jeg har i hånden , i arrayet. (sådan at den kan udløse den tilhørende tekst.

Men array bliver temmeligt langt, og funktionen skal køre mange gange, når en side bygges op, så jeg bryder mig ikke om, at skulle lave en "Do while Notfound", hvor man starter i toppen og kører igennem en masse elementer til man finder den.

Er der nogen som har en god opskrift på en sådan søgning i arrays ?

mvh sennels
Avatar billede x4all_dk Nybegynder
10. juni 2003 - 13:15 #1
Hejsa,

Du siger du har sorteret arrayet, og jeg gaar ud fra
at det er paa "sprogid".

Saa hurtigste soegning vil nok vaere en binaersoegning,
som sker i O(log(n)) tid frem for While.. som tager O(n) tid.

Denne algortitme skal du nok lave lidt om i saa den passer
dit problem. Men modellen er heldigvis ret generel,
og du burde vaere i stand til at tilpasse den til din kode.


public static boolean contains(int item, int[] array) {
    int low = 0;
    int high = array.length - 1;
    while (low <= high) {
        int mid = (low + high) / 2;
        if (item < array[mid]) {
            high = mid - 1;
        } else if (item > array[mid]) {
            low = mid + 1;
        } else {
            return true;
        }
    }
    return false;
}
Avatar billede sennels Nybegynder
10. juni 2003 - 13:33 #2
Ja det var sådan noget jeg fiskede efter.
Det er vel ikke noget i vejen for at item og array(mid) er chars  og ikke integers ?

Så i stedet for at returnere true tager jeg array(mid)-Teksten, for det er vel her svaret på  den jeg ønsker at finde. Altså index mid, som holder den ønskede værdi.

hvad nu hvis mit item = den sidste i arrayet  returner den så ikke false ?


Men jeg stoler på, at det virker når jeg nu kommer jeg og prøver det af.
tak for det .
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