Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TA1_2.DOC
Скачиваний:
11
Добавлен:
02.11.2018
Размер:
444.42 Кб
Скачать

Алгоритм 3.1.

Вход. r0, r1,..., rn, где ri -1 и ri - числа строк и столбцов матрицы M i.

Выход. Минимальная сложность умножения матриц Mi в предположении, что для умножения (pq)-матрицы на (qr)-матрицу требуется pqr операций.

Метод:

begin

for i = 1 to n do mii = 0;

for l = 1 to n-1 do

for i = 1 to n-1 do

begin

j = i+l;

mij = MIN (mik+mk+1,j + ri-1rkrj);

ik<j

end;

write m1n;

end

m1n - стоимость пути.

Для того, чтобы получить порядок, в котором можно производить умножения, надо приписать каждой клетке таблицы то значение k , на котором достигается минимум в (*).

§ 4. Редактирующее расстояние

Задача.

Определение слова, похожего на какое-то слово. ( Распознавание ошибки в написании слова и предложение вариантов ее исправления).

Разрешены операции:

  • забыть букву,

  • вписать лишнюю букву,

  • перепутать букву.

Чтобы определить похожие слова, надо ввести понятие расстояния между словами (s1, s2).

Затем опрашивается база данных и выдается либо слово из базы данных, полностью совпадающее с проверяемым словом s, либо множество слов {q | (q,s)  k}, где k­  фиксированное число.

Стоимость каждой операции над словом 1.

Лемма.

 (s1, s2) = (s2, s1) ( )

Для любой из перечисленных операций существует обратная:

вставка  удаление

замена  обратная замена

Таким образом мы показали, что это метрика:

  1.  (s1, s2)  0

  2.  (s1, s2) = (s2, s1) ( условие леммы )

  3.  (s1, s2)  (s1, s3) + (s3, s2)

Веса команд (их относительная стоимость) несущественны.

Можно ввести некую функцию, определяющую часоту ошибок.

Например, ie  часто встречающаяся ошибка, zb  редко встречающаяся.

Необходимо эффективно находить расстояние . Из одного алфавита можно перейти к другому и вычислять расстояние там, а потом вернуться назад в исходный алфавит. В данном случае сложность поиска даже больше, чем O(log2 n).

Варианты поиска:

  1. перебор  время  exp (долго ).

  2. методы динамического программирования  более короткий способ.

Пример.

Пусть X = Aa, Y = Bb.

Пусть есть три способа получить XY:

  1. Aa B & b

  2. A Bb & a - удаление a

  3. A B & a b

Алгоритм 4.1.

Вход. Две строки a1... ak , b1...bk

Выход

  1. Строится таблица M = {mij}, i = 1..k, j = 1.. m, где mij = ( ai , bj).

Варианты вычисления элементов таблицы:

а) mij = MIN ( mi,j-1+1; mi-1,j+1; mi-1,j-1 + (biaj ) ) ,

б)

Таблица должна быть симметричной!

2) Ищется минимальный по времени и стоимости путь.

Сложность алгоритма O(mn)  размер матрицы  стоимость операций ( = 1).

Если взять другие разрешенные операции:

  • { удаление, перестановка }  универсальная переборная задача.

  • { вставка, удаление, замена, перестановка }  полиномиальная.

Задача.

Найти n1/2

Алгоритм 4.2.

1) Самый простой: идем снизу, пока квадрат числа не достигнет (n+1)

a = 0;

while (a+1)2n do a++;

Сложность алгоритма O(n1/2).

2) Аналогия быстрого умножения.

a = 0;

d = n;

repeat

d = d/2;

if ((a+d)2n) a + = d;

until (d == 1);

Сложность алгоритма O(log2 n), так как d каждые два шага уменьшается в 2 раза.

Корректность.

Надо показать, что ряд 00 k/2 + 10  k/2 / 2 + ... + s01 может принимать любые значения в диапазоне [0, k-1].

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]