Aggregieren von Tally-Zählern

7

Ich finde oft, dass ich Vorkommen mit Tally[ ] zähle und dann, wenn ich die ursprüngliche Liste verworfen habe, die Ergebnisse einer anderen Liste hinzufügen (und beitreten) muss.

Dies passiert normalerweise, wenn ich Konfigurationen, Vorkommen zähle, diskrete Statistiken mache usw.

Also habe ich eine sehr einfache, aber praktische Funktion für die Tally-Aggregation definiert:

%Vor%

So dass

%Vor%

Diese Funktion hat zwei Probleme:

1) Leistung

%Vor%

2) Es bestätigt nicht, dass das letzte Argument eine echte Tallied-Liste oder null ist (weniger wichtig für mich)

Gibt es eine einfache, elegante, schnellere und effektivere Lösung? (Ich verstehe, dass dies zu viele Anforderungen sind, aber Wunsch ist frei)

    
Dr. belisarius 28.02.2011, 14:57
quelle

4 Antworten

9

Vielleicht wird dies Ihren Bedürfnissen entsprechen?

%Vor%

Die Zeiten sind viel besser und es gibt eine musterbasierte Überprüfung des letzten Arguments.

BEARBEITEN:

Hier ist eine schnellere Version:

%Vor%

Die Zeiten dafür:

%Vor%     
Leonid Shifrin 28.02.2011, 15:41
quelle
5

Die folgende Lösung ist nur eine kleine Änderung Ihrer ursprünglichen Funktion. Er wendet Sort vor der Verwendung von ReplaceRepeated an und kann daher ein weniger allgemeines Ersetzungsmuster verwenden, das es viel schneller macht:

%Vor%     
sakra 28.02.2011 16:33
quelle
4

Hier ist das Schnellste, was ich bisher herausgefunden habe: (ab) Verwenden des Tags, das mit Sow und Reap verfügbar ist:

%Vor%

Ich werde keine Schönheitswettbewerbe gewinnen, aber es geht nur um Geschwindigkeit, oder? =)

    
Michael Pilat 28.02.2011 15:46
quelle
2

Wenn du rein symbolisch bleibst, kannst du etwas nach dem Motto

probieren %Vor%

zum Hinzufügen von Listen. Das ist blöd schnell, gibt aber etwas zurück, das keine Tally-Liste ist, also braucht es etwas Arbeit (danach ist es vielleicht nicht mehr so ​​schnell;)).

EDIT: Also ich habe eine funktionierende Version:

%Vor%

Mit ein paar zufälligen symbolischen Tabellen bekomme ich

%Vor%

Diese Version fügt nur Tally-Listen hinzu, prüft nichts, gibt noch einige Ganzzahlen zurück und vergleicht sie mit Leonids Funktion:

%Vor%

es ist schon ein paar Sekunden langsamer: - (.

Oh, gut, versuchen Sie es.

    
Timo 28.02.2011 15:36
quelle

Tags und Links