2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 8 ферзей, либиринт, backtracking
Сообщение27.01.2009, 00:36 


23/01/09
3
Уважаемые господа!

Я по складу ума - математик, а по образованию - экономист, но с недавних пор решил, что должен научиться программировать - это неотъемлемая часть моей будущей работы. Мой единственный опыт изучения языков программирования - это SQL. С недавних пор недолго думая среди многочисленных языков программирования для изучения я выбрал MatLab. Изучил синтаксис, порешал различные задачки. Но вот встретился с новым для себя типом задач, боюсь назвать этот тип как-то однозначно, но по-моему это динам-ое прогр-ие. Я уже нашел достаточно интересующих меня задач из этой области и во всех этих задачах для меня остается загадкой одно, пожалуй, самое интересное и важное место, это реализация процесса "путешествия" по "дереву", когда двигаешься по веточкам вглубь кроны и попадая в "тупик" приходится "отматывать" назад шаги и выбирать новое направление движения. Как мне кажется, с алгоритмами у меня проблем нет, я их сам придумываю и понимаю. Проблема в том, что я не знаю, как реализовать в плане синтаксиса такое "путешествие" по дереву...
Яркими примерами задач из данной области могут служить задачи о 8 ферзях или о лабиринте.
[8 ферзей: Расставить 8 ферзей на шах. доске так, чтоб они друг друга не били.
Лабиринт: обычный лабиринт с какого-нибудь детского журнала - надо найти выход]
Например, в задаче о 8 ферзях путешествие реализуется таким образом. 1-ого ферзя ставим в некоторую заранее определенную клетку на первой горизонтали. 2-ого ставим на второй горизонтали на самой левой клетке, что "свободна" (то есть, не под боем). 3-ого ставим на третьей горизонтали на самой левой клетке, что "свободна". И т.д.. Таким образом как бы тяготеем все время влево. Например, 7-ого ферзя оказалось негде ставить. Тогда наша программа должна отмотать на шаг назад и переставить 6-ого ферзя на следующую допустимую "свободную" клетку, а, если такой клетки не найдется, то сделать еще шаг назад и переставить 5-ого и т.д.
Например, в лабиринте мы начинаем с входа в него и из всех допустимых вариантов выбора направления движения выбираем самый левый. Если на каком-то шаге попали в тупик, то возвращаемся назад и выбираем другой самый левый вариант из оставшихся (то есть, кроме уже этого рокового) и идем дальше, а, если такового нет, то отматываем еще на шаг назад и т.д. И так пока не выходим из лабиринта или расставляем ферзей. При этом устроит хотя бы один вариант расстановки и выхода из лабиринта.
Проблема в том, что я не знаю какие команды использовать в MatLab для реализации такого "гуляния" по дереву. Если это все можно реализовать только при помощи
If, else, wfile, for, при помощи создания функций, рекурсий и т.д. то я сам, возможно, придумаю, просто дайте, пожалуйста, это знать. Если этих операторов мало, то скажите какие мне изучить еще. Например, я не имею нормального представления о работе команд break, continue, return, поскольку что в хелпе, что литературе им практически не уделяется внимание (разве что они уже используются в каких-то сложных примерах где мне, как новичку, не сильно понятно их действие)

P.S. По-моему такое "гуляние" по дереву называется backtracking. Я много находил объяснений и примеров этого понятия на других языках (как и решения этих задач), но не для MatLab. Также, поскольку мне нужно знание такого специфического синтаксиса для решения более сложных задач, может кто-нибудь со мной поделится программой для решения задачи о 8 ферзях или о лабиринте или им подобных написанных именно на MatLab (если кто решал). Мне очень важно разобраться в этом.

Заранее очень благодарен за любую помощь!

 Профиль  
                  
 
 
Сообщение27.01.2009, 02:16 


19/12/06
164
Россия, Москва
Хы привет) а я к тебе с вопросами =)
А что у тебя за будущая работа?
Экономист по образованию с математическим складом ума должен работать программистом в системе 1С:Предерпиятие ИМХО!
и почему ты выбрал матлаб?

 Профиль  
                  
 
 
Сообщение27.01.2009, 02:31 


23/01/09
3
Отвечаю. Экономисты также занимаются моделированием, делают прогнозы (а именно аналитики). При этом разбираются в мат. статистике, ТВ, эконометрике. А программирование для таких экономистов - это способ делать то, что то тебе нужно, когда тот или иной программный пакет не позволяет (например отсутствие норм графики; отсутствие каких-либо возможностей; слабая начинка пакетов надстройками по non-linear estimation и т.д.). Ну а пример работ это управление рисками, написание скорингов, коллекторский бизне и т.д.
SQL мне лично нужен для выгрузки необходимой для анализа базы данных
...Но, пожалуйста, давайте не отклонятся от курса

 Профиль  
                  
 
 
Сообщение27.01.2009, 07:47 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Yuriy_Strilets в сообщении #181585 писал(а):
Но вот встретился с новым для себя типом задач, боюсь назвать этот тип как-то однозначно, но по-моему это динам-ое прогр-ие.

Динамическое программирование - это другое. Алгоритмы подобного типа по-русски называют "перебор с отсечением", "обход дерева с отсечением".
Yuriy_Strilets в сообщении #181585 писал(а):
Проблема в том, что я не знаю какие команды использовать в MatLab для реализации такого "гуляния" по дереву. Если это все можно реализовать только при помощи If, else, wfile, for, при помощи создания функций, рекурсий и т.д. то я сам, возможно, придумаю, просто дайте, пожалуйста, это знать. Если этих операторов мало, то скажите какие мне изучить еще. Например, я не имею нормального представления о работе команд break, continue, return, поскольку что в хелпе, что литературе им практически не уделяется внимание (разве что они уже используются в каких-то сложных примерах где мне, как новичку, не сильно понятно их действие)

Достаточно if и while, или if и рекурсии, эти операторы с оператором присваивания образуют Тьюринг-полный язык. Разумеется, со всем остальным будет только удобнее.
Yuriy_Strilets в сообщении #181585 писал(а):
Например, я не имею нормального представления о работе команд break, continue, return, поскольку что в хелпе, что литературе им практически не уделяется внимание

Если эти операторы действуют так же, как в C, то они выходят соответственно из цикла, из одной итерации цикла и из функции. Оператор continue вполне может пригодиться в этой задаче.

 Профиль  
                  
 
 
Сообщение27.01.2009, 09:44 


23/01/09
3
Огромное спасибо! Зная теперь, что это возможно с данным набором команд буду думать. Если у кого-то есть еще советы по теме - пожалуйста. Может кто-то решал на языке Матлаб подобные или эти задачи

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group