powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Оптимальный алгоритм если очень много условий в программе.
6 сообщений из 6, страница 1 из 1
Оптимальный алгоритм если очень много условий в программе.
    #38868985
Рабинович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, господа. У меня немного странная проблема.
Сейчас работаю над одним проектом в котором нужно проверять одновременное выполнение большого количества простых линейных выражений.
К примеру

if ((a+b==c)&&(5d==3с) &&(8k/5>10)...) {
...
}
else {
...
}

Проблема что таких условий может быть около 500-700 штук.
Свести логику программы к меньшему их числу мало вероятно из-за специфики предметной области.

Вопрос, как оптимально (с точки зрения производительности и читаемости кода) реализовать проверку такого количества условий?
Спасибо за помощь.
...
Рейтинг: 0 / 0
Оптимальный алгоритм если очень много условий в программе.
    #38868992
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рабинович,

По скорости. расположить утверждения по возрастанию вероятности невыполнения. Не сомневаюсь, что часть утверждений/неравенств/ условий можно усилить. Прикрепляйте файл с условиями.

По реализации. Создать структуру условие. Далее массив всех структур. И цикл с проверкой выполнения каждого.

Производительность и читабельность чаще всего несовместимы.


PS
А язык на котором вы программируете поддерживает столько условий в операторе if() ? А если не секрет для чего такое большое число условий ?
...
Рейтинг: 0 / 0
Оптимальный алгоритм если очень много условий в программе.
    #38869001
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оптимально...
Ну я бы начал с того чтобы убедиться а действительно ли надо такое большое количество условий? Не очень верится что это действительно так надо.

Но если действительно.... Ну можно начать с упрощения условий и сведения их в какую-нибудь таблицу для хэш функции. Почитай вот тут: http://www.sql.ru/forum/1134172/tyapnichnyy-koi-8r Может чего и найдешь.

А если условия действительно типа "(a+b==c)&&(5d==3с) &&(8k/5>10)" то можно использовать чуть более сложный подход: сделать себе авто-генератор исходного текста. То есть ты будешь вручную писать список условий и какую функцию на это условие запустить. Например так:
Код: plaintext
1.
2.
(a+b==c)&&(5d==3с) &&(8k/5>10) : foo1();
(a+b>c) : foo2();

А генератор потом возьмет эти строки, отсортирует условия в порядке упрощения, выругается если два условия конфликтуют, и выдаст уже код готовый к компиляции.
...
Рейтинг: 0 / 0
Оптимальный алгоритм если очень много условий в программе.
    #38869117
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рабинович,

А группировать эти условия никак нельзя?

if ЭтоСобака() then...




sub ЭтоСобака {

res = ВыглядитКакСобака && ЛаетКакСобака && КусаетсяКакСобака

}
...
Рейтинг: 0 / 0
Оптимальный алгоритм если очень много условий в программе.
    #38869704
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РабиновичВопрос, как оптимально (с точки зрения производительности и читаемости кода) реализовать проверку такого количества условий?
Во-первых, это часто противоречащие друг другу вещи, так что придётся выбирать.

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

Код: sql
1.
2.
3.
4.
5.
6.
  bool isManager = ....
  bool isClerk = ....
  bool isBigSalary = ....
  bool isVeteran = ....
  ...
  if (isManager && isVeteran && !isBigSalary) printf("Круто!");



С точки зрения производительности следует минимизировать ненужные операции (в частности, выносить часто срабатывающие условия до редко срабатывающих), исключить дублирование (если что-то уже вычислено, использовать это, а не считать повторно), использовать индексные операции (чтение из массива, switch) там, где ими можно заменить if.
...
Рейтинг: 0 / 0
Оптимальный алгоритм если очень много условий в программе.
    #38869748
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рабинович, эффект оптимизаци данного ПО будет сильно зависеть от
самой выборки входных данных. Лучше всего пару раз протрассировать
выборку данных с выводом в таблицу где колонками будут во первых
аргументы a,b,c,... и во вторых предикаты в скобках (p1,p2,p3...).
Некоторые из элементов будут часто (почти тождественно) равны
false, некоторые true, некоторые будут сильно зависеть друг от друга.
На основании этой таблицы можно стоить гипотезы.

А так, оптимизировать вобщем - бесполезно. Сейчас почти нет оснований
улучшать этот код пока мы не увидим его в работе с живыми данными.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Оптимальный алгоритм если очень много условий в программе.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]