Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Бредовая задача. Как формализовать и написать алгоритм?

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
grf



Зарегистрирован: 05.04.2005
Сообщения: 1242
Откуда: Москва

СообщениеДобавлено: Чт Май 25 2006 16:48    Заголовок сообщения: Бредовая задача. Как формализовать и написать алгоритм? Ответить с цитатой

Есть некая странная задача, для решения которой мне надо написать прогу. Пока я не могу ее даже формализовать и придумать алгоритм решения, если у кого то будут предложения, поделитесь.
Задача такая: Есть набор целых чисел. Для простоты объяснения ограничимся числами не более 10. Необходимо получить из набора преведущих чисел следующее, используя набор некоторой логики (не формальной логики, тут бы как раз проблем не возникло, а более человеческой). Поясню на примере
Пусть есть шесть чисел
7 1 5 3 8 8
С первым числом ничего не делаем.
далее как получить из семерки единицу, например так: семерка стоит на первом месте, то поэтому следующие число единица.
далее, как из 7 1 получить 5, например так перед нами два числа, поэтому из первого (7) вычесть два. как получить три, теперь перед нами три числа, значит следующее тройка. Как получить 8, сложить преведущих два числа, 5+3, как получить еще раз 8, раз преведущая 8, то и последующая 8.
Т.е здесь не столько логика, сколько некоторые "Левые отмазки", объясняющие появление следующего числа.

При этом возможны комбинации нескольких шагов, например
5 3 1 7
Как получит 7, например 5+3-1
При этом надо получать число за наименьшее количество шагов. Можно спокойно хаотично пользоваться математическими действиями, поряком числа количеством преведущих чисел, в общем любой доступной информацией которая есть в последовательности до определяемого числа, но использовать можно только числа, доступные нам с нашей логикой. Поясню, например есть последовательность чисел
1 3 9 2 9 5 8
как получиь восьмерку. Нельзя просто сказать у нас есть тройка и пятерка поэтому 5+3=8, надо обосновать почему мы воспользуемся именно тройкой, например так
а) начиная от последнего числа(последнее число 5, т.к 8 мы только собираемся получить, отсчитаем 5 позиций, это число 3.
б) 5+3=8
Еще одно важное дополнение, числа 5, 10, 50, 100, 500, 1000 и т. д. мы можем использовать в любой момент, для любых действий.
Результатом действия программы должен быть свод правил, по которым мы получили заданную поледовательность чисел, т.е на входе программы у нас будет, например разобранная мной последовательность
7 1 5 3 8 8
а результатом действия программы будет свод действий, объясняющих эту последовательность
Цитата:

С первым числом ничего не делаем.
далее как получить из семерки единицу, так: семерка стоит на первом месте, то поэтому следующие число единица.
далее, как из 7 1 получить 5, так перед нами два числа, поэтому из первого (7) вычесть два. как получить три, теперь перед нами три числа, значит следующее тройка. Как получить 8, сложить преведущих два числа, 5+3, как получить еще раз 8, раз преведущая 8, то и последующая 8.


Все бы ничего, я еще может быть как то и разрулил сам бы ситуацию, но проблемы идут при работе с большими числами и с большим набором чисел. Например как обяснить последовательность из 3 чисел.

1754897 356789 907867553

Из преведущего числа всегда можно получить последующее самым примитивным способом
а б
б=а/a+a/a+.....+a/a
поэтому важно получить действие с минимальным количеством шагов.

P.S. Сам понимаю бредовость задачи, но с чем в жизни не столкнешся.
Laughing
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Kefir



Зарегистрирован: 16.04.2005
Сообщения: 443
Откуда: Пермь

СообщениеДобавлено: Пт Май 26 2006 07:52    Заголовок сообщения: Ответить с цитатой

Вариант 1.

Пишем ЭС в которую пихаем все эти правила. А потом смотрим каким правилам удовлетворяет следующее число.

Вариант 2.

Задаем функцию, например полином от всех предыдущих чисел, разрешаем его относительно коэффициентов. А дальше пишем ЭС в которую забиваем все правила.... Можно ограничиться полиномом 1й степени, можно 2й. Короче, задача действительно бредовая и не такая простая как может показаться...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
grf



Зарегистрирован: 05.04.2005
Сообщения: 1242
Откуда: Москва

СообщениеДобавлено: Пт Май 26 2006 09:30    Заголовок сообщения: Ответить с цитатой

Спасибо, Kefir!

Что такое ЭС?

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

Вообще пока двигаюсь в таком направлении
1. Составить перечень всей информации, которую можно извлечь из абстрактной последовательности (число, его порядковый номер, количество чисел перед ним и пр.)
2. На основе полученной инфомации составить свод правил, по котором можно получить какое нибудь число
3. составить алгоритм получения чисел на основе свода правил, из преведущей последовательности.
4. Составить ограничения на применение этих правил, например число шагов не должно быть больше определяемого числа, т.к.
Цитата:

Из преведущего числа всегда можно получить последующее самым примитивным способом
а б
б=а/a+a/a+.....+a/a

5. перебор всех возможных комбинаций всех возможных сочетаний
правил нашего свода с учетом ограничений 4.
6. Выбор нужной комбинации
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Kefir



Зарегистрирован: 16.04.2005
Сообщения: 443
Откуда: Пермь

СообщениеДобавлено: Пт Май 26 2006 15:37    Заголовок сообщения: Ответить с цитатой

ЭС - экспертная система
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
grf



Зарегистрирован: 05.04.2005
Сообщения: 1242
Откуда: Москва

СообщениеДобавлено: Пн Май 29 2006 08:21    Заголовок сообщения: Ответить с цитатой

Спасибо!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...