| Autor |
Beitrag |
fuggaz
      
Beiträge: 106
|
Verfasst: Di 30.01.07 22:20
Hallo
Wenn ich ein Vokabeltrainer/Wörterbuch schreibe, möchte ich nat. auch dafür gewappnet sein, dass die Vokabeldatei 1mio vokabeln hat-allerdings ist der RAM voll wenn ich das in eine array einlese.
Gibt es da einen Trick oder muss ich jede Vokabel dann immer aus der einzeln Datei einlesen?
Wenn ich dann ein Wort suche dauert das doch schon ziehmlich lange wenn ich auf Festplatte zugreife.
Die Wörterbücher, die ich benutzt finden das immer sofort(kein fühlbarer Zeitverlust)
mfg fuggaz
|
|
Sinspin
      
Beiträge: 1336
Erhaltene Danke: 119
Win 10
RIO, CE, Lazarus
|
Verfasst: Di 30.01.07 22:36
Im Normalfall verwenden übliche Übersetzungsprogramme oder eben Wörterbücher eine Datenbank.
Die hat den Vorteil das du dich nicht mehr um die eigentlichen Festplattenzugriffe kümmern musst. Zudem stellen sie eine sehr schnelle Suche zur Verfügung die du sofort nutzen kannst ohne großartig Code schreiben zu müssen.
Dann kannst du auch millionen Wörter sammeln ohne das dein Speicher voll wird.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
perry5
      
Beiträge: 102
|
Verfasst: Mi 31.01.07 00:54
Der RAM wird schon nicht voll.
Bei sagen wir durchschnittlich 50 zeichen pro Vokabel, was jetzt nicht soo viel ist, kann man in 128 MB Ram über 2 Millionen speichern. Und, um ehrlich zu sein kenne ich kaum Wörterbücher die so viele Vokabeln haben.
Jedes System aht zudem eigneltich mehr als 128 MB-RAM außerdem gibts ja noch auslagerungsdateien.
Und, naja, ob du jemals ein Wörterbuch mit sooooooo vielen Vokalben hast, ist auch ein wenig fraglich.
d.h. mach dir darüber erstmal keine Sorgen.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 31.01.07 21:42
Ferner kann man mit ein wenig Tricks auch den Speicherverbrauch wieder stark senken. Man nehme einen Trie, und speichere in den Knoten eine Liste mit den Übersetzungen ... Macht min. 16 Byte pro Vokabel + die Speicherstruktur für den Trie (12 Byte * Anzahl Knoten) ... Damit kommst Du auf sehr kleine Datenmengen (und in 128 MB RAM sollten dann auch 5 Mio. Vokabeln reinpassen  (Mit Übersetzungen in beide Richtungen) Man kann also wenn's wirklich eng wird SEHR gut optimieren ... Aber bei größen, wo sowas relevant wird, hast Du schon ausgehaucht, bevor Du dein Wörterbuch auf der Größe hast 
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
fuggaz 
      
Beiträge: 106
|
Verfasst: Fr 02.02.07 15:04
Hi,
Wegen Krankheit konnte ich nicht früher antworten...
So:
Also ich hatte mir das am Anfang so gedacht.
Ich schreib eine Datei mit 2mio Wörtern.
1mio-deutsche,1mio(englisch?)
Natürlich schreibe ich sie nicht wirklich sondern lasse ein Wort 2mio* schreiben.
Ich habe einfach mal hallo genommen.
Jetzt habe ich die Datei ausgelesen.
Sie ist nur ein paar mb groß.
Ich habe vorher ein (1000000,2) speicher reserviert und dann eingelesen.
Und bei ca 75% oda da in der Nähe, kamm dann die Meldung, der Arbeitsspeicher sei voll.
Daher kam ich darauf.
Datenbank:Das wird dann wohl etwas kompliziert. Dann müsste ich ja erst die Vokabeln in eine Datenbank umwandeln...
@BenBE:Das habe ich jetzt nicht so ganz verstanden.Das ist ein bisschen zu hoch für einen noob;)
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 02.02.07 19:45
Meni Idee ist auch nicht ganz trivial umzusetzen und erfordert ggf. ein wenig Verwaltungsoverhead ... Ist aber auch nur als Randbemerkung gedacht. BTW: Ich kenn jemand, der hat für den TI83+ eine Wortliste (Englisch) mit 25000 Wörtern auf rund 96 KB incl. 5 Spielen mit dieser Wortliste ... ach ja auf ner 6 MHz CPU nahezu flüssig die Suche ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Raffo
      
Beiträge: 300
|
Verfasst: Fr 02.02.07 19:56
Hey, ich hab damals auf einem 286 programmiert (wer es wohl noch kennt), dabei habe ich die "Binäre Suche" verwendet, d.h. EINE sortiete Datei wird per Seek durchsucht, und daraus ein Index (a la A=1 B=254 C=530 ...) gebildet. Eben nur dieses Index wird im Arbeitsspeicher gehalten. Wenn nun eine Suchanfrage gestartet wird, geht das ungefähr so:
Worteingabe: Anyway
A=Index 1
B=Index 254
Suche nun alle B-A sequenziell ab, die das Wort Anyway beinhalten - und zwar mit SEEK auf die Datei direkt.
Noch schneller gehts, wenn das Index dann noch AB, AC ... umfasst.
Diese Suche lief auf dem von 1991 Computer wirklich sehr schnell und es dürfte für heutige Computer kein Problem darstellen, wenn man nicht so tief indexiert.
|
|
fuggaz 
      
Beiträge: 106
|
Verfasst: So 04.02.07 11:45
@Raffo:Danke für den Tip.Das werde ich mal ausprobieren.
@BenBE:Also wenn du mir so nen Code besorgen könntest wäre das schon cool;)
Da könnte ich wahrscheinlich einiges dran lernen.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: So 04.02.07 16:55
Schau Dir diesbezüglich einmal www.delphi-forum.de/....php?p=418404#418404 und die dort verlinkten Posts\Threads an ... Darauf basierte die App vom TI, die ich meinte. Sowas in der Art meinte ich auch ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
|