2016-07-12 4 views
0

은 가정 최대 중복 차례 나오는 범위하지 말라고의 최대 수를 계산해야합니다 (시작, 중지) :가 나는 숫자 데이터 집합을 가지고

4556745 , 4556749 
4556749 , 5078554 

... 그래서 내가

에 최대 겹침이 발생하는 범위 (시작, 중지)를 인쇄하려면 코드 덩어리를 만들고 싶습니다. 어떤 아이디어가

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 

측정 등을 제안했다. 로직이 같다 - 은 지금까지 내가

내 의사들이에있는 사건의 최대 수 있지만 범위를 계산하기 위해 관리해야 ?

+0

이것을 파이썬으로 구현하려고 했습니까? 작동합니까? –

+0

위의 샘플 데이터 세트에서 우리가 이야기하고있는 중첩 부분이 무엇인지 이해하지 못합니다. 줄 'i'의 멈춤은 줄 'i + 1'의 시작보다 겹쳐져야합니다. 그들은 동등하다. –

+0

@Ev. Kounis 실수를 저질렀습니다. –

답변

0

최대 겹치는 범위는 입력 데이터의 전체 튜플 (시작, 정지)이 아닐 수도 있습니다. 각 번호의 발생을 계산

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

을하고 내가 그들을 처리 할 수 ​​있습니다 :

그래서 나는 시작과 정지 사이의 모든 범위를 포함하는 범위에서 당신에게 모든 튜플 (시작, 정지) 변환 것 (예를 들어 사전에).

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

그러면 원하는 것을 얻을 수 있습니다. 최대 발생 수 ("최대 교차점"이라고 부르는 것)와 해당 교차점 수를 얻으려면 get keys by maximum value과 같은 것을 사용할 수 있습니다.

+0

매우 유용한 생각을 나는 이것을 구현하려고합니다. –