Как найти наиболее оптимизированную последовательность операторов if? - PullRequest
0 голосов
/ 14 февраля 2019

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

Каждый случай имеет разную временную сложность и вызывается разное количество раз.Например, case1 может быть Θ(n^2) против case3 из Θ(log(n)), но второй останавливает функцию раньше, поэтому может быть лучше поместить ее первой.

Как бы я поступилнайти наиболее эффективный способ заказа операторов if?

def function1():   
    if case1:
        return False
    if case2:
        return False
    if case3:
        return False
    # caseN...

    return True

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

Чтобы принять обоснованное проектное решение, вам нужно определить свою цель:

  1. Если функция должна возвращаться как можно быстрее, тогда, вероятно, самый быстрый случай должен идти первым.
  2. Но если вы хотите, чтобы функция в среднем быстро возвращала все входные данные, вам, вероятно, нужно знать, какой случай более вероятен для ваших входных данных;В случае, когда вы ожидаете, что большинство входных данных попадет в него, скорее всего, это должно быть первым.Таким образом, среднее время выполнения функции может быть сокращено.

Но для принятия наилучшего решения вам необходимо учитывать множество факторов:

  • типваши данные (наборы, списки, строки, ...)
  • размер ввода и сколько раз будет вызываться функция
  • операции, которые выполняются в каждом случае (верно?поиск, некоторые тяжелые вычисления, простая арифметическая операция, ...)
  • исследуйте возможность включения в ваши случаи как можно большего количества условий короткого замыкания, чтобы они рано вышли из строя

Если выЕсли вам нужна дополнительная помощь, тогда вы должны получить более конкретную информацию по вашему вопросу.

0 голосов
/ 14 февраля 2019

Какова ваша цель?Это сокращение среднего времени, времени наихудшего случая или какой-то другой меры?

Минимальное среднее время: если у вас есть статистическая информация о необходимом времени для каждого случая, его относительной вероятности и времени дляНе удовлетворяющее условие if, вы можете вычислить ожидаемое значение для каждой последовательности предложений if и выбрать лучший.

(Если применимо, избегая последовательности предложений if - как это сделали Остин и Шадаб Ахмедуже предложено - будет хорошей идеей.)

0 голосов
/ 14 февраля 2019

Попробуйте приведенный ниже код, если вы хотите что-то вроде switch

def f(x):
return {
    'a': 1,
    'b': 2,
}[x]

Если вы хотите выполнить все, если условия, то вы можете попробовать запустить функции параллельно, и сложность наихудшего времени будет максимальной из всехфункции.пример параллельного запуска функций Python: как запустить параллельные функции Python?

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