Как оптимизировать if-операторы в Python: во-первых, более вероятный случай или более дорогой? - PullRequest
0 голосов
/ 11 июня 2019

В настоящее время я оптимизирую код моей игры-пигмея, и теперь я играю с оптимизацией if-Statements.Существует много циклов, поэтому операторы if требуют вычислительной мощности из-за дорогих функций.Теперь я хочу выяснить, как писать более эффективные утверждения (например, исходя из того, насколько вероятны или насколько дороги условия).

Пример:

if prim(num) or num = 5:
   dostuff()

или

if num = 5 or prim(num):
   dostuff()

, где prim () - пример более дорогой функции, которая с большей вероятностью оценивается как False.«num = 5» - это условие, которое не так дорого, но вряд ли может быть оценено как True.

Мой вопрос: какой из примеров лучше, и есть ли другие возможности для улучшения if-утверждений (для исполнения)?

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Вы можете собирать данные о нескольких прогонах и оценивать вероятность выполнения каждого условия, а также его среднее время выполнения.

Если у вас есть два условия c1 и c2, их вероятности истинности p1 и p2, а также их среднее время выполнения t1 и t2, то вы можете оценить среднее требуемое время для выполнения в зависимости от порядка оценки :

  • Сначала оценивается c1, затем c2: t1 + (1-p1) * t2
  • Сначала оценивается c2, затем c1: t2 + (1-p2) * t1

Тогда вы знаете, какой вариант в среднем быстрее.

0 голосов
/ 11 июня 2019

Прежде всего, если prim может быть False, то вы определенно хотите это как второе условие. Только в том случае, если оно может быть оценено как True, вы хотите, чтобы оно приводило к соединению or: результат False гарантирует, что вы должны оценить другое выражение.

Тем не менее, нет тривиального правила: вам нужно определить эффективное значение порядка: время, потраченное на каждую оценку, умножается на вероятность того, что она закоротит оценку, с учетом сэкономленного времени.

В этом случае num == 5 (обратите внимание на оператор сравнения, а не на присваивание) настолько дешев, что, скорее всего, он будет первым, который вам нужен. Это зависит от вероятности того, что это будет True, и относительной экономии времени при звонке prim.

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