ݺߣ

ݺߣShare a Scribd company logo
Жадные алгоритмы        Задача о размене монет         Задача о коммивояжёре    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 (18)

Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Nikolay Grebenshikov
дистанционка
дистанционкадистанционка
дистанционка
tajnan
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Nikolay Grebenshikov
Кванторы. Квантор всеобщности. Квантор существования.Равносильные формулы лог...
Кванторы. Квантор всеобщности. Квантор существования.Равносильные формулы лог...Кванторы. Квантор всеобщности. Квантор существования.Равносильные формулы лог...
Кванторы. Квантор всеобщности. Квантор существования.Равносильные формулы лог...
aleksashka3
Динамическое программирование на ruby
Динамическое программирование на rubyДинамическое программирование на ruby
Динамическое программирование на ruby
Evgeny Smirnov
20091025 algorithmsfornphardproblems kulikov_lecture03
20091025 algorithmsfornphardproblems kulikov_lecture0320091025 algorithmsfornphardproblems kulikov_lecture03
20091025 algorithmsfornphardproblems kulikov_lecture03
Computer 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
Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Nikolay Grebenshikov
дистанционка
дистанционкадистанционка
дистанционка
tajnan
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Nikolay Grebenshikov
Кванторы. Квантор всеобщности. Квантор существования.Равносильные формулы лог...
Кванторы. Квантор всеобщности. Квантор существования.Равносильные формулы лог...Кванторы. Квантор всеобщности. Квантор существования.Равносильные формулы лог...
Кванторы. Квантор всеобщности. Квантор существования.Равносильные формулы лог...
aleksashka3
Динамическое программирование на ruby
Динамическое программирование на rubyДинамическое программирование на ruby
Динамическое программирование на ruby
Evgeny Smirnov
20091025 algorithmsfornphardproblems kulikov_lecture03
20091025 algorithmsfornphardproblems kulikov_lecture0320091025 algorithmsfornphardproblems kulikov_lecture03
20091025 algorithmsfornphardproblems kulikov_lecture03
Computer 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

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

Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...
Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...
Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...
Mikhail Kurnosov
В поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, НигмаВ поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, Нигма
yaevents
Алгоритм
АлгоритмАлгоритм
Алгоритм
Vlad Ivanishin
01 вводная
01 вводная01 вводная
01 вводная
serega.ovukhov
Основы комбинаторики II. Разбор задач
Основы комбинаторики II. Разбор задачОсновы комбинаторики II. Разбор задач
Основы комбинаторики II. Разбор задач
DEVTYPE
Михаил Александров, Индуктивное моделирование
Михаил Александров, Индуктивное моделированиеМихаил Александров, Индуктивное моделирование
Михаил Александров, Индуктивное моделирование
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_2013
Yandex
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Nikolay Grebenshikov
Лекция 9 Жадные алгоритмы
Лекция 9 Жадные алгоритмыЛекция 9 Жадные алгоритмы
Лекция 9 Жадные алгоритмы
simple_people
Лекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмыЛекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмы
Mikhail Kurnosov
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
sharikdp
Моделирование поведения сложных динамических систем
Моделирование поведения сложных динамических системМоделирование поведения сложных динамических систем
Моделирование поведения сложных динамических систем
Спецсеминар "Искусственный Интеллект" кафедры АЯ ВМК МГУ
Анализ количества посетителей на сайте [Считаем уникальные элементы]
Анализ количества посетителей на сайте [Считаем уникальные элементы]Анализ количества посетителей на сайте [Считаем уникальные элементы]
Анализ количества посетителей на сайте [Считаем уникальные элементы]
Qrator Labs
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Ontico
Семплирование на основе марковских цепей
Семплирование на основе марковских цепейСемплирование на основе марковских цепей
Семплирование на основе марковских цепей
soukhinov
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Mikhail Kurnosov
Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...
Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...
Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...
Mikhail Kurnosov
В поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, НигмаВ поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, Нигма
yaevents
Основы комбинаторики II. Разбор задач
Основы комбинаторики II. Разбор задачОсновы комбинаторики II. Разбор задач
Основы комбинаторики II. Разбор задач
DEVTYPE
Михаил Александров, Индуктивное моделирование
Михаил Александров, Индуктивное моделированиеМихаил Александров, Индуктивное моделирование
Михаил Александров, Индуктивное моделирование
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_2013
Yandex
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Nikolay Grebenshikov
Лекция 9 Жадные алгоритмы
Лекция 9 Жадные алгоритмыЛекция 9 Жадные алгоритмы
Лекция 9 Жадные алгоритмы
simple_people
Лекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмыЛекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмы
Mikhail Kurnosov
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
sharikdp
Анализ количества посетителей на сайте [Считаем уникальные элементы]
Анализ количества посетителей на сайте [Считаем уникальные элементы]Анализ количества посетителей на сайте [Считаем уникальные элементы]
Анализ количества посетителей на сайте [Считаем уникальные элементы]
Qrator Labs
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Ontico
Семплирование на основе марковских цепей
Семплирование на основе марковских цепейСемплирование на основе марковских цепей
Семплирование на основе марковских цепей
soukhinov
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Mikhail Kurnosov

More from Evgeny Smirnov (20)

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

Алгоритмы на 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 классы Алгоритмы. Жадные алгоритмы.