eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingalgorytm stringi › Re: algorytm stringi
  • X-Received: by 10.49.15.38 with SMTP id u6mr81496qec.8.1358328541366; Wed, 16 Jan
    2013 01:29:01 -0800 (PST)
    X-Received: by 10.49.15.38 with SMTP id u6mr81496qec.8.1358328541366; Wed, 16 Jan
    2013 01:29:01 -0800 (PST)
    Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask
    .pl!news.nask.org.pl!news.unit0.net!feeder.erje.net!us.feeder.erje.net!news.glo
    rb.com!f6no1428376pbd.1!news-out.google.com!s9ni26pbb.0!nntp.google.com!f6no142
    8367pbd.1!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Wed, 16 Jan 2013 01:29:01 -0800 (PST)
    In-Reply-To: <2...@g...com>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=89.229.34.123;
    posting-account=xjvq9QoAAAATMPC2X3btlHd_LkaJo_rj
    NNTP-Posting-Host: 89.229.34.123
    References: <kceu17$8cf$1@node1.news.atman.pl>
    <c...@g...com>
    <kckmci$3s2$1@node1.news.atman.pl>
    <f...@g...com>
    <4...@g...com>
    <6...@g...com>
    <c...@g...com>
    <9...@g...com>
    <1...@g...com>
    <2...@g...com>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <4...@g...com>
    Subject: Re: algorytm stringi
    From: "M.M." <m...@g...com>
    Injection-Date: Wed, 16 Jan 2013 09:29:01 +0000
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: quoted-printable
    Lines: 63
    Xref: news-archive.icm.edu.pl pl.comp.programming:201677
    [ ukryj nagłówki ]

    W dniu środa, 16 stycznia 2013 09:29:22 UTC+1 użytkownik firr kenobi napisał:
    > nie rozumiem, jak wogole wygladalo by
    > takie indeksowanie np na przykladzie zaindeksowania 'robinsona cruzoe' (okolo
    > 500kb)? robi sie cos w rodzaju slownika/mapy
    > ze slowami i offsetami w pliku?

    Też nie mam ani szczegółowej wiedzy, ani doświadczeń praktycznych z
    tego typu algorytmami. Wyobrażam sobie to mniej/więcej w ten sposób...

    Mamy tekst:
    char text[M];

    Mamy długość prefixa:
    const int N = 6;

    Mamy parę:
    struct Pair {
    unsigned int key; // suma-klucz
    unsigned int pos; // pozycja w text.
    Pair *next;
    };

    Mamy hash-table:
    Pair *hash_table[S];

    Mamy klucze, po jednym kluczu dla znaku alfabetu:
    const unsigned int keys[256] = {rand,rand...rand};

    Inicjujemy hash-table:
    unsigned int key = 0;
    for( int i=0 ; i<N ; i++ )
    key ^= keys[ text[i] ];
    for( int i=N ; i<M ; i++ ) {
    Pair *pair = new Pair( key , i-N , NULL );
    const unsigned int entry = key % S;
    insert( pair , hash_table , entry );
    key ^= text[i-N] ^ text[i];
    }

    Potem mamy wzorzec:
    char pattern[N+R];

    Liczymy klucz:
    key = 0;
    for( int i=0 ; i<N ; i++ )
    key ^= keys[ pattern[i] ];

    Liczymy punkt wejścia do hash-table:
    entry = hash_table + key % S;
    while( entry ) {
    print( entry->pos ); // pozycje pod którymi może zaczynać się wyszukiwany tekst
    enetry = entry->next;
    }

    Pozdrawiam



Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: