Ich habe zwei sehr große Saiten. Wie kann ich sie vergleichen, um festzustellen, ob sie identisch sind oder ob sich eine von der anderen unterscheidet? (Auf diese Weise kann ich die identischen Strings alleine lassen und die ändern, die sich geändert haben).Wie kann man am effizientesten prüfen, ob zwei Strings unterschiedlich sind?
Antwort
Sie könnten Hashwerte vergleichen oder eine Wrapper-Klasse erstellen, die die fragliche Zeichenfolge und ein "geändert" -Flag enthält, das bei jeder Änderung der Zeichenfolge auf true
gesetzt wird.
Der effizienteste Weg ist zu tun:
$string1 == $string2
Es macht einen bitweise Vergleich der Saiten, so sollte im schlimmsten FallO(n)
wo n
ist die Größe des kleineren String sein. Ich glaube nicht, dass du viel besser als das werden wirst (ohne die Strings zu verfolgen und wenn sie geändert wurden, aber so wie deine Frage formuliert ist, scheint es, dass du alles nur vergleichen willst).
Ich würde sogar annehmen, dass ich keine Bytes (nicht Bits!) Überhaupt vergleichen werde, wenn die Länge unterschiedlich ist. Nicht möglich in C mit 0-terminierten 'char'-Arrays, aber perfekt möglich in jeder anderen Sprache :) – delnan
@delnan: Es verwendet die [' memcmp() '] (http://www.cprogramming.com/fod/ memcmp.html) C-Funktion (Siehe 'zend_binary_strcmp' in [der Quelle] (http://svn.php.net/repository/php/php-src/branches/PHP_5_3/Zend/zend_operators.c)). – ircmaxell
- 1. Wie gruppiert man diese Produkte am effizientesten?
- 2. DynamoDB am effizientesten Datumstyp
- 3. Wie kann man am effizientesten mit Entfernungen zwischen zwei Koordinaten arbeiten?
- 4. Wie überprüft man, ob zwei Wörter Anagramme sind Python
- 5. Wie kann man am besten prüfen, ob der Benutzer Dateien hochladen kann?
- 6. Wie kann man feststellen, ob zwei Knoten verbunden sind?
- 7. Prüfen, ob Variablen gesetzt sind
- 8. Am effizientesten Blase Art Mechanismus
- 9. Wie kann ich am besten prüfen, ob A xor B null sind?
- 10. Wie überprüft man, ob zwei Knoten verbunden sind?
- 11. Wie kann ich am besten prüfen, ob zwei ungeordnete Paare übereinstimmen?
- 12. Welche Serverseite ist am effizientesten mit Sockets?
- 13. Scheck zwei Zeitstempel sind am selben Tag
- 14. Am effizientesten Javascript/AJAX-Toolkit?
- 15. Am effizientesten php wenn Struktur
- 16. Wie können Dreieck-Dreieck-Schnittpunkte am effizientesten erkannt werden?
- 17. Prüfen, ob 2 Datenbanken vorhanden sind
- 18. Wie kann dieser Code am effizientesten ausgeführt werden?
- 19. Wie kann ein NSSet am effizientesten sortiert werden?
- 20. Wie kann ich eine Sitzungsvariable am effizientesten abmelden?
- 21. Wie ermittelt man, ob Strings in Objective C gleich sind?
- 22. Was überprüft die Funktion, um zu prüfen, ob zwei Objekte verschieden sind?
- 23. Wie kann ich prüfen, ob zwei Werte in C# gleich sind? (Bei jeder Art von Wert)
- 24. Wie man überprüft, ob zwei NSDates vom selben Tag sind
- 25. Android: Prüfen, ob Kopfhörer eingesteckt sind
- 26. Wie kann man auf Gleichheit prüfen?
- 27. Am effizientesten JSON in C# zu analysieren
- 28. Strings enthalten die gleichen Zeichen, aber sind immer noch unterschiedlich
- 29. Wie kann man wissen, ob eine Zeichenfolge in zwei Strings segmentiert werden kann
- 30. In Typoskript, Wie kann man prüfen, ob ein String Numeric
Richtig, aber um Hashwerte zu vergleichen, müssen Sie jede Zeichenfolge vollständig durchlaufen, um den Hash zu generieren, und dann den Hashwert durchlaufen. Daher ist es bei BEST "O (m + n + 1)" und im schlimmsten Fall "O (m + n + c)" (wobei "m" die Länge einer Zeichenfolge ist, "n" die Länge der anderen und 'c' ist die Hash-Länge) ... Und das ist sogar das Ignorieren der Komplexität der Hash-Funktion ... Definitiv nicht der effizienteste Weg, es sei denn, Sie speichern bereits den Hash. – ircmaxell
Das ist, was ich meinte: Berechnen und speichern Sie den Hash, wenn eine Zeichenfolge geschrieben wird, nicht im Vergleich. – weltraumpirat