Najefektywniejszy sposób przechowywania danych.

0

Powiedzmy, że będę chciał w programie wykorzystywać jakąś potężną ilość danych (raczej nieedytowalnych).
No powiedzmy na przykład, że będzie to lista słów, bardzo duża, bo około miliona.
Jak najlepiej coś takiego przechowywać, aby dostęp do tego z poziomu programu był jak najszybszy?
Wczytywanie z pliku tekstowego do wektora trochę wolne.
Relacyjnej bazy dachy nie mogę też zrobić.
const tablica to trochę duży plik cpp wyjdzie.
Jakie rozwiązania wykorzystują np. słowniki angielskiego?

0

Zakładam że chcesz to szybko przeszukiwać. Może drzewo, lub/oraz zwyczajnie podzielić na mniejsze obiekty np w zależności od liczby liter w słowie czy też pierwszej litery (albo jedno i drugie). Im mniej danych będzie do przeszukania tym szybciej znajdziesz właściwe. Swoją drogą milion słów? co to będzie?

0

a to dlaczego baza danych nie wchodzi w rachubę?

0

Czegos tu nie lapie, skoro masz liste miliona slow, zalozmy, ze kodowanie ascii + 10 znakow/slowo. To wazy to jedynie 10MB i mozesz sobie spokojnie z pliku wczytac do tablicy i operowac na tablicy z dostepem O(1).

0

Właśnie chciałbym ograniczyć czas wczytywania z pliku. Kombinowałem z const tab i zrobiłem doświadczenie.
Napisałem program piszący program z taką tablicą:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
    string s = "        \"slowo\"";
    for (int i = 1 ; i < 1000 ; i ++)
        s = s + ", \"slowo\"";

    std::fstream plik;
    plik.open( "plik.cpp", std::ios::out | std::ios::trunc );
    if( plik.good() == true )
    {
        plik << string("#include <iostream>\nint main()\n{") << endl;
        plik << string("    const std::string tab [] = {") << endl;
        for (int i = 0 ; i < 1000 ; i ++)
            plik << s << endl;
        plik << string("    };") << endl;
        plik << string("    return(0);\n}") << endl;
        plik.close();
    }
    return( 0 );
}

Niestety plik.cpp nie chce się skompilować: out of memory allocating 65536 bytes

Chyba jednak plik tekstowy :P

0

Ponieważ stworzyłeś tablice na stosie, spróbuj utworzyć ją poprzez operator new na stercie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1