Как сделать эффективную программу, которая тестирует очень большие объемы данных - PullRequest
0 голосов
/ 12 октября 2019

Мне нужно написать программу, которая принимает входные данные с единицами нули и пытается найти самый длинный последовательный ряд нулей, не прерываемый единицами. (Мне удалось закодировать эту часть). Проблема возникает, когда мне нужно найти в списке 1 и 0, какие 1 я мог бы заменить на 0, чтобы сделать серию последовательных 0 самой длинной с разрешенной заменой g.

У меня возникают проблемы с математической записью, котораябыло бы полезно перенести его в код. Я уже написал программу, которая находит самую длинную серию последовательных нулей, я просто не могу кодировать вторую часть;вот что я уже сделал.

# Get File Ready To Read
with open("/Users/yannkull/Desktop/marathon-sub3-attempt1.txt", "r") as f:
    current_line = f.readlines()


x = 2 
while x < 202:
    temp_list = []

    for a in current_line[x]:  # Format Line With Data
        if a != ' ':
            temp_list.append(a)
    temp_list.remove(temp_list[len(temp_list) - 1])

    k = int(current_line[x - 1])  # Recieve info line that tells us how many characters we have 

    a = 0
    sums = []
    while a < k:  # Find the longest consecutive series of zeroes in one line 

        somme = 0
        while temp_list[a] == '0':

            somme += 1
            a += 1

            if a == k:
                break

        sums.append(somme)  # Add the result to a list 
        a += 1

    print("Case #", int(x / 2 - 1), ": ", max(sums), sep='')  # Print the largest result for each case

    x += 2

Я просто не имею ни малейшего понятия, как реализовать поставленную мной проблему в моем коде, чтобы кто-нибудь мог бы дать мне несколько советов, которые были бы хороши. Я открыт для использования NumPy, я просто не знаю, как это было бы полезно в этой ситуации. Я просто не думаю, что мой компьютер справится с этим путем грубой силы.

1 Ответ

1 голос
/ 12 октября 2019

Вы можете упростить грубую силу, предполагая, что все замененные значения должны быть "последовательными":

Если вы пытаетесь заменить ровно два 0 на 1, чтобы получить самую длинную последовательность 1 в этомввод:

111010100101110

Скорее всего, вы будете тестировать:

111X1X100101110

(Xозначает, что вы пытаетесь заменить 0 на 1)

, но не

111X101001X1110

, так как нет смысла заменять 0, если все ещеМежду 0.

Это значительно уменьшает количество возможных замен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...