Как я могу распараллелить функцию с вложенным l oop и условным оператором? - PullRequest
0 голосов
/ 12 апреля 2020

Ниже используется для вычисления энтропии последовательности. Можно ли распараллелить функцию?

def get_lempel_ziv_entropy(message: str) -> float:
         i, lib = 1, [message[0]]
        while i < len(message):
           for j in range(i, len(message)):
             message_ = message[i:j + 1]
             if message_ not in lib:
                lib.append(message_)
                break
        i = j + 1
     return len(lib) / len(message)

1 Ответ

0 голосов
/ 12 апреля 2020

Я не думаю, что практично распараллеливать эту функцию.

Внешний l oop нельзя распараллелить, поскольку каждая итерация зависит от значения lib, подготовленного предыдущей итерацией.

Внутренняя l oop может быть распараллелена, но накладные расходы, вероятно, превысят потенциальное ускорение. (Запуск и присоединение к потоку не происходит бесплатно, и все потоки борются за доступ к изменяемому словарю.)

...