2016-07-12 19 views
0

Angenommen, zu berechnen, dass ich einen Datensatz mit Zahlen haben (Start, Stopp):Ich brauche den Bereich der max überlappende Vorkommen nicht die maximale Anzahl von ihnen

4556745 , 4556749 
4556749 , 5078554 

... und so weiter

I möchte einen Codeblock erstellen, um den Bereich (Start, Stopp) zu drucken, in dem die maximale Überlappung aufgetreten ist. Bis jetzt habe ich es geschafft, die maximale Anzahl der Ereignisse zu berechnen, aber nicht den Bereich, in dem sie sich befinden

Meine Pseudo-Code - Logik ist wie folgt:.

maxoverlap = zero 
currentoverlap = zero 
i equals zero 
j equals zero 
m equals len(in_mumbers) 
n equals len(out_numbers) 
while (I less_than m and j less_than n): 
    if (in_numbers[i] less_than out_numbers[j]) 
     currentoverlap equals currentoverlap + 1 
     maxoverlap equals max(maxoverlap, currentoverlap) 
     i equals i + 1 
    else: 
     currentoverlap equals currentoverlap - 1 
     j = j + 1 


print maxoverlap 

ist es eine Idee, vorgeschlagen Lesungen usw. ?

+0

Haben Sie versucht, dies in Python zu implementieren? Funktioniert es? –

+0

Ich verstehe nicht, über welche Überlappungen wir sprechen, da es im obigen Beispiel keine gibt. Der Stopp der Linie "i" sollte größer als der Anfang der Linie "i + 1" sein, um eine Überlappung zu haben. Sie sind hier gleich. –

+0

@Ev. Kounis Es war ein Schreibfehler, danke. –

Antwort

0

Der maximale Überlappungsbereich ist vielleicht (quase sicher) nicht ein ganzes Tupel (Start, Stop) der Eingabedaten.

Also würde ich Sie alle Tupel-Transformation (Start, Stopp) im Bereich all den Bereich zwischen Start enthält und stoppen:

(4556745, 4556749) → range(4556745, 4556749) 

und dann werde ich verarbeiten sie das Auftreten von jeder Zahl zu zählen (in einem Diktat zum Beispiel).

for range in ranges: 
    for number in range: 
     d.setdefault(num, 0) 
     d[num]+=1 

dann können Sie bekommen, was immer Sie wollen. Um die maximal auftretenden Zahlen (was Sie "maximale Schnittmenge" nennen) und die Anzahl der betroffenen Kreuzungen zu erhalten, können Sie etwas wie get keys by maximum value verwenden.

+0

Sehr hilfreiche Gedanken, ich werde versuchen, dies zu implementieren. –