Vergleiche die ersten drei Zeichen zweier Strings

8

Die Strings s1 und s2 haben immer die Länge 1 oder höher.

Wie kann ich das beschleunigen?

%Vor%

Regex vielleicht?

    
nalo 14.02.2010, 16:08
quelle

6 Antworten

6

Das scheint ziemlich vernünftig. Ist das wirklich zu langsam für dich? Bist du sicher, dass es keine vorzeitige Optimierung ist?

    
luiscubal 14.02.2010 16:10
quelle
5

Umschreiben, um die Erstellung von Objekten zu vermeiden

Ihre Instinkte waren korrekt. Das Erzeugen neuer Objekte (substring ()) ist nicht sehr schnell und es bedeutet, dass jedes erstellte Objekt auch einen g / c Overhead verursachen muss.

Dies könnte viel schneller sein:

%Vor%     
DigitalRoss 14.02.2010 16:52
quelle
3
%Vor%

Übrigens, da ist nichts Langsames drin. startsWith hat Komplexität O(n)

Eine weitere Option ist der Vergleich der char-Werte, die effizienter sein könnten:

%Vor%     
Bozho 14.02.2010 16:10
quelle
2

Mein Java ist nicht so gut, also gebe ich dir eine Antwort in C #:

%Vor%

Beachten Sie, dass im Gegensatz zu Ihren und Bozhos keine neue Zeichenfolge erstellt wird, was der langsamste Teil Ihres Algorithmus wäre.

    
James Curran 14.02.2010 16:12
quelle
0

Vielleicht könntest du das tun

%Vor%     
Vino 14.02.2010 16:16
quelle
0

Hier fehlt der Kontext: Wonach suchst du? Welche Art von Anwendung? Wie oft soll es laufen?

Diese Dinge sind wichtig, weil verschiedene Szenarien verschiedene Lösungen erfordern:

  1. Wenn es sich um einen einmaligen Scan handelt, ist dies wahrscheinlich eine unnötige Optimierung. Selbst für eine 20-MB-Textdatei würde es im schlimmsten Fall nicht länger als ein paar Minuten dauern.
  2. Wenn Sie eine Reihe von Eingaben haben und für jeden von ihnen alle Wörter in einer 20MB-Datei einscannen, ist es möglicherweise besser, die 20MB-Datei zu sortieren / zu indizieren, um das Auffinden von Übereinstimmungen zu erleichtern und die 99 zu überspringen % unnötiger Vergleiche. Wenn Inputs dazu neigen, sich selbst zu wiederholen, kann es sinnvoll sein, Caching zu verwenden.

Je nach Problem können auch andere Lösungen relevant sein.

Aber wenn Sie es nur zum Vergleich der ersten drei Zeichen von zwei Strings verwenden, glaube ich, dass die Code-Schnipsel, die hier gegeben werden, so gut sind, wie Sie bekommen werden - sie sind alle O (1) *, also keine drastische Optimierung, die Sie tun können.

* Die einzige Stelle, an der dies nicht gilt, ist, wenn die Länge des Strings O (n) und nicht O (1) ist (was für die Strlen-Funktion in C ++ der Fall ist), was nicht der Fall ist für Java und C # String-Objekte.

    
Hershi 14.02.2010 16:30
quelle

Tags und Links