2016-07-12 2 views
0

Предположим, что у меня есть набор данных с номерами (старт, стоп):мне нужно рассчитать диапазон макс перекрывающихся появлений не максимальное их число

4556745 , 4556749 
4556749 , 5078554 

... и так далее

I хотите сделать кусок кода для печати диапазона (начало, останов), в котором происходит максимальное перекрытие. До сих пор мне удалось вычислить максимальное число появлений, но не диапазон, в котором они находятся в

Моя псевдокод - логика такова:.

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

Вы пытались реализовать это в Python? Это работает? –

+0

Я не понимаю, о чем мы говорим, поскольку в наборе данных образца выше нет. Стоп строки 'i' должен быть больше, чем начало строки' i + 1' для перекрытия. Они здесь равны. –

+0

@ Ev. Kounis Это была ошибка, связанная с ошибкой. –

ответ

0

Максимальный перекрывающийся диапазон, возможно (quase обязательно) не полный набор (начало, останов) входных данных.

Так что я бы превратить вас весь ваш кортеж (старт, стоп) в диапазоне, содержащий весь диапазон между начальным и конечным:

(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

Очень полезные мысли я постараюсь реализовать это. –