16
Разбор задач Динамическое программирование Функции Задачи Динамическое программирование Информатика 10-11 классы 17 ноября 2011 г. Информатика 10-11 классы

Динамическое программирование на ruby

Embed Size (px)

DESCRIPTION

Основы динамического программирования на язы

Citation preview

Page 1: Динамическое программирование на ruby

Разбор задач Динамическое программирование Функции Задачи

Динамическое программирование

Информатика10-11 классы

17 ноября 2011 г.

Информатика 10-11 классы

Page 2: Динамическое программирование на ruby

Разбор задач Динамическое программирование Функции Задачи

Разбор задач: средняя длина слова

Найдём среднюю длину слова в три этапа:1 Вычислим количество слов в строке.2 Найдём длину всей строки без пробелов (сумма длин

слов).3 Поделим одно на другое.

Listing 1: Средняя длина слова

s = "This␣ i s ␣a␣sample␣ s t r i n g "words = s . s p l i t ("␣" )s i z e = words . s i z er e s = 0 .0words . each do | e lem |

r e s = r e s + elem . s i z eendmedium = r e s / s i z eput s medium

Информатика 10-11 классы

Page 3: Динамическое программирование на ruby

Разбор задач Динамическое программирование Функции Задачи

Разбор задач: слова, длиннее следнего

Найдём среднюю длину строки в два этапа:1 Посчитаем среднюю длину слова.2 Найдём слова, чья длина больше средней.

... пропустим кусок, связанный с п.1.

Listing 2: Длиннее среднего

. . .medium = r e s / s i z ewords . each do | e lem |

put s elem i f ( elem . s i z e > medium)end

Информатика 10-11 классы

Page 4: Динамическое программирование на ruby

Разбор задач Динамическое программирование Функции Задачи

Динамическое программирование: принципы

Решая предыдущие задачи, мы столкнулись с тем, что:1 Очень удобно разбивать задачу над несколько небольших

подзадач.2 Зачастую, одна программа использует результаты,

полученные другой программой.3 А в некоторых случаях подзадачи нескольких задач

совпадают.

Такой подход называется динамическимпрограммированием.Динамическое программирование — способ решениясложных задач путём разбиения их на более простыеподзадачи (Википедия).

Информатика 10-11 классы

Page 5: Динамическое программирование на ruby

Разбор задач Динамическое программирование Функции Задачи

Инструменты

Для разбиения программы на подпрограммы в языкахпрограммирования существует специальный инструмент,называемый функциями.В общем случае, функция — это небольшая программа,реализующая парадигму чёрного ящика.Парадигма чёрного ящика предлагает разделениесущности на составляющие. Каждая составляющая имеетвход, сам, собственно, чёрный ящик и выход.Чёрный ящик — универсальная концепция, применимая нетолько в программировании, но и в жизни.

Информатика 10-11 классы

Page 6: Динамическое программирование на ruby

Разбор задач Динамическое программирование Функции Задачи

Пример чёрного ящика

Рис.: Источник: http://g0l.ru/blog/imgs/gai/caricatura.jpg

Информатика 10-11 классы

Page 7: Динамическое программирование на ruby

Разбор задач Динамическое программирование Функции Задачи

Функции

Как уже было указано, простейшей реализацией чёрногоящика является функция.Функция — подпрограмма внутри программы,выполняющая некоторую функцию и имеющая входныеданные, тело (код) функции, выходные данные (чтофункция возвращает)Приведём простейший пример функции: перевод изградусов Цельсия в градусы по Кельвину.

Listing 3: Цельсии в Кельвины

def c e l s i u s_ t o_k e l v i n ( c e l s_va l u e )ke l v_va lue = ce l s_va l u e + 273.15re tu rn ke l v_va lue

end

sample = c e l s i u s_ t o_k e l v i n (20)put s "20␣by␣Ce l s i u s ␣=␣#{sample}␣by␣Kelv in "

Информатика 10-11 классы

Page 8: Динамическое программирование на ruby

Разбор задач Динамическое программирование Функции Задачи

Функция в разрезе

def название_функции(аргументы)В начале задания функции пишется ключевое слово def(англ. definition — определение).Затем пишется название функции. Оно должно понятными на английском языке без пробелов и спецсимволов.Далее, в скобках перечисляются входные данные, которыеназываются аргументы функции.Аргументы функции — это несколько переменных, которыенужны функции для её вычислений.В конце функции пишется ключевое слово return (англ.возврат). После return указывается, что возвращаетфункция.В самом конце ставится end.В нашем случае функция возвращала значениетемпературы в градусах по Кельвину.

Информатика 10-11 классы

Page 9: Динамическое программирование на ruby

Разбор задач Динамическое программирование Функции Задачи

Функции для чайников

Рис.: Источник: http://www.dialektika.com/

Информатика 10-11 классы

Page 10: Динамическое программирование на ruby

Разбор задач Динамическое программирование Функции Задачи

Ещё немного о функциях

Для вызова функции достаточно написать её имя, а затемперечислить в скобках аргументы.Например puts celsius_to_kelvin(20) выведет на экранзначение 20 градусов цельсия по шкале Кельвина.Можно и через дополнительную переменную:

Listing 4: Функции

. . .c e l s i u s_ v a l u e = 20i n_ke l v i n = c e l s i u s_ t o_k e l v i n ( c e l s i u s_ v a l u e )put s i n_ke l v i n

Информатика 10-11 классы

Page 11: Динамическое программирование на ruby

Разбор задач Динамическое программирование Функции Задачи

И ещё чуть-чуть

Рис.: Источник: где-то в Интернетах

Информатика 10-11 классы

Page 12: Динамическое программирование на ruby

Разбор задач Динамическое программирование Функции Задачи

И ещё чуть-чуть

Важно! Все переменные внутри функции локальные. Тоесть, если в программе есть переменная res, внутрифункции её НЕ БУДЕТ. И наоборот.Такая программа вызовет ошибку, так как переменнаявнутри функции не определена:

Listing 5: Ошибка с локальными переменными

elem = 5def v e r y_us e f u l_ fun c t i o n ( someth ing )

put s elemput s someth ingreturn elem

end

Информатика 10-11 классы

Page 13: Динамическое программирование на ruby

Разбор задач Динамическое программирование Функции Задачи

Задача о палиндромоме

Палиндромом называют слово (или буквосочетание),одинаково читающееся в обоих направлениях: топот, Ароза упала на лапу Азора (Фет).Задача: вывести на экран все палиндромы–слова,встречающиеся в строке.Решим задачу методом динамического программирования:

1 Разделим предложение на слова.2 Проверим каждое слово, является ли оно палиндромом

(функция).3 Если является, то выведем его на экран.

Информатика 10-11 классы

Page 14: Динамическое программирование на ruby

Разбор задач Динамическое программирование Функции Задачи

Задача о палиндромоме

Listing 6: Задача о палиндроме

def pa l i nd rome ?( s )i f ( s == s . r e v e r s e )

re tu rn t ruee l s e

re tu rn f a l s eend

end

s = " I ␣ sa i d ␣to␣madam␣ a f t e r ␣party : ␣WOW"words = s . s p l i t ("␣" )words . each { | word | put s word i f pa l i nd rome ?( word ) }

Информатика 10-11 классы

Page 15: Динамическое программирование на ruby

Разбор задач Динамическое программирование Функции Задачи

Числа Фибоначчи

Выведем на экран первые N чисел Фибоначчи.

Listing 7: Числа Фибоначчи

def f i b o n a c c i ( n )a0 = 1a1 = 1a_new = 0f o r i i n 2 . . n

a_new = a0 + a1a0 = a1a1 = a_new

endretu rn a1

endn = 5f o r i i n 0 . . n

put s "#{i }␣число␣Фибоначчи␣=␣#{f i b ona c c i ( i )}"end

Информатика 10-11 классы

Page 16: Динамическое программирование на ruby

Разбор задач Динамическое программирование Функции Задачи

References

Все презентации доступны на http://school.smirik.ru!Вопросы, предложения, д/з: [email protected]

Информатика 10-11 классы