|
|
|
проверка входа по правилам. формирование выхода. АЛГОРИТМ нужен
|
|||
|---|---|---|---|
|
#18+
Вообщем в лоб то я решу задачу, но хочеться производительное решение...наиболее красивое. значит мы получаем на вход набор данных IN={a1,a2,a3....an} N фиксировано, {a1}(-A1; {a2}(-A2.....{an}(-An притом входные данные не обязательно содержат по одному елементу из каждого множества Ai, может быть вход ваще пустое множество, или скажем токо один елемент из A2. НО не может в одной входной порции быть несколько елементов из одного множества Ai Сами множества Ai - мы не знаем их полный набор елементов. Есть правила соответсвия входного набора какимто критериям и результат по этому правилу. например if a1==10 && a2=='one' then b0='main' b1='something' b2=a6 b3=a1+a11*a3 тоесть если во входных данных есть а1 и он равен 10, есть а2 и равен 'one' то срабатывает правило и выход будет OUT={b1,b2,.....bm} -аналогично не все Б обязаны быть, но сдесь м не фиксировано, тоесть может на данный момент у нас правило выдающее максимально большой ответ выдаёт по елементу из 100 множеств, а завтра появиться правило выдающее 110 елементов. Также ответов может быть несколько в одном правиле. скажем b0='main' b1=100 b2=a2 b0='main' b1=200 b2=a2+a3 Итак нам надо, получив входной набор 1)найти все подходящие правила - подойти может тьма тьмущая правил. 2)получить предполагаемые ответы по каждому правило отфильтровать лишнее. Правила для второго этапа. у каждого множества Ai i=1,n есть свой вес - Mi при прочих равных условиях из двух подошедших правил нужно взять то, у которого сумма весов множеств, которые учавствовали в условии наибольшая. тоесть если M1=10 M2=2 M3=5 if a1=10 && m3=5 then.... if a2=20 && m3=5 then ... . то правило первое более важное. дальше. ответы не должны дублировать себя по ключевым параметрам. скажем ключевыми есть b0 b10 соответсвенно не может быть два разных ответа, где заданы эти елементы тоесть если правило первое(см выше) дало ответ b0=main b10=a7 b12=100 второе b0=help b10=123 b11=11 то отот ответ не нужен, так как уже есть ответ от более важного правила, где задействованы b0 b10 тоесть дефакто берём все ответы всех правил и располагаем по очереди...впереди идут ответы более важного совпавшего правила, начиная с более важного ответа данного правила(правило может давать несколько ответов) потом идём по списку и отсеиваем те ответы, в которых задан тот же набор ключевых полей, что уже встречался в одном из ответов выше. ВАЖНО - речь не идёт о значениях этих ключевых полей, речь идёт о их наличии. также если кличевыми полями есть b1 b2 b3 b4 b5 b6 то ответы где есть b1 b2 b100.... b2 b3 b102.... b3 b10,b123.... b1 b2 b5 b111....- все нужны -- у них нету дублей в наборе ключевых полей а вот ответ b3 b110 уже не нужен, так как выше есть овтет с набором ключевых полей {b3} Нащот хранения этих правил - тоже уместен вопрос как хранить. если в файле то какая структура данных. есть вомзожность и в БД если так будет быстрее. ну пример выдуманый но для ясности 1)если сантехник и мущина - выдать колбасы(еда) 100гр, и водки(напиток)=вес человека/100 (л) - лопату(инструмент).и хлеба(еда) - одна булка 2) если сантехник то выдать гаечный ключ(интрумент) и сыр(еда) 3)если женщина - выдать цветок(подарок) и шеколадки(еда) = кол-во её детей (шт) ...... ключевыми значиниями в ответе есть хавка и напиток. професия ----вес 20, пол вес --- -30 поэтому для мущины сантехника будет второе правило более приоритетным, так как для первого вес -10 а второго 20. получит сыр и ключ, а по первому получит колбасу и водку (ведь не совпал набор ключевых значений - в первом ответе только еда, во втором и еда и напиток.) женщина сантехник, получит только ключ и сыр, 3 правило даёт ответ с тем же набором ключевых полей ответа - только еда. понимаю что кажеться запутано... смысл в чом. 1)иметь набор правил, по которым получаем на каждый вход ответы(одна правило возможно содержит несколько ответов) 2)при добавлении правила акцентирующего внимание на проверку более важных значений входа, его ответы должны получать более высокий приоритет. 3)в качестве ответа нам нужен весь масив ответов, но чтоб не было конфликтов - ключевые поля ответа, это собствено те елементы которые не могут иметь несколько значений. ну например для автомобиля нельзя руль повернуть и в влево и вправо одновременно, но можно посадить в салон, и катю, и лену и петю одновременно. было правило - разрешить отправку почты, если пользователь из групы админов. потом надо отдельно для юзера вася запретить. вес юзера больше чем групы, соответсвенно добавленное правило более важное. разрещение почты - одно из ключевых полей. так как оба ответа(по обоим правилам) содержат токо одно выходное значение - разрешение поты, это дубли...берём ответ более важного правила (второго) ЭХ. надеюсь ктото подскажет как это лучше организовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2012, 22:35 |
|
||
|
проверка входа по правилам. формирование выхода. АЛГОРИТМ нужен
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, посмотри тут . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2012, 12:23 |
|
||
|
проверка входа по правилам. формирование выхода. АЛГОРИТМ нужен
|
|||
|---|---|---|---|
|
#18+
Это машина логического вывода. Возможно, стоит подумать над тем, чтобы использовать уже существующую. Если хочется писать свою - гуглить по словам "алгоритм сопоставления с образцом", "алгоритм унификации". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2012, 12:47 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=62&tid=1342033]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 248ms |
| total: | 409ms |

| 0 / 0 |
