Abderrahim Ben Ответов: 1

Ленивая оценка медленных булевых функций (оптимизация)


Оценка короткого замыкания я отметил, что два фактора могут быть полезны для упорядочения булевых функций для получения времени выполнения. Но это применимо в конкретной гипотезе:

Зная процент положительного (следовательно, отрицательного) результата функции. ниже приводится гипотеза, за которой следует пример.
Знание времени выполнения функции на данных (знание размера данных может быть подсказкой)
Мой случай легко понять, вот его описание:

Предположим, что F-это Булева функция, которая оценивает настроение и возвращает -1 или 1. Я сделал некоторые улучшения, чтобы предсказать оценки настроений на больших массивах текста, и я могу вычислить, насколько вероятно, что функция вернет 1 (вероятность в пределах допустимого диапазона ошибок), назовем ее P (f) = Pf (вероятность быть положительной)

У нас также есть оценка времени выполнения, поскольку данные, подлежащие анализу, поддаются измерению. назовем его T (f) = Tf определим скорость положительности следующим образом:

PS (f) =  Pf  / Tf

Пусть Lazy-функция, которая принимает логическое выражение и дает наилучший порядок функций для времени выполнения.

Lazy (and, f1, f2, …, fn) = and_Order (f1, f2, …, fn)

Где and_Order это восхождение скорости позитивности.

Lazy (or, f1, f2, …, fn) = or_Order(f1, f2, …, fn)

Где or_Order нисходящая, если положительная скорость.

Очевидно, что это оптимизация высокого уровня, а не задача компилятора. Является ли это устоявшимся исследованием? Как это практично в других случаях, кроме анализа настроений? Правильно ли PS (F) представляет то, что он должен представлять?

Редактировать в ответ на ppolymorphe ответить:
Цитата:
Цитата:
Прежде всего, логические значения равны 0 для False и 1 для True. В компьютерах используется использование 0 для False и не 0 для True.

Нет ничего, что удерживало бы использование логического типа для представления двух типов значений. Даже если в нем нет истинного смысла. В моем случае это так. Вот такой сценарий:
После мероприятия под названием "Неделя инноваций" мы хотим посмотреть, остались ли посетители довольны на многих уровнях: "организация", "субъекты", " предлагаемые решения"…

Предположим, что "организация", "субъекты", "предлагаемые решения" - это три темы, которые в наибольшей степени отражают реакцию людей (настроения) на событие "Недели инноваций". "Организация" и "субъекты" находятся на одном уровне, и одного достаточно, чтобы удовлетворить другого (логическое или), в то время как обе группы находятся на одном уровне при "предлагаемых решениях" (логическое и).

Возможно моделировании:

Sent ("Innovation week") = (Sent("organization") || Sent("subjects")) && Sent("proposed solutions")


Цитата:
Оценка короткого замыкания-это прямой предмет для ленивой оценки булевых выражений,



Куда послали-это функция полярных настроений (логическое)
Цитата:
Нет, это эффективный способ оценки булевых выражений.


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

- Это правда.
Но я буду оценивать выборку (скажем, 1/10 входного большого массива), поэтому я буду принимать диапазон ошибок. Вот почему
Цитата:
Где and_Order растет по скорости позитивности.

Где скорость положительности - это вероятность (основанная на выборке).

Спасибо.

Что я уже пробовал:

Это оптимизация, о которой я думал, но я не уверен ни в ее осуществимости, ни в правильности

Mehdi Gholam

Не тратьте свое время на оптимизацию заказа, вместо этого приложите усилия к оптимизации своих функций.

1 Ответов

Рейтинг:
1

Patrice T

Цитата:
Предположим, что F-это Булева функция, которая оценивает настроение и возвращает -1 или 1.

Прежде всего, логические значения равны 0 для False и 1 для True. В компьютерах используется использование 0 для False и не 0 для True.
Цитата:
Оценка короткого замыкания-это прямой предмет для ленивой оценки булевых выражений,

Нет, это эффективный способ оценки булевых выражений.
Цитата:
Пусть Lazy-функция, которая принимает логическое выражение и дает наилучший порядок функций для времени выполнения.

Оценка логической операции типа and и or между 2 логическими значениями проходит 1 такт процессора. Чтобы быть интересным, ваша переупорядоченность должна быть быстрее, к сожалению, это невозможно.
Переупорядочение во время выполнения подразумевает оценку всех ваших медленных функций перед переупорядочением, там нет никакой выгоды.
Единственное, что можно сделать, - это упорядочить ваши логические выражения перед сдачей исходного кода.