Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Консультации по информатике


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 10935
∙ повысить рейтинг »
Роман Селиверстов
Статус: Советник
Рейтинг: 5077
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 4304
∙ повысить рейтинг »

/ НАУКА И ОБРАЗОВАНИЕ / Точные и естественные науки / Информатика

Номер выпуска:255
Дата выхода:24.07.2012, 10:00
Администратор рассылки:Андреенков Владимир (Профессор)
Подписчиков / экспертов:64 / 72
Вопросов / ответов:3 / 3

Консультация # 185284: Здравствуйте! Прошу помощи в следующем вопросе: smile 1. Решить задачу, методом поиска с возвратом, используя рекурсивный или нерекурсивный вариант. 2. Решить те же задачи с помощью жадного алгоритма (можно вручную). 3. Обосновать возможность решения данн...


Консультация # 158906: Здравствуйте уважаемые эксперты! Подскажите пожалуйста как в Pascal реализовать функции sin, cos, tg, ctg. Я знаю, что можно воспользоваться встроенными, но т.к. я хочу создать свои - мне интересны сами алгоритмы. Спасибо Вам!!!...
Консультация # 116433: Составьте программу, заменяющую из двух данных чисел большее число модулем суммы, а меньшее — модулем полуразности этих чисел....

Консультация # 185284:

Здравствуйте! Прошу помощи в следующем вопросе: smile
1. Решить задачу, методом поиска с возвратом, используя рекурсивный или нерекурсивный вариант.
2. Решить те же задачи с помощью жадного алгоритма (можно вручную).
3. Обосновать возможность решения данных задач методом динамического программирования.

Задача о ладьях. На клетках шахматной доски размера 9*9 написаны числа. Расставить на доске 9 ладей, чтобы они не били друг друга, а сумма накрытых ими чисел была максимальной.

27 12 23 20 22 21 34 25 13
30 12 19 26 21 35 34 12 32
27 12 28 17 25 16 36 35 13
18 23 24 33 20 22 20 34 17
14 18 29 36 20 26 36 25 20
12 15 19 23 13 15 33 34 25
29 27 32 19 33 21 16 15 14
33 33 17 18 13 22 17 31 23
27 12 29 35 25 15 23 33 27

Язык программирования - Pascal

Дата отправки: 23.01.2012, 23:31
Вопрос задал: кирюша (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Сергей Бендер (Профессионал):

Здравствуйте, кирюша!

1. Вот текст программы с комментариями.

Код :
const
   coin:array [1..9,1..9]of integer=(
                         (27,12,23,20,22,21,34,25,13),
                         (30,12,19,26,21,35,34,12,32),
                         (27,12,28,17,25,16,36,35,13),
                         (18,23,24,33,20,22,20,34,17),
                         (14,18,29,36,20,26,36,25,20),
                         (12,15,19,23,13,15,33,34,25),
                         (29,27,32,19,33,21,16,15,14),
                         (33,33,17,18,13,22,17,31,23),
                         (27,12,29,35,25,15,23,33,27)
                         );
var
   rook,max:array[1..9]of integer;{массивы горизонталей тур (текущий и наилучший)}
   rows:array[1..9]of boolean; {признак незанятости горизонтали}
   sum_max:integer; {сумма накрытых чисел для наилучшей расстановки}


   procedure p(a,sum:integer);
     var
       s:integer;
     begin
       for s:=1 to 9 do  {перебираем горизонтали}
         if rows[s] then  {если она незанята}
         begin
           rook[a]:=s;    {занимаем}
           rows[s]:=false;
           if a<9 then p(a+1,sum+coin[a,rook[a]])  {если непоследняя, то переходим к следующей}
                                                   { (увеличивая сумму)}
           else if sum+coin[a,rook[a]]>sum_max then {иначе сравниваем текущую расстановку }
                begin                               {c наилучшей}
                     sum_max:=sum+coin[a,rook[a]];
                     max:=rook;
                end;
           rook[a]:=0;   {освобождаем горизонталь}
           rows[s]:=true;
         end;
    end;

var i:integer;

   begin{main}
     for i:=1 to 9 do
     begin
          rook[i]:=0;
          rows[i]:=true;
     end;
     sum_max:=0;
     p(1,0);
     for i:=1 to 9 do write(i:3,':',max[i],'=',coin[i,max[i]]);
     writeln;
     writeln('Sum:',sum_max);
     readln;
   end.{main}


Результат:
Код :
 1:1=27  2:6=35  3:7=36  4:8=34  5:4=36  6:9=25  7:5=33  8:2=33  9:3=29
Sum:288


2. Здесь жадный алгоритм, вероятно, реализуется так:
а) находим на доске ячейку с самым большим числом и ставим ладью;
б) вычёркиваем горизонталь и вертикаль;
с) в оставшихся ячейках находим самое большое число;
и т.д.

В прикреплённом файле весь процесс показан в excel таблице. Сумма составила 277. Т.е. меньше, чем в рекурсивном алгоритме, в котором происходит полный перебор всех вариантов.

Кстати, на первой же ладье имеется нексолько ячеек с максимальным значением 36. Однако, перебор вариантов тут уже не делается. Идея жадного алгоритма -- накидать всё побыстрее и попроще. Результат будет не самый-самый лучший, но достаточно большой в любой практической задаче.

Консультировал: Сергей Бендер (Профессионал)
Дата отправки: 25.01.2012, 17:58
Прикреплённый файл: посмотреть » [21.0 кб]

5
нет комментария
-----
Дата оценки: 25.01.2012, 18:32

Рейтинг ответа:

НЕ одобряю +2 одобряю!

Консультация # 158906:

Здравствуйте уважаемые эксперты! Подскажите пожалуйста как в Pascal реализовать функции sin, cos, tg, ctg. Я знаю, что можно воспользоваться встроенными, но т.к. я хочу создать свои - мне интересны сами алгоритмы. Спасибо Вам!!!

Дата отправки: 27.01.2009, 16:41
Вопрос задал: Николай Мироненко (Практикант)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Зенченко Константин Николаевич (Модератор):

Здравствуйте, Николай // Programmator !

Внимательно изучаете ряды Тейлора.
Сам алгоритм простой:
Y:=0;
while abs(Yi)<e do
begin
Y:=Y + Yi;
i+1;
end;
Вычисления останавливаются, когда будет достигнута нужная точность.

Удачи!

Консультировал: Зенченко Константин Николаевич (Модератор)
Дата отправки: 27.01.2009, 17:10
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 116433:

Составьте программу, заменяющую из двух данных чисел большее число модулем суммы, а меньшее — модулем полуразности этих чисел.

Дата отправки: 30.12.2007, 20:47
Вопрос задал: Kevin Garnet
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Николай Владимирович / Н.В. (Администратор):

Здравствуйте, Kevin Garnet!
Код в приложении.
Удачи!

Приложение:

Консультировал: Николай Владимирович / Н.В. (Администратор)
Дата отправки: 30.12.2007, 22:41
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное