Häufige Sequenz von Zahlen in einem Array finden

7

Array (3, 5, 1, 3, 5, 48, 4, 7, 13, 55, 65, 4, 7, 13, 32)

Die häufige Folge von Zahlen ist (3, 5) f=2 + (4, 7, 13) f=2

irgendeinen Algorithmus oder Pseudocode, um das zu finden?

Aktualisierung (1):

Wenn (7, 13) auch das Vorkommen ist, wird es in das längste eingefügt, indem seine Häufigkeit aktualisiert wird, also

(4, 7, 13) f=3 und so weiter ...

Aktualisierung (2):

im Fall von (1,2,3,4,1,2,3,4,1,2,7,8,7,8,3,4,3,4,1,2) sollte die Ausgabe (1,2,3,4) & amp; (3,4,1,2)

& amp; (7,8) , um klarzustellen, dass jede Zahl ein Wort ist und Sie die häufigsten Ausdrücke finden möchten

Es ist also üblich, dieselben Wörter in vielen Phrasen zu sehen, aber wenn eine Phrase eine Unterzeichenfolge für andere

ist

Phrase (n) sollten nicht als Phrase betrachtet werden, sondern aktualisieren die Häufigkeit jeder Phrase einschließlich

    
D3VELOPER 18.08.2010, 06:21
quelle

3 Antworten

7

** EDIT **: etwas bessere Implementierung, gibt nun auch Frequenzen zurück und hat einen besseren Sequenzfilter.

%Vor%

Testfall

%Vor%

** BEARBEITEN **: Hier ist ein Update für die Funktion. Es wurde fast komplett neu geschrieben ... sag mir, ob das das ist, wonach du gesucht hast. Ich fügte auch eine Redundanzprüfung hinzu, um zu verhindern, dass die gleiche Sequenz oder Untersequenz zweimal gezählt wird.

%Vor%     
Yanick Rochon 18.08.2010, 06:59
quelle
1

In Python3

%Vor%

Müssen Sie die (7,13) und die (4,7) ausfiltern? Was passiert, wenn in der Sequenz auch (99, 7, 14) vorkommt?

a Counter ist genau wie ein Hash, der verwendet wird, um zu verfolgen, wie oft wir jede Teilzeichenfolge sehen Die beiden verschachtelten for-Schleifen erzeugen alle Teilstrings von T , wobei count_hash verwendet wird, um die Anzahl jedes Teilstrings zu akkumulieren.
Die final for-Schleife filtert alle Teilstrings, die nur einmal vorkamen

Hier ist eine Version mit einem Filter

%Vor%

Die Ausgabe ist

%Vor%

Deshalb habe ich gefragt, wie die Filterung für die Sequenz funktionieren soll, die ich in den Kommentaren angegeben habe

    
John La Rooy 18.08.2010 06:36
quelle
0

Ok, nur um die Diskussion zu beginnen.

  1. Erstellen Sie ein anderes Array / eine andere Map, rufen Sie dieses auf Gewichtungs-Array.
  2. Beginnen Sie mit der Iteration des values-Arrays.
  3. Für jeden Wert in     Werte Array, inkrementiere die     entsprechende Position in der Gewichtung     Array. ZB: für 3 erhöhen     Gewichtung [3] ++, für 48     Gewichtung [48] ++.
  4. Nach der Iteration enthält das Gewichtungs-Array Wiederholungen
questzen 18.08.2010 06:41
quelle

Tags und Links