ERLEDIGT
NEIN
NEIN
ANTWORTEN
11
11
ZUGRIFFE
389
389
EMPFEHLEN
-
Hallo zusamen
ich habe ein Algorithmus Boyer Moore in java der lauffähig ist. für den text Eingabe möchte ich nicht immer manuell eingeben, sondern nur als textdatei der mir halt liest und vergleicht mit Muster das ich möchte. Hat jemand eine Idee vielen dank im Vorraus
den Code sieht so aus:
import java.util.Map;
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
public class BoyerMoore { public static List<Integer> match(String pattern, String text) { List<Integer> matches = new ArrayList<Integer>(); int m = text.length(); int n = pattern.length(); Map<Character, Integer> rightMostIndexes = preprocessForBadCharacterShift(pattern); int alignedAt = 0; while (alignedAt + (n - 1) < m) { for (int indexInPattern = n - 1; indexInPattern >= 0; indexInPattern--) { int indexInText = alignedAt + indexInPattern; char x = text.charAt(indexInText); char y = pattern.charAt(indexInPattern); if (indexInText >= m) break; if (x != y) { Integer r = rightMostIndexes.get(x); if (r == null) { alignedAt = indexInText + 1; } else { int shift = indexInText - (alignedAt + r); alignedAt += shift > 0 ? shift : 1; } break; } else if (indexInPattern == 0) { matches.add(alignedAt); alignedAt++; } } } return matches; } private static Map<Character, Integer> preprocessForBadCharacterShift( String pattern) { Map<Character, Integer> map = new HashMap<Character, Integer>(); for (int i = pattern.length() - 1; i >= 0; i--) { char c = pattern.charAt(i); if (!map.containsKey(c)) map.put(c, i); } return map; } public static void main(String[] args) { List<Integer> matches = match("abb", "bacbabcababcabb"); for (Integer integer : matches) System.out.println("Match at: " + integer); System.out.println((matches.equals(Arrays.asList(1, 3)) ? "OK" : "Failed")); } }
Geändert von sheel (27.01.12 um 01:41 Uhr) Grund: Codetags
-
Hi und Willkommen bei tutorials.de,
bitte beschreib dein Problem genauer.
Hab keine Ahnung, was du willst.Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
27.01.12 07:16 #3
Moin und auch von mir ein Herliches Willkommen

Wo ist denn das Problem? Du musst doch dann einfach nur eine Datei einlesen und den eingelesenen Inhalt an die Methode match übergeben.Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
Hi sheel,
Wie man sieht ganz unten ich habe Muster : abb und Text : bacbabcababcabb ich möchte halt eine methode implementieren, die mir egal welchen Textdatei ich habe und bis 2 Gb groß ist, mit mein Muster abb vergleichen kann und schaue, ob da ein match gibt oder nicht
d.h. ob "abb" in diesem Text vorkommt oder nicht.
-
27.01.12 09:41 #5
Und wo ist dabei das Problem oder die Schwierigkeit?
Einfach eine Methode implementieren, die die Datei stumpf einliest und den Inhalt zurückgibt. Den übergibst du dann an deine Methode und gut is.
Zitat von Akeshihiro
Ich hab ein bisschen das Gefühl, dass du gar nicht weißt, wie man mit Dateien arbeitet oder?Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
Hi Akeshihiro,
ich habe keine Ahnung.
ich habe´s versucht mit BufferReader und anderen Methoden aber wie ich das um setze konnte ich nicht, deswegen bitte um die Hife
-
(Hab die PN bekommen, aber du kannst ruhig im Thread weiterschreiben)
Also...Eine Datei einfach nur einlesen dürfte mit "Filestream Java" in Googe nicht so schwer fallen.
2GB kannst du aber nicht in einem Stück einlesen, um die Datei als String zu haben.
Auch, wenn du den GC danach manuell leerst (was nicht unbedingt empfehlenswert ist,
falls Java das überhaupt mitmacht).
(Und nein, nur weil man 4GB RAM hat, bekommt Java davon nicht automatisch alles.).
Du musst dein match so umschreiben, dass es immer einen Teil der Datei im Speicher hat,
und bei Bedarf den nächsten Block einliest.
Und was ist mit Userzeit/Systemzeit?
Wenn du die Dauer berechnen willst, musst du nur
-Am Anfang die Zeit ermitteln
-am Ende die Zeit ermitteln
-Subtrahieren.
PS:
@Akeshihiro: Laut PN ist die Datei 2GB groß,
sollte also mit einem Schritt problematisch werden.
@3abd: Bitte Forumsuche und Google.
Es gibt so viele Seiten, auf denen das schon ausführlich erklärt ist.Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Mit user zeit und system zeit ist Cpu zeit, damit ich eine genau zeit der bearbeitung bekomme ohne nebenläufige prozesse die die CPU zeit beeinträchtigen.
-
Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Ich bemühe mich die frage richtig zu stellen.kann man was mit
cpuStart = threadMX.getCurrentThreadCpuTime();
userStart = threadMX.getCurrentThreadUserTime();
was anfangen?
komme ich nicht weiter
danke im Vorraus!
-
"...may choose any time..."
Genau ist das auch nicht.Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
ich muss so wieso mehrere Male jeden Text mit Algorithmus laufen lassen und notiere mir halt die beste Zeit.
Ähnliche Themen
-
Aus Textdatei lesen verschieben
Von klanawagna im Forum .NET DatenverwaltungAntworten: 1Letzter Beitrag: 11.08.09, 18:22 -
[c++] Variablen aus Textdatei lesen
Von guddy im Forum C/C++Antworten: 5Letzter Beitrag: 23.07.08, 15:58 -
Zufallszeile aus Textdatei lesen
Von Mailyn im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 10.08.06, 08:39 -
Zeilenweise aus Textdatei lesen
Von DanielBodensee im Forum PHPAntworten: 2Letzter Beitrag: 17.06.04, 07:09 -
aus textdatei lesen und schreiben
Von Mr.Fies im Forum PHPAntworten: 2Letzter Beitrag: 18.06.02, 21:00





Zitieren


Login





