Хакасский государственный университет им. Н.Ф. Катанова

     Структуры и алгоритмы обработки данных

   Лекция: Методы программирования.

       Николай Гребенщиков, www.grebenshikov.ru
Методы программирования


 • Жадные алгоритмы - производится локально оптималь-
   ный выбор в надежде, что он приведет к оптимальному
   решению глобальной задачи.


 • Динамическое программрование - разбить большую
   задачу на подзадачи и не вычислять подзадачи более од-
   ного раза (использовать память).




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


 • Не всегда дают оптимальный реультат. Например, рас-
   краска графа.


 • Также являются жадными: алгоритмы поиска минималь-
   ного остовного дерева, алгоритм Дейкстры, алгоритм Хафф-
   мана.




                                                   2
Задача о выборе процессов

Дано: множество процессов S = {a1, a2, . . . , an}, процессам
требуется некоторый ресурс, который одновременно может
использоваться лишь одним процессом. Каждый процесс ai
характеризуется начальным моментом si и конечным мо-
ментом si, где 0 ≤ si < fi < ∞. Будучи выбран, процесс ai
длится в течение [si, fi), а процессы ai и aj совместимы,
если интервалы [si, fi) и sj , fj не перекрываются.

Найти: подмножество взаимно совместимых процессов, об-
разующих множество максимального размера.


                                                        3
Задача о выборе процессов. Оптимальное решение.

Пусть S осортировано по f в порядке возрастания.

Aij = sk ∈ S : fi ≤ sk < fk ≤ sj - подмножество процессов,
которые можно выполнить в промежутке между заверше-
нием ai и началом aj

Оптимальное решение задачи Sij равно Aij = Aik               ak Akj .

            
            0,                                        при Sij =
c[i, j] =
            maxi<k<j,a ∈S {c[i, k] + c[k, j] + 1} ,   при Sij =
                       k  ij



                                                                   4
Задача о выборе процессов. Жадный алгоритм.




                                              5
Задача о выборе процессов. Жадный алгоритм.




                                              6
Задача о выборе процессов

T (n) = Θ(N logN ). Почему?

Доказательство оптимальности:




                                7
Задача о рюкзаке.




                    8
Жадный метод


1. Привести задачу оптимизации к виду, когда после сделан-
   ного выбора остается решить только одну поздзадачу.


2. Доказать, что существует оптимальное решение, которое
   можно получить жадным выбором и такой выбор всегда
   допустим.


3. Показать, что после жадного выбора остается подзадача,
   которую можно решить жадным методом.


                                                     9
На семинар


 • Теоретические основы жадных алгоритмов.


 • Задача планировки заданий, выполняющихся на одном
   процессоре.




                                               10
Динамическое программирование - применяется если под-
задачи не являются независимыми.


1. Описание структуры оптимального решения.


2. Рекурсивное определение значения оптимального реше-
   ния.


3. Вычисление значения с помощью восходящего анализа.


4. Составление оптимального решения на основе информа-
   ции, полученной предыдущих этапах.

                                                 11
Числа Фиббоначи
          
          1,                       при n = 1, n = 2
F (n) =
          f (n − 1) + f (n − 2),   при n > 2

Trecursive(n) = O(2n)

Ttable(n) = O(n) - это и есть динамическое программирова-
ние.




                                                       12
Дискретная задача о рюкзаке

Дано: N предметов {x1, x2, . . . , xN } с различной стоймостью
Vi и весом Wi, максимальный вес Wmax.

Найти: подмножество предметов, вес которых бы не привы-
шал Wmax, стоймость которых была бы максимальной.




                                                         13
Дискретная задача о рюкзаке. Описание структуры

Ciw - максимальная стоимость предметов из множества
{x1, x2, . . . , xi} при максимальном весе равном w.
        
        0,
        
        
                                            если i = 0 ∨ w = 0
Ciw =     C      ,                           если Wi > w
         (i−1)w
                                             если Wi ≤ w
        
        max(C
               (i−1)w , C(i−1)(w−Wi ) + Vi
        


Ответ: CN W



                                                              14
Дискретная задача о рюкзаке. Алгоритм.
1    for (i=0;i<=N ;i++) C[i][0] = 0;
2    for (w=0;w<=Wmax;w++) C[0][w] = 0;
3
4    for (i=1;i<=N;i++)
5      for (w=1;w<=Wmax;w++) {
6        if (Wi[i] > w)
7          C[i][w] = C[i-1][w];
8        else
9          C[i][w] = max(C[i-1][w] , C[i-1][w-Wi[i]]+Vi[i]);
10     }
11
12   output(C[N][Wmax]);



                                                               15
Дискретная задача о рюкзаке. Анализ алгоритма.

T (N, Wmax) = Θ(N · Wmax)




                                                 16
Отличие строк. Edit distance problem

Дано: две строки, стоимость удаления, вставки и замены
символа.

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

Применение: сравнение ДНК.




                                                 17
Отличие строк. Описание структуры

d(s1, s2) - количество действий по переобразованию строки
s1 в s2 .
              
              0,
              
                                       если s1 =<> ∨s2 =<>
              
                                              (s1 =<> ∧s2 = s)∨
              
              
              |s|,
              
                                       если
                                              (s1 = s ∧ s2 =<>)
              
              
              
              
              
d(s1, s2) =     min(d(s1, s2
                         ˆ ˆ
              
              
               +if (c1 = c2)0else1),
              
                                        если s1 = s1 + c1, s2 = s2 + c2
                                                  ˆ             ˆ
              
              
              
               d(s , s ),
                   1 ˆ
              
              
              
                      2
              
              
                d(s1, s2))
                  ˆ


                                                              18
Отличие строк. Алгоритм.

     m[0..|s1|,0..|s2|]
     m[i,j] = d(s1[1..i], s2[1..j]).
1    m[0][0] = 0;
2    for (i=1; i<length(s1); i++) m[i][0] = i;
3    for (j=1; j<length(s2); j++) m[0][j] = j;
4
5    for (i=0; i<length(s1); i++)
6      for (j=0; j<length(s2); j++) {
7        val = (s1[i] == s2[j]) ? 0 : 1;
8        m[i][j] = min( m[i-1][j-1] + val,
9                      min(m[i-1][j]+1 , m[i][j-1]+1));
10     }


                                                          19
Отличие строк. Анализ алгоритма.

T (s1, s2) = Θ(|s1| · |s2|)




                                   20
На семинар


 • Задача составления расписания конвейера.


 • Задача перемножения цепочки матриц.


 • Поиск самой длинной общей подпоследовательности.


 • Построение оптимального бинарного дерева поиска.


 • Задача оптимальной триангуляции многоугольника.

                                                     21
Лабораторная работа

В далекой стране Тарватии разгорелся бензиновый кризис.
Вследствие чего цены на топливо в каждом городе отлича-
лись в значительной степени. В это время принц Педро Де
Ля Вега решил проехать по своей стране на автомобиле. Он
проложил маршрут, так что ну пути его следования будут
находиться N городов. В каждом из этих городов есть за-
правочные станции. Агенты принца сообщили ему стоимость
бензина в каждом из городов. Помогите, пожалуйста, Педро
выбрать в каких городах ему заправиться, чтобы потратить
на бензин как можно меньше денег. Примите во внимание,
что принц всегда заправляет полный бак.

                                                   22
Список литературы


 • David M. Mount, The Lecture notes: Design and Analysis
   of Computer Algorithms. [Электронный ресурс] / Dept. of
   Computer Science, University of Maryland, 2004. - Режим
   доступа: http://www.cs.umd.edu/ mount/451/Lects/451lects.pdf
   . - сс.11-25


 • Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгорит-
   мы: построение и анализ, 2-е издание. - М. : Издатель-
   ский дом “Вильямс”, 2007. сс.386-481.


                                                    23

Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки данных"

  • 1.
    Хакасский государственный университетим. Н.Ф. Катанова Структуры и алгоритмы обработки данных Лекция: Методы программирования. Николай Гребенщиков, www.grebenshikov.ru
  • 2.
    Методы программирования •Жадные алгоритмы - производится локально оптималь- ный выбор в надежде, что он приведет к оптимальному решению глобальной задачи. • Динамическое программрование - разбить большую задачу на подзадачи и не вычислять подзадачи более од- ного раза (использовать память). 1
  • 3.
    Жадные алгоритмы •Не всегда дают оптимальный реультат. Например, рас- краска графа. • Также являются жадными: алгоритмы поиска минималь- ного остовного дерева, алгоритм Дейкстры, алгоритм Хафф- мана. 2
  • 4.
    Задача о выборепроцессов Дано: множество процессов S = {a1, a2, . . . , an}, процессам требуется некоторый ресурс, который одновременно может использоваться лишь одним процессом. Каждый процесс ai характеризуется начальным моментом si и конечным мо- ментом si, где 0 ≤ si < fi < ∞. Будучи выбран, процесс ai длится в течение [si, fi), а процессы ai и aj совместимы, если интервалы [si, fi) и sj , fj не перекрываются. Найти: подмножество взаимно совместимых процессов, об- разующих множество максимального размера. 3
  • 5.
    Задача о выборепроцессов. Оптимальное решение. Пусть S осортировано по f в порядке возрастания. Aij = sk ∈ S : fi ≤ sk < fk ≤ sj - подмножество процессов, которые можно выполнить в промежутке между заверше- нием ai и началом aj Оптимальное решение задачи Sij равно Aij = Aik ak Akj .  0, при Sij = c[i, j] = maxi<k<j,a ∈S {c[i, k] + c[k, j] + 1} , при Sij = k ij 4
  • 6.
    Задача о выборепроцессов. Жадный алгоритм. 5
  • 7.
    Задача о выборепроцессов. Жадный алгоритм. 6
  • 8.
    Задача о выборепроцессов T (n) = Θ(N logN ). Почему? Доказательство оптимальности: 7
  • 9.
  • 10.
    Жадный метод 1. Привестизадачу оптимизации к виду, когда после сделан- ного выбора остается решить только одну поздзадачу. 2. Доказать, что существует оптимальное решение, которое можно получить жадным выбором и такой выбор всегда допустим. 3. Показать, что после жадного выбора остается подзадача, которую можно решить жадным методом. 9
  • 11.
    На семинар •Теоретические основы жадных алгоритмов. • Задача планировки заданий, выполняющихся на одном процессоре. 10
  • 12.
    Динамическое программирование -применяется если под- задачи не являются независимыми. 1. Описание структуры оптимального решения. 2. Рекурсивное определение значения оптимального реше- ния. 3. Вычисление значения с помощью восходящего анализа. 4. Составление оптимального решения на основе информа- ции, полученной предыдущих этапах. 11
  • 13.
    Числа Фиббоначи  1, при n = 1, n = 2 F (n) = f (n − 1) + f (n − 2), при n > 2 Trecursive(n) = O(2n) Ttable(n) = O(n) - это и есть динамическое программирова- ние. 12
  • 14.
    Дискретная задача орюкзаке Дано: N предметов {x1, x2, . . . , xN } с различной стоймостью Vi и весом Wi, максимальный вес Wmax. Найти: подмножество предметов, вес которых бы не привы- шал Wmax, стоймость которых была бы максимальной. 13
  • 15.
    Дискретная задача орюкзаке. Описание структуры Ciw - максимальная стоимость предметов из множества {x1, x2, . . . , xi} при максимальном весе равном w.  0,    если i = 0 ∨ w = 0 Ciw = C , если Wi > w  (i−1)w если Wi ≤ w  max(C (i−1)w , C(i−1)(w−Wi ) + Vi  Ответ: CN W 14
  • 16.
    Дискретная задача орюкзаке. Алгоритм. 1 for (i=0;i<=N ;i++) C[i][0] = 0; 2 for (w=0;w<=Wmax;w++) C[0][w] = 0; 3 4 for (i=1;i<=N;i++) 5 for (w=1;w<=Wmax;w++) { 6 if (Wi[i] > w) 7 C[i][w] = C[i-1][w]; 8 else 9 C[i][w] = max(C[i-1][w] , C[i-1][w-Wi[i]]+Vi[i]); 10 } 11 12 output(C[N][Wmax]); 15
  • 17.
    Дискретная задача орюкзаке. Анализ алгоритма. T (N, Wmax) = Θ(N · Wmax) 16
  • 18.
    Отличие строк. Editdistance problem Дано: две строки, стоимость удаления, вставки и замены символа. Найти: минимальное количество действий необходимых для преобразования одной строки в другую. Применение: сравнение ДНК. 17
  • 19.
    Отличие строк. Описаниеструктуры d(s1, s2) - количество действий по переобразованию строки s1 в s2 .  0,   если s1 =<> ∨s2 =<>  (s1 =<> ∧s2 = s)∨   |s|,   если (s1 = s ∧ s2 =<>)      d(s1, s2) = min(d(s1, s2 ˆ ˆ    +if (c1 = c2)0else1),  если s1 = s1 + c1, s2 = s2 + c2 ˆ ˆ     d(s , s ), 1 ˆ     2   d(s1, s2)) ˆ 18
  • 20.
    Отличие строк. Алгоритм. m[0..|s1|,0..|s2|] m[i,j] = d(s1[1..i], s2[1..j]). 1 m[0][0] = 0; 2 for (i=1; i<length(s1); i++) m[i][0] = i; 3 for (j=1; j<length(s2); j++) m[0][j] = j; 4 5 for (i=0; i<length(s1); i++) 6 for (j=0; j<length(s2); j++) { 7 val = (s1[i] == s2[j]) ? 0 : 1; 8 m[i][j] = min( m[i-1][j-1] + val, 9 min(m[i-1][j]+1 , m[i][j-1]+1)); 10 } 19
  • 21.
    Отличие строк. Анализалгоритма. T (s1, s2) = Θ(|s1| · |s2|) 20
  • 22.
    На семинар •Задача составления расписания конвейера. • Задача перемножения цепочки матриц. • Поиск самой длинной общей подпоследовательности. • Построение оптимального бинарного дерева поиска. • Задача оптимальной триангуляции многоугольника. 21
  • 23.
    Лабораторная работа В далекойстране Тарватии разгорелся бензиновый кризис. Вследствие чего цены на топливо в каждом городе отлича- лись в значительной степени. В это время принц Педро Де Ля Вега решил проехать по своей стране на автомобиле. Он проложил маршрут, так что ну пути его следования будут находиться N городов. В каждом из этих городов есть за- правочные станции. Агенты принца сообщили ему стоимость бензина в каждом из городов. Помогите, пожалуйста, Педро выбрать в каких городах ему заправиться, чтобы потратить на бензин как можно меньше денег. Примите во внимание, что принц всегда заправляет полный бак. 22
  • 24.
    Список литературы •David M. Mount, The Lecture notes: Design and Analysis of Computer Algorithms. [Электронный ресурс] / Dept. of Computer Science, University of Maryland, 2004. - Режим доступа: http://www.cs.umd.edu/ mount/451/Lects/451lects.pdf . - сс.11-25 • Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгорит- мы: построение и анализ, 2-е издание. - М. : Издатель- ский дом “Вильямс”, 2007. сс.386-481. 23