Algorithmus, um die Vereinigung mehrerer Zeichenfolgen nach Zeichenindex zu finden

8

Ich habe versucht, an eine leistungssparende Möglichkeit zu denken, die Vereinigung von Zeichenvorkommen in einem Satz von fixed width -Zeichenfolgen nach Index gruppiert zu finden. So etwas in der Art;

%Vor%

Daraus ergibt sich, dass jede Zifferngruppe in allen Zeichenfolgen im char index n vorhanden ist:

%Vor%

Ich habe daran gedacht, es auf sehr naive Art und Weise zu machen, jede Zeichenkette und jeden Index zu durchlaufen, während ich die Zwischenstrings in einem Array ablege und dann durch dieses Array iteriere, um den Ausgabewert zu erstellen. Mein Ansatz erscheint mir jedoch als sehr ineffizienter Weg, der viel zu weit von einer asymptotisch optimalen Lösung entfernt ist.

    
pondigi 13.02.2014, 21:23
quelle

1 Antwort

2

Wenn die Menge aller möglichen Zeichen im Voraus bekannt ist, sagen wir ihre Nummer ist n , wobei n nicht zu hoch ist (zB 10, wenn Sie nur Ziffern machen), können Sie dies tun, indem Sie Erstellen von m booleschen Arrays der Länge n , wobei m die Anzahl der Positionen oder Ziffern in den Eingabezeichenfolgen und n ist. Die n-te Position in der m-ten Matrix wird true sein, wenn das n-te Zeichen in irgendeiner der eingegebenen Zeichenfolgen in der m-ten Position vorhanden ist. False wird anzeigen, dass kein solches Zeichen zuvor in der m-ten Position war.

Dann können Sie über jeden String iterieren, und wenn Sie auf das Zeichen n in der Position m stoßen, markieren Sie true in der n-ten Position des m-ten Arrays. Am Ende haben Sie m -Arrays, die jeweils den Inhalt der m-ten Gruppe beschreiben

%Vor%

wird in

übersetzt %Vor%

Da es sich bei allen Strukturen um Direct-Access-Arrays handelt, ist kein Nachschlagen erforderlich, alle Zugriffe erfolgen in konstanter Zeit und Sie müssen nur jedes Zeichen einmal ohne Vergleich aufrufen. Hoffe, das hilft.

    
Warlord 13.02.2014, 21:48
quelle