Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выводы на основе правил 
:(
    Опции темы
cru3l
Дата 25.1.2010, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.8.2008

Репутация: нет
Всего: нет



Допустим мы ввели такой набор каких-то абстрактных правил (форма записи "если A и B то C"

A&B -> C
D -> E
C&E->G

потом на основе входной строки программа должна составить вывод на основе этих правил.
К примеру если входная строка была

"A&B". Программа должна выдать - "C"
а если ввели например
"A&B&E" программа должна выдать - "G" (потому как A&B это C, а C&E- это G)

расскажите алгоритм хотя бы на словах, в виде схемы/кода вообще было бы замечательно
Спасибо!
PM MAIL   Вверх
DarkProg
Дата 25.1.2010, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: нет
Всего: 19



Ну в чём проблема??? Вроде сам алгоритм рассказал???

Ты считываешь строку, потом разбиваешь её на отдельные символы, символы которые стоят между знаками, ты записываешь куда-то в какую-то переменную(сам придумай) а знак ты записываешь в другую переменную(лучше какую-то структуру со множеством полей) и там же указываешь ссылку между какими переменными

Потом ты пишешь алгоритм обработки слево направо по паре знаков, делая соответствующие замены

Вообщем начни хоть что-то пытаться делать, а там станет понятнее что тебе уже конкретно нужно будет(мне начинание хоть с чего-нить помогает).

Это сообщение отредактировал(а) DarkProg - 25.1.2010, 20:01


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
_Y_
Дата 26.1.2010, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Как понимаю, это вариант стандартной задачи парсинга математического (булева арифметика) выражения, записанного в виде текстовой строки. Задача эта много раз обсуждалась и даже здесь. Я даже где-то встречал библиотеки ее рашающие и красивые описания алгоритмов - но где - не помню.

Сам я ее решал лет 15 назад (парсинг булевой строки любой сложности со скобками и т.п.). Если нужно, могу найти старый код на VB. Но в обьектном языке такую задачу решать приятнее.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
AVA12
Дата 26.1.2010, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 4.5.2008

Репутация: 1
Всего: 4



Заводим ассоциативный массив, в котором ключом является первый символ левой части правила, а значением - массив ссылок на правила, начинающиеся с этого символа. Затем просматриваем строку слева направо по одному символу и ищем, есть ли такой ключ в массиве. Если есть, то перебираем все правила, начинающиеся с этого символа и проверяем, совпадают ли следующие символы строки с левой частью правила. Если совпадения найдены, то выбираем самое длинное из подходящих правил, заменяем кусок строки на правую часть правила, возвращаемся в начало строки. Если же совпадения не найдены, то переходим к следующему символу строки. Повторяем до тех пор, пока не просмотрим всю строку.

Этот алгоритм далеко не оптимален, но зато прост в реализации. Для ускорения работы на длинных строках можно запомнить максимальную длину (L) левой части правила и после замены переходить не к началу строки, а на (L-1) символов назад.
PM ICQ Jabber   Вверх
esperanto
Дата 29.1.2010, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 31.5.2003

Репутация: 2
Всего: 4



Вопросы

 однозначна ли грамматика?
Существуют ли правила укорачивающие длину строки?



--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0672 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.