Page 229 - Bkhargava_-_Grokaem_algoritmy
P. 229

228    Глава 9. Динамическое программирование


        И так, Алекс ввел строку hish. Какое слово он хотел ввести на самом деле:
        fish или vista?


        Построение таблицы

        Как должна выглядеть таблица для этой задачи? Вы должны ответить на
        следующие вопросы.

        о Какие значения должны содержаться в ячейках?
        о Как разбить эту задачу на подзадачи?

        о Каков смысл осей таблицы?

        В динамическом программировании вы пытаетесь максимизировать неко­
        торую характеристику.  В данном случае ищется самая длинная подстрока,
        общая в двух словах. Какую общую подстроку содержат hish и fish?  А как
        насчет hish и vista? Именно это требуется вычислить.

        Как говорилось ранее, значения в ячейках обычно представляют ту характе­
        ристику, которую вы пытаетесь оптимизировать. Вероятно, в данном случае
        этой характеристикой будет число: длина самой длинной подстроки,  общей
        для двух строк.

        Как разделить эту задачу на подзадачи? Например,  можно заняться срав­
        нением подстрок. Вместо того чтобы сравнивать hish иfish, можно сначала
        сравнить his и fis.  Каждая ячейка будет содержать длину самой длинной
        подстроки, общей для двух подстрок. Такое решение также подсказывает,
        что строками и столбцами таблицы, вероятно, будут два слова. А значит,
        таблица будет выглядеть примерно так:

                                        \  s        н

                                                 1
                                     '
                            f








                                       1

                                                         www.trk.kg
   224   225   226   227   228   229   230   231   232   233   234