SlideShare a Scribd company logo
1 of 20
Download to read offline
Жадные алгоритмы        Задача о размене монет         Задача о коммивояжёре    References




                   Алгоритмы. Жадные алгоритмы.

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


                                  23 января 2012 г.




                   Информатика 10-11 классы      Алгоритмы. Жадные алгоритмы.
Жадные алгоритмы        Задача о размене монет         Задача о коммивояжёре    References



Жадные алгоритмы



          Жадный (greedy) алгоритм пошаговый алгоритм,
          основанный на жадном принципе выбора следующего
          шага.
          На новом шаге мы выбираем самый “толстый” вариант.
          Формально: для подготовки глобально оптимального
          решения на каждом шаге выбираем локально
          оптимальный вариант.




                   Информатика 10-11 классы      Алгоритмы. Жадные алгоритмы.
Жадные алгоритмы        Задача о размене монет         Задача о коммивояжёре    References



Задача о размене монет




     В одном государстве имеются монеты достоинством 1, 2,
     5, 10, 20, 50 и 100 тугриков. Вася каждый месяц получает
      зарплату N. Помогите начальнику Васи выдать сумму N
                   наименьшим количеством монет.




                   Информатика 10-11 классы      Алгоритмы. Жадные алгоритмы.
Жадные алгоритмы        Задача о размене монет         Задача о коммивояжёре    References



Общий случай




        В одном государстве имеются монеты достоинством
        a1 = 1 < a2 < · · · < ak тугриков. Вася каждый месяц
      получает зарплату N. Помогите начальнику Васи выдать
             сумму N наименьшим количеством монет.




                   Информатика 10-11 классы      Алгоритмы. Жадные алгоритмы.
Жадные алгоритмы        Задача о размене монет         Задача о коммивояжёре    References



Алгоритм


       1   Будем последовательно выдавать Васе по одной монете
           вплоть до того момента, когда будет выдана вся зарплата
           (итеративность).
       2   Принцип жадного выбора в данном алгоритме заключается
           в следующем: на каждом шаге выберем из всех монет те,
           которые ещё можно выдать (достоинство монеты меньше
           оставшейся суммы) и выдадим Васе максимальную из них.
       3   “Выдадим ... максимальную”               и есть “жадность”
           алгоритма.
       4   Процесс выдачи можно организовать как циклом
           (динамическое программирование), так и рекурсией.



                   Информатика 10-11 классы      Алгоритмы. Жадные алгоритмы.
Жадные алгоритмы        Задача о размене монет         Задача о коммивояжёре    References




                                 Рекурсия




                   Информатика 10-11 классы      Алгоритмы. Жадные алгоритмы.
Жадные алгоритмы        Задача о размене монет         Задача о коммивояжёре    References



Рекурсивный формализованный алгоритм


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



                   Информатика 10-11 классы      Алгоритмы. Жадные алгоритмы.
Жадные алгоритмы             Задача о размене монет            Задача о коммивояжёре   References



Реализация рекурсии


     Listing 1: Монеты рекурсией
     def give_coin ( coins , n )
       i f c o i n s . i n c l u d e ?( n)
          puts n
       else
          max = c o i n s . f i n d _ a l l { | e l e m | e l e m < n } . max
          p u t s max
          g i v e _ c o i n ( c o i n s , n−max )
       end
     end

     coins = [1 ,2 ,5 ,10 ,20 ,50 ,100]
     n = 398
     give_coin ( coin , n)




                      Информатика 10-11 классы         Алгоритмы. Жадные алгоритмы.
Жадные алгоритмы        Задача о размене монет         Задача о коммивояжёре    References




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



                   Информатика 10-11 классы      Алгоритмы. Жадные алгоритмы.
Жадные алгоритмы        Задача о размене монет         Задача о коммивояжёре    References



Алгоритм с циклом



       1   Разобьём задачу на две составляющие: нахождение
           жадного выбора и цикл выдачи монет.
       2   Цикл продолжается до тех пор, пока Васе есть что
           выдавать.
       3   Жадный выбор: находим максимальную монету, которую
           можем выдать Васе.
       4   В специальной переменной сохраняем значение остатка
           невыданных Васе средств.




                   Информатика 10-11 классы      Алгоритмы. Жадные алгоритмы.
Жадные алгоритмы            Задача о размене монет           Задача о коммивояжёре   References



Реализация циклом




     Listing 2: Монеты циклом
     coins = [1 ,2 ,5 ,10 ,20 ,50 ,100]
     n = 48

     w h i l e ( n != 0 )
       max = c o i n s . f i n d _ a l l { | e l e m | elem<=n } . max
        p u t s max
       n = n − max
     end




                      Информатика 10-11 классы        Алгоритмы. Жадные алгоритмы.
Жадные алгоритмы        Задача о размене монет         Задача о коммивояжёре    References



Задание



          Решить задачу в общем случае для любого количества и
          достоинства монет.
          (*) Предложенное решение не оптимально: если, например,
          надо выдать 453 тугрика, то мы можем сразу выдать 400,
          а не выдавать 4 раза по 100 тугриков, удлинняя в 4 раза
          алгоритм. Написать программу, реализующую улучшенный
          алгоритм, который сразу выдаёт максимально возможное
          количество монет наивысшего достоинства.




                   Информатика 10-11 классы      Алгоритмы. Жадные алгоритмы.
Жадные алгоритмы        Задача о размене монет         Задача о коммивояжёре    References



Задача о коммивояжёре




                         Рис.: Источник: http://ru.wikipedia.org


                   Информатика 10-11 классы      Алгоритмы. Жадные алгоритмы.
Жадные алгоритмы        Задача о размене монет         Задача о коммивояжёре    References



Задача о коммивояжёре




          Коммивояжёру для продажи своего барахла нужно
          посетить несколько городов. Требуется составить
          кратчайший из возможных путей. Предполагается, что все
          города соединены прямыми дорогами каждый с каждым.




                   Информатика 10-11 классы      Алгоритмы. Жадные алгоритмы.
Жадные алгоритмы        Задача о размене монет         Задача о коммивояжёре         References



Концепт решения - жадный выбор



          Сама задача имеет множество вариантов решений                         от
          простых до более сложных.
          Одно из возможных решений                  жадный алгоритм.
          Принципов жадного выбора может быть несколько.
          Возьмём самый простой из каждого города будем ехать
          в самый ближайший по списку из тех, в которых мы ещё
          не были.




                   Информатика 10-11 классы      Алгоритмы. Жадные алгоритмы.
Жадные алгоритмы        Задача о размене монет         Задача о коммивояжёре    References



Концепт решения - хранение данных

          Во многих задачах стоит вопрос, как хранить данные?
          Вопрос 1: как хранить местоположение городов?
          Простейший вариант в виде двумерного массива
          городов. Ключи номера городов, значения две
          координаты (широта и долгота в оригинале, но мы решаем
          в плоской задаче, поэтому x и y ).
          Вопрос 2: надо как-то хранить города, в которых мы уже
          были.
          Для этого можно завести булевский одномерный массив
          длиной в количество городов. Если мы побывали в i-ом
          городе, то делаем i-ый элемент этого массива равным
          истине. По умолчанию выставляем все элементы равными
          лжи.

                   Информатика 10-11 классы      Алгоритмы. Жадные алгоритмы.
Жадные алгоритмы        Задача о размене монет         Задача о коммивояжёре    References



Алгоритм

       1   Напишем функцию, вычисляющую по теореме Пифагора
           расстояние между двумя городами. На вход координаты
           городов (в виде двух массивов), на выходе вещественное
           число.
       2   Допустим, мы начинаем в точке (0,0). Так как нам надо
           пройтись на всем N городам, зададим цикл от 0 до N − 1
           (по количеству шагов).
       3   Перед этим заведём две переменные, показывающие наше
           текущее местоположение.
       4   Вычислим ближайший к нашему текущему
           местоположению город. Для этого пройдёмся по всем
           городам, в которых мы ещё не были (циклом, не
           рассматриваем такие города, у которых булевское значение
           соответствующего элемента равно истине).
                   Информатика 10-11 классы      Алгоритмы. Жадные алгоритмы.
Жадные алгоритмы        Задача о размене монет         Задача о коммивояжёре    References



Алгоритм

       5   Вычисление ближайшего города похоже на вычисление
           минимального элемента массива, только с
           дополнительным условием в виде истинности элемента
           булевского массива. Расстояние между городами
           вычисляем с помощью заданной функции.
       6   Вычислив ближайший город, выведем его на экран, как
           элемент маршрута. Заменим переменные, в которых мы
           храним текущие координаты.
       7   В булевском массиве напротив соответствующего города
           поставим флажок ИСТИНА.
       8   Повторяем операцию вплоть до последнего города.
           Заканчиваем вместе с первым циклом.


                   Информатика 10-11 классы      Алгоритмы. Жадные алгоритмы.
Жадные алгоритмы        Задача о размене монет         Задача о коммивояжёре    References



Задание



          Написать программу для решения задачи о коммивояжёре
          по предложенному алгоритму.
          Придумать такое расположение городов, когда
          предложенный алгоритм работает очень некорректно (не
          более 6 городов).
          (*) Решить задачу в пространственном случае, когда для
          каждого города хранятся широта и долгота, а расстояния
          вычисляются на сфере, а не в плоскости.




                   Информатика 10-11 классы      Алгоритмы. Жадные алгоритмы.
Жадные алгоритмы        Задача о размене монет         Задача о коммивояжёре    References



References




          Все презентации доступны на http://school.smirik.ru!
          Вопросы, предложения, д/з: smirik@gmail.com




                   Информатика 10-11 классы      Алгоритмы. Жадные алгоритмы.

More Related Content

What's hot

Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"Nikolay Grebenshikov
 
дистанционка
дистанционкадистанционка
дистанционкаtajnan
 
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...Nikolay Grebenshikov
 
Кванторы. Квантор всеобщности. Квантор существования.Равносильные формулы лог...
Кванторы. Квантор всеобщности. Квантор существования.Равносильные формулы лог...Кванторы. Квантор всеобщности. Квантор существования.Равносильные формулы лог...
Кванторы. Квантор всеобщности. Квантор существования.Равносильные формулы лог...aleksashka3
 
Динамическое программирование на ruby
Динамическое программирование на rubyДинамическое программирование на ruby
Динамическое программирование на rubyEvgeny Smirnov
 
20091025 algorithmsfornphardproblems kulikov_lecture03
20091025 algorithmsfornphardproblems kulikov_lecture0320091025 algorithmsfornphardproblems kulikov_lecture03
20091025 algorithmsfornphardproblems kulikov_lecture03Computer Science Club
 
асимметричные алгоритмы шифрования
асимметричные алгоритмы шифрованияасимметричные алгоритмы шифрования
асимметричные алгоритмы шифрованияhmyrhik nikita
 
Советский суперкомпьютер К-340А и секретные вычисления
Советский суперкомпьютер К-340А и секретные вычисленияСоветский суперкомпьютер К-340А и секретные вычисления
Советский суперкомпьютер К-340А и секретные вычисленияPositive Hack Days
 
Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"Fwdays
 
элементы языка и типы данных
элементы языка и типы данныхэлементы языка и типы данных
элементы языка и типы данныхЕлена Ключева
 
Методы построения и анализа алгоритмов
Методы построения и анализа алгоритмовМетоды построения и анализа алгоритмов
Методы построения и анализа алгоритмовNick535
 
A Method of Reducing Computational Complexity in Verification of Programming ...
A Method of Reducing Computational Complexity in Verification of Programming ...A Method of Reducing Computational Complexity in Verification of Programming ...
A Method of Reducing Computational Complexity in Verification of Programming ...Iosif Itkin
 
презентации по информатике
презентации по информатикепрезентации по информатике
презентации по информатикеNick535
 
теория рекурсивных функций
теория рекурсивных функцийтеория рекурсивных функций
теория рекурсивных функцийMariya_Lastochkina
 

What's hot (18)

Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"
 
дистанционка
дистанционкадистанционка
дистанционка
 
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
 
Кванторы. Квантор всеобщности. Квантор существования.Равносильные формулы лог...
Кванторы. Квантор всеобщности. Квантор существования.Равносильные формулы лог...Кванторы. Квантор всеобщности. Квантор существования.Равносильные формулы лог...
Кванторы. Квантор всеобщности. Квантор существования.Равносильные формулы лог...
 
4 algoritm
4 algoritm4 algoritm
4 algoritm
 
Динамическое программирование на ruby
Динамическое программирование на rubyДинамическое программирование на ruby
Динамическое программирование на ruby
 
20091025 algorithmsfornphardproblems kulikov_lecture03
20091025 algorithmsfornphardproblems kulikov_lecture0320091025 algorithmsfornphardproblems kulikov_lecture03
20091025 algorithmsfornphardproblems kulikov_lecture03
 
асимметричные алгоритмы шифрования
асимметричные алгоритмы шифрованияасимметричные алгоритмы шифрования
асимметричные алгоритмы шифрования
 
Советский суперкомпьютер К-340А и секретные вычисления
Советский суперкомпьютер К-340А и секретные вычисленияСоветский суперкомпьютер К-340А и секретные вычисления
Советский суперкомпьютер К-340А и секретные вычисления
 
Python
PythonPython
Python
 
Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"
 
элементы языка и типы данных
элементы языка и типы данныхэлементы языка и типы данных
элементы языка и типы данных
 
алгоритм
алгоритмалгоритм
алгоритм
 
Методы построения и анализа алгоритмов
Методы построения и анализа алгоритмовМетоды построения и анализа алгоритмов
Методы построения и анализа алгоритмов
 
Diskretn analiz
Diskretn analizDiskretn analiz
Diskretn analiz
 
A Method of Reducing Computational Complexity in Verification of Programming ...
A Method of Reducing Computational Complexity in Verification of Programming ...A Method of Reducing Computational Complexity in Verification of Programming ...
A Method of Reducing Computational Complexity in Verification of Programming ...
 
презентации по информатике
презентации по информатикепрезентации по информатике
презентации по информатике
 
теория рекурсивных функций
теория рекурсивных функцийтеория рекурсивных функций
теория рекурсивных функций
 

Similar to Алгоритмы на ruby: жадные алгоритмы

Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...
Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...
Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...Mikhail Kurnosov
 
В поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, НигмаВ поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, Нигмаyaevents
 
Основы комбинаторики II. Разбор задач
Основы комбинаторики II. Разбор задачОсновы комбинаторики II. Разбор задач
Основы комбинаторики II. Разбор задачDEVTYPE
 
практика 7
практика 7практика 7
практика 7student_kai
 
Михаил Александров, Индуктивное моделирование
Михаил Александров, Индуктивное моделированиеМихаил Александров, Индуктивное моделирование
Михаил Александров, Индуктивное моделированиеLidia Pivovarova
 
Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Mikhail Kurnosov
 
Komarov borba za-miesto-urfu_2013
Komarov borba za-miesto-urfu_2013Komarov borba za-miesto-urfu_2013
Komarov borba za-miesto-urfu_2013Yandex
 
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Nikolay Grebenshikov
 
Лекция 9 Жадные алгоритмы
Лекция 9 Жадные алгоритмыЛекция 9 Жадные алгоритмы
Лекция 9 Жадные алгоритмыsimple_people
 
Лекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмыЛекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмыMikhail Kurnosov
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.sharikdp
 
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...Ontico
 
Анализ количества посетителей на сайте [Считаем уникальные элементы]
Анализ количества посетителей на сайте [Считаем уникальные элементы]Анализ количества посетителей на сайте [Считаем уникальные элементы]
Анализ количества посетителей на сайте [Считаем уникальные элементы]Qrator Labs
 
Семплирование на основе марковских цепей
Семплирование на основе марковских цепейСемплирование на основе марковских цепей
Семплирование на основе марковских цепейsoukhinov
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Mikhail Kurnosov
 

Similar to Алгоритмы на ruby: жадные алгоритмы (20)

Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...
Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...
Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...
 
2020 03-31-lection
2020 03-31-lection2020 03-31-lection
2020 03-31-lection
 
В поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, НигмаВ поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, Нигма
 
Алгоритм
АлгоритмАлгоритм
Алгоритм
 
01 вводная
01 вводная01 вводная
01 вводная
 
Основы комбинаторики II. Разбор задач
Основы комбинаторики II. Разбор задачОсновы комбинаторики II. Разбор задач
Основы комбинаторики II. Разбор задач
 
практика 7
практика 7практика 7
практика 7
 
Михаил Александров, Индуктивное моделирование
Михаил Александров, Индуктивное моделированиеМихаил Александров, Индуктивное моделирование
Михаил Александров, Индуктивное моделирование
 
Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)
 
Komarov borba za-miesto-urfu_2013
Komarov borba za-miesto-urfu_2013Komarov borba za-miesto-urfu_2013
Komarov borba za-miesto-urfu_2013
 
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
 
Лекция 9 Жадные алгоритмы
Лекция 9 Жадные алгоритмыЛекция 9 Жадные алгоритмы
Лекция 9 Жадные алгоритмы
 
Лекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмыЛекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмы
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
 
Моделирование поведения сложных динамических систем
Моделирование поведения сложных динамических системМоделирование поведения сложных динамических систем
Моделирование поведения сложных динамических систем
 
лекция 8
лекция 8лекция 8
лекция 8
 
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
 
Анализ количества посетителей на сайте [Считаем уникальные элементы]
Анализ количества посетителей на сайте [Считаем уникальные элементы]Анализ количества посетителей на сайте [Считаем уникальные элементы]
Анализ количества посетителей на сайте [Считаем уникальные элементы]
 
Семплирование на основе марковских цепей
Семплирование на основе марковских цепейСемплирование на основе марковских цепей
Семплирование на основе марковских цепей
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
 

More from Evgeny Smirnov

Внедряем MOOC'и на уроке информатики
Внедряем MOOC'и на уроке информатикиВнедряем MOOC'и на уроке информатики
Внедряем MOOC'и на уроке информатикиEvgeny Smirnov
 
Инновации которые не мешают
Инновации которые не мешаютИнновации которые не мешают
Инновации которые не мешаютEvgeny Smirnov
 
Мобильные приложения в школе
Мобильные приложения в школеМобильные приложения в школе
Мобильные приложения в школеEvgeny Smirnov
 
Порядок и хаос в Солнечной системе
Порядок и хаос в Солнечной системеПорядок и хаос в Солнечной системе
Порядок и хаос в Солнечной системеEvgeny Smirnov
 
Ruby: инкапсуляция и полиморфизм
Ruby: инкапсуляция и полиморфизмRuby: инкапсуляция и полиморфизм
Ruby: инкапсуляция и полиморфизмEvgeny Smirnov
 
Объектно-ориентированное программирование в ruby
Объектно-ориентированное программирование в rubyОбъектно-ориентированное программирование в ruby
Объектно-ориентированное программирование в rubyEvgeny Smirnov
 
Мобильные приложения в образовании
Мобильные приложения в образованииМобильные приложения в образовании
Мобильные приложения в образованииEvgeny Smirnov
 
NumBuster! Почему связи между данными важнее самих данных.
NumBuster! Почему связи между данными важнее самих данных.NumBuster! Почему связи между данными важнее самих данных.
NumBuster! Почему связи между данными важнее самих данных.Evgeny Smirnov
 
Мастер-класс: LMS42, ч.2
Мастер-класс: LMS42, ч.2Мастер-класс: LMS42, ч.2
Мастер-класс: LMS42, ч.2Evgeny Smirnov
 
Мастер-класс: Anki карточки
Мастер-класс: Anki карточкиМастер-класс: Anki карточки
Мастер-класс: Anki карточкиEvgeny Smirnov
 
Мастер-класс: Quiz up
Мастер-класс: Quiz upМастер-класс: Quiz up
Мастер-класс: Quiz upEvgeny Smirnov
 
Мастер-класс: Dragonbox Algebra
Мастер-класс: Dragonbox AlgebraМастер-класс: Dragonbox Algebra
Мастер-класс: Dragonbox AlgebraEvgeny Smirnov
 
Мастер-класс: начало
Мастер-класс: началоМастер-класс: начало
Мастер-класс: началоEvgeny Smirnov
 
LMS42: основы (для мастер-класса)
LMS42: основы (для мастер-класса)LMS42: основы (для мастер-класса)
LMS42: основы (для мастер-класса)Evgeny Smirnov
 
Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...
Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...
Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...Evgeny Smirnov
 
Образовательные и игровые платформы в помощь учителю и методисту
Образовательные и игровые платформы в помощь учителю и методистуОбразовательные и игровые платформы в помощь учителю и методисту
Образовательные и игровые платформы в помощь учителю и методистуEvgeny Smirnov
 
Педагогический клуб 18.10: LMS42
Педагогический клуб 18.10: LMS42Педагогический клуб 18.10: LMS42
Педагогический клуб 18.10: LMS42Evgeny Smirnov
 
Введение в алгоритмы
Введение в алгоритмыВведение в алгоритмы
Введение в алгоритмыEvgeny Smirnov
 

More from Evgeny Smirnov (20)

Внедряем MOOC'и на уроке информатики
Внедряем MOOC'и на уроке информатикиВнедряем MOOC'и на уроке информатики
Внедряем MOOC'и на уроке информатики
 
Инновации которые не мешают
Инновации которые не мешаютИнновации которые не мешают
Инновации которые не мешают
 
Мобильные приложения в школе
Мобильные приложения в школеМобильные приложения в школе
Мобильные приложения в школе
 
Порядок и хаос в Солнечной системе
Порядок и хаос в Солнечной системеПорядок и хаос в Солнечной системе
Порядок и хаос в Солнечной системе
 
Ruby: инкапсуляция и полиморфизм
Ruby: инкапсуляция и полиморфизмRuby: инкапсуляция и полиморфизм
Ruby: инкапсуляция и полиморфизм
 
Объектно-ориентированное программирование в ruby
Объектно-ориентированное программирование в rubyОбъектно-ориентированное программирование в ruby
Объектно-ориентированное программирование в ruby
 
Мобильные приложения в образовании
Мобильные приложения в образованииМобильные приложения в образовании
Мобильные приложения в образовании
 
Newtonew Media
Newtonew MediaNewtonew Media
Newtonew Media
 
NumBuster! Почему связи между данными важнее самих данных.
NumBuster! Почему связи между данными важнее самих данных.NumBuster! Почему связи между данными важнее самих данных.
NumBuster! Почему связи между данными важнее самих данных.
 
Мастер-класс: LMS42, ч.2
Мастер-класс: LMS42, ч.2Мастер-класс: LMS42, ч.2
Мастер-класс: LMS42, ч.2
 
Мастер-класс: Anki карточки
Мастер-класс: Anki карточкиМастер-класс: Anki карточки
Мастер-класс: Anki карточки
 
Мастер-класс: Quiz up
Мастер-класс: Quiz upМастер-класс: Quiz up
Мастер-класс: Quiz up
 
Мастер-класс: Dragonbox Algebra
Мастер-класс: Dragonbox AlgebraМастер-класс: Dragonbox Algebra
Мастер-класс: Dragonbox Algebra
 
Мастер-класс: начало
Мастер-класс: началоМастер-класс: начало
Мастер-класс: начало
 
LMS42: основы (для мастер-класса)
LMS42: основы (для мастер-класса)LMS42: основы (для мастер-класса)
LMS42: основы (для мастер-класса)
 
Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...
Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...
Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...
 
Образовательные и игровые платформы в помощь учителю и методисту
Образовательные и игровые платформы в помощь учителю и методистуОбразовательные и игровые платформы в помощь учителю и методисту
Образовательные и игровые платформы в помощь учителю и методисту
 
Педагогический клуб 18.10: LMS42
Педагогический клуб 18.10: LMS42Педагогический клуб 18.10: LMS42
Педагогический клуб 18.10: LMS42
 
Блок-схемы
Блок-схемыБлок-схемы
Блок-схемы
 
Введение в алгоритмы
Введение в алгоритмыВведение в алгоритмы
Введение в алгоритмы
 

Алгоритмы на ruby: жадные алгоритмы

  • 1. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References Алгоритмы. Жадные алгоритмы. Информатика 10-11 классы 23 января 2012 г. Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
  • 2. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References Жадные алгоритмы Жадный (greedy) алгоритм пошаговый алгоритм, основанный на жадном принципе выбора следующего шага. На новом шаге мы выбираем самый “толстый” вариант. Формально: для подготовки глобально оптимального решения на каждом шаге выбираем локально оптимальный вариант. Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
  • 3. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References Задача о размене монет В одном государстве имеются монеты достоинством 1, 2, 5, 10, 20, 50 и 100 тугриков. Вася каждый месяц получает зарплату N. Помогите начальнику Васи выдать сумму N наименьшим количеством монет. Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
  • 4. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References Общий случай В одном государстве имеются монеты достоинством a1 = 1 < a2 < · · · < ak тугриков. Вася каждый месяц получает зарплату N. Помогите начальнику Васи выдать сумму N наименьшим количеством монет. Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
  • 5. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References Алгоритм 1 Будем последовательно выдавать Васе по одной монете вплоть до того момента, когда будет выдана вся зарплата (итеративность). 2 Принцип жадного выбора в данном алгоритме заключается в следующем: на каждом шаге выберем из всех монет те, которые ещё можно выдать (достоинство монеты меньше оставшейся суммы) и выдадим Васе максимальную из них. 3 “Выдадим ... максимальную” и есть “жадность” алгоритма. 4 Процесс выдачи можно организовать как циклом (динамическое программирование), так и рекурсией. Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
  • 6. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References Рекурсия Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
  • 7. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References Рекурсивный формализованный алгоритм 1 Зададим монеты в виде массива. 2 Создадим рекурсивную функцию, которая выдаёт одну монету. На вход она будет принимать набор монет и оставшуюся сумму. Возвращать достоинство монеты, которую надо выдать. 3 База рекурсии: если оставшаяся сумма совпадает с достоинством одной из монет, возвращаем эту монету. 4 Рекуррентная формула: находим максимальную монету, которую можем выдать Васе. Выдаём её Васе и запускаем вызываем функцию с уменьшенным значением суммы. Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
  • 8. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References Реализация рекурсии Listing 1: Монеты рекурсией def give_coin ( coins , n ) i f c o i n s . i n c l u d e ?( n) puts n else max = c o i n s . f i n d _ a l l { | e l e m | e l e m < n } . max p u t s max g i v e _ c o i n ( c o i n s , n−max ) end end coins = [1 ,2 ,5 ,10 ,20 ,50 ,100] n = 398 give_coin ( coin , n) Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
  • 9. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References Динамическое программирование Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
  • 10. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References Алгоритм с циклом 1 Разобьём задачу на две составляющие: нахождение жадного выбора и цикл выдачи монет. 2 Цикл продолжается до тех пор, пока Васе есть что выдавать. 3 Жадный выбор: находим максимальную монету, которую можем выдать Васе. 4 В специальной переменной сохраняем значение остатка невыданных Васе средств. Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
  • 11. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References Реализация циклом Listing 2: Монеты циклом coins = [1 ,2 ,5 ,10 ,20 ,50 ,100] n = 48 w h i l e ( n != 0 ) max = c o i n s . f i n d _ a l l { | e l e m | elem<=n } . max p u t s max n = n − max end Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
  • 12. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References Задание Решить задачу в общем случае для любого количества и достоинства монет. (*) Предложенное решение не оптимально: если, например, надо выдать 453 тугрика, то мы можем сразу выдать 400, а не выдавать 4 раза по 100 тугриков, удлинняя в 4 раза алгоритм. Написать программу, реализующую улучшенный алгоритм, который сразу выдаёт максимально возможное количество монет наивысшего достоинства. Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
  • 13. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References Задача о коммивояжёре Рис.: Источник: http://ru.wikipedia.org Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
  • 14. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References Задача о коммивояжёре Коммивояжёру для продажи своего барахла нужно посетить несколько городов. Требуется составить кратчайший из возможных путей. Предполагается, что все города соединены прямыми дорогами каждый с каждым. Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
  • 15. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References Концепт решения - жадный выбор Сама задача имеет множество вариантов решений от простых до более сложных. Одно из возможных решений жадный алгоритм. Принципов жадного выбора может быть несколько. Возьмём самый простой из каждого города будем ехать в самый ближайший по списку из тех, в которых мы ещё не были. Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
  • 16. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References Концепт решения - хранение данных Во многих задачах стоит вопрос, как хранить данные? Вопрос 1: как хранить местоположение городов? Простейший вариант в виде двумерного массива городов. Ключи номера городов, значения две координаты (широта и долгота в оригинале, но мы решаем в плоской задаче, поэтому x и y ). Вопрос 2: надо как-то хранить города, в которых мы уже были. Для этого можно завести булевский одномерный массив длиной в количество городов. Если мы побывали в i-ом городе, то делаем i-ый элемент этого массива равным истине. По умолчанию выставляем все элементы равными лжи. Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
  • 17. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References Алгоритм 1 Напишем функцию, вычисляющую по теореме Пифагора расстояние между двумя городами. На вход координаты городов (в виде двух массивов), на выходе вещественное число. 2 Допустим, мы начинаем в точке (0,0). Так как нам надо пройтись на всем N городам, зададим цикл от 0 до N − 1 (по количеству шагов). 3 Перед этим заведём две переменные, показывающие наше текущее местоположение. 4 Вычислим ближайший к нашему текущему местоположению город. Для этого пройдёмся по всем городам, в которых мы ещё не были (циклом, не рассматриваем такие города, у которых булевское значение соответствующего элемента равно истине). Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
  • 18. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References Алгоритм 5 Вычисление ближайшего города похоже на вычисление минимального элемента массива, только с дополнительным условием в виде истинности элемента булевского массива. Расстояние между городами вычисляем с помощью заданной функции. 6 Вычислив ближайший город, выведем его на экран, как элемент маршрута. Заменим переменные, в которых мы храним текущие координаты. 7 В булевском массиве напротив соответствующего города поставим флажок ИСТИНА. 8 Повторяем операцию вплоть до последнего города. Заканчиваем вместе с первым циклом. Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
  • 19. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References Задание Написать программу для решения задачи о коммивояжёре по предложенному алгоритму. Придумать такое расположение городов, когда предложенный алгоритм работает очень некорректно (не более 6 городов). (*) Решить задачу в пространственном случае, когда для каждого города хранятся широта и долгота, а расстояния вычисляются на сфере, а не в плоскости. Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
  • 20. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References References Все презентации доступны на http://school.smirik.ru! Вопросы, предложения, д/з: smirik@gmail.com Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.