Алгоритм Фрейвальдса

Алгоритм Фрейвальдса (названный в честь Русиньша Мартиньша Фрейвальдса ) — вероятностный рандомизированный алгоритм, используемый для проверки умножения матриц . Для трех матриц n  ×  n , и общая проблема состоит в проверке того, . Наивный алгоритм вычислил бы произведение явно и почленно сравнил бы, равно ли это произведение . Однако самый известный алгоритм умножения матриц работает со временем. [1] Алгоритм Фрейвальдса использует рандомизацию, чтобы сократить это время до [2] с высокой вероятностью . Со временем алгоритм может проверить произведение матриц с вероятностью неудачи менее . А {\displaystyle А} Б {\displaystyle Б} С {\displaystyle С} А × Б = С {\displaystyle A\times B=C} А × Б {\displaystyle A\times B} С {\displaystyle С} О ( н 2.3729 ) {\displaystyle O(n^{2.3729})} О ( н 2 ) {\displaystyle O(n^{2})} О ( к н 2 ) {\displaystyle O(kn^{2})} 2 к {\displaystyle 2^{-k}}

Алгоритм

Вход

Три матрицы n  ×  n , , и . А {\displaystyle А} Б {\displaystyle Б} С {\displaystyle С}

Выход

Да, если ; Нет, в противном случае. А × Б = С {\displaystyle A\times B=C}

Процедура

  1. Сгенерировать случайный вектор 0/1 размером n  × 1 . г {\displaystyle {\vec {r}}}
  2. Вычислить . П = А × ( Б г ) С г {\displaystyle {\vec {P}}=A\times (B{\vec {r}})-C {\vec {r}}}
  3. Выведите «Да», если ; «Нет», в противном случае. П = ( 0 , 0 , , 0 ) Т {\displaystyle {\vec {P}}=(0,0,\ldots ,0)^{T}}

Ошибка

Если , то алгоритм всегда возвращает "Да". Если , то вероятность того, что алгоритм возвращает "Да", меньше или равна половине. Это называется односторонней ошибкой . А × Б = С {\displaystyle A\times B=C} А × Б С {\displaystyle A\times B\neq C}

При повторении алгоритма k раз и возврате результата «Да» только в том случае, если все итерации дали результат «Да», достигается время выполнения и вероятность ошибки . О ( к н 2 ) {\displaystyle O(kn^{2})} 1 / 2 к {\displaystyle \leq 1/2^{k}}

Пример

Предположим, что требуется определить:

А Б = [ 2 3 3 4 ] [ 1 0 1 2 ] = ? [ 6 5 8 7 ] = С . {\displaystyle AB={\begin{bmatrix}2&3\\3&4\end{bmatrix}}{\begin{bmatrix}1&0\\1&2\end{bmatrix}}{\stackrel {?}{=}}{\begin{bmatrix}6&5\\8&7\end{bmatrix}}=C.}

Выбирается случайный двухэлементный вектор с элементами, равными, скажем, 0 или 1  , и используется для вычисления: г = [ 1 1 ] {\displaystyle {\vec {r}}={\begin{bmatrix}1\\1\end{bmatrix}}}

А × ( Б г ) С г = [ 2 3 3 4 ] ( [ 1 0 1 2 ] [ 1 1 ] ) [ 6 5 8 7 ] [ 1 1 ] = [ 2 3 3 4 ] [ 1 3 ] [ 11 15 ] = [ 11 15 ] [ 11 15 ] = [ 0 0 ] . {\displaystyle {\begin{aligned}A\times (B{\vec {r}})-C{\vec {r}}&={\begin{bmatrix}2&3\\3&4\end{bmatrix}}\left({\begin{bmatrix}1&0\\1&2\end{bmatrix}}{\begin{bmatrix}1\\1\end{bmatrix}}\right)-{\begin{bmatrix}6&5\\8&7\end{bmatrix}}{\begin{bmatrix}1\\1\end{bmatrix}}\\&={\begin{bmatrix}2 &3\\3&4\end{bmatrix}}{\begin{bmatrix}1\\3\end{bmatrix}}-{\begin{bmatrix}11\\15\end{bmatrix}}\\&={\begin{bmatrix}11\\15\end{bmatrix}}-{\begin{bmatrix}11\\15\end{bmatrix}}\\&={\begin{bmatrix}0\\0\end{bmatrix}}.\end{выровнено}}}

Это дает нулевой вектор, что предполагает возможность того, что AB = C. Однако если во втором испытании вектор будет выбран, результат станет следующим: г = [ 1 0 ] {\displaystyle {\vec {r}}={\begin{bmatrix}1\\0\end{bmatrix}}}

А × ( Б г ) С г = [ 2 3 3 4 ] ( [ 1 0 1 2 ] [ 1 0 ] ) [ 6 5 8 7 ] [ 1 0 ] = [ 1 1 ] . {\displaystyle A\times (B{\vec {r}})-C{\vec {r}}={\begin{bmatrix}2&3\\3&4\end{bmatrix}}\left({\begin{bmatrix}1&0\\1&2\end{bmatrix}}{\begin{bmatrix}1\\0\end{bmatrix}}\right)-{\begin{bmatrix}6&5\\8&7\end{bmatrix}}{\begin{bmatrix}1\\0\end{bmatrix}}={\begin{bmatrix}-1\\-1\end{bmatrix}}.}

Результат не равен нулю, что доказывает, что на самом деле AB ≠ C.

Имеется четыре двухэлементных вектора 0/1, и половина из них дает нулевой вектор в этом случае ( и ), поэтому вероятность случайного выбора их в двух испытаниях (и ложного заключения, что AB=C) составляет 1/2 2 или 1/4. В общем случае доля r , дающая нулевой вектор, может быть меньше 1/2, и будет использоваться большее количество испытаний (например, 20), что делает вероятность ошибки очень малой. г = [ 0 0 ] {\displaystyle {\vec {r}}={\begin{bmatrix}0\\0\end{bmatrix}}} г = [ 1 1 ] {\displaystyle {\vec {r}}={\begin{bmatrix}1\\1\end{bmatrix}}}

Анализ ошибок

Пусть p равно вероятности ошибки. Мы утверждаем, что если A  ×  B = C , то p = 0, а если A  ×  BC , то p ≤ 1/2.

СлучайА × Б=С

П = А × ( Б г ) С г = ( А × Б ) г С г = ( А × Б С ) г = 0 {\displaystyle {\begin{aligned}{\vec {P}}&=A\times (B{\vec {r}})-C{\vec {r}}\\&=(A\times B){\vec {r}}-C{\vec {r}}\\&=(A\times B-C){\vec {r}}\\&={\vec {0}}\end{aligned}}}

Это не зависит от значения , поскольку используется только это . Следовательно, вероятность ошибки в этом случае равна: r {\displaystyle {\vec {r}}} A × B C = 0 {\displaystyle A\times B-C=0}

Pr [ P 0 ] = 0 {\displaystyle \Pr[{\vec {P}}\neq 0]=0}

СлучайА × БС

Пусть такой, что D {\displaystyle D}

P = D × r = ( p 1 , p 2 , , p n ) T {\displaystyle {\vec {P}}=D\times {\vec {r}}=(p_{1},p_{2},\dots ,p_{n})^{T}}

Где

D = A × B C = ( d i j ) {\displaystyle D=A\times B-C=(d_{ij})} .

Так как , то имеем, что некоторый элемент из не равен нулю. Предположим, что элемент . По определению умножения матриц имеем: A × B C {\displaystyle A\times B\neq C} D {\displaystyle D} d i j 0 {\displaystyle d_{ij}\neq 0}

p i = k = 1 n d i k r k = d i 1 r 1 + + d i j r j + + d i n r n = d i j r j + y {\displaystyle p_{i}=\sum _{k=1}^{n}d_{ik}r_{k}=d_{i1}r_{1}+\cdots +d_{ij}r_{j}+\cdots +d_{in}r_{n}=d_{ij}r_{j}+y} .

Для некоторой константы . Используя теорему Байеса , мы можем разбить по : y {\displaystyle y} y {\displaystyle y}

Мы используем это:

Pr [ p i = 0 | y = 0 ] = Pr [ r j = 0 ] = 1 2 {\displaystyle \Pr[p_{i}=0|y=0]=\Pr[r_{j}=0]={\frac {1}{2}}}
Pr [ p i = 0 | y 0 ] = Pr [ r j = 1 d i j = y ] Pr [ r j = 1 ] = 1 2 {\displaystyle \Pr[p_{i}=0|y\neq 0]=\Pr[r_{j}=1\land d_{ij}=-y]\leq \Pr[r_{j}=1]={\frac {1}{2}}}

Подставляя их в уравнение ( 1 ), получаем:

Pr [ p i = 0 ] 1 2 Pr [ y = 0 ] + 1 2 Pr [ y 0 ] = 1 2 Pr [ y = 0 ] + 1 2 ( 1 Pr [ y = 0 ] ) = 1 2 {\displaystyle {\begin{aligned}\Pr[p_{i}=0]&\leq {\frac {1}{2}}\cdot \Pr[y=0]+{\frac {1}{2}}\cdot \Pr[y\neq 0]\\&={\frac {1}{2}}\cdot \Pr[y=0]+{\frac {1}{2}}\cdot (1-\Pr[y=0])\\&={\frac {1}{2}}\end{aligned}}}

Поэтому,

Pr [ P = 0 ] = Pr [ p 1 = 0 p i = 0 p n = 0 ] Pr [ p i = 0 ] 1 2 . {\displaystyle \Pr[{\vec {P}}=0]=\Pr[p_{1}=0\land \dots \land p_{i}=0\land \dots \land p_{n}=0]\leq \Pr[p_{i}=0]\leq {\frac {1}{2}}.}

Это завершает доказательство.

Последствия

Простой алгоритмический анализ показывает, что время выполнения этого алгоритма составляет (в нотации O большое ). Это превосходит время выполнения классического детерминированного алгоритма (или при использовании быстрого умножения матриц ). Анализ ошибок также показывает, что если алгоритм выполняется раз, может быть достигнута граница ошибки менее , экспоненциально малая величина. Алгоритм также быстр на практике из-за широкой доступности быстрых реализаций для произведений матрицы и вектора. Следовательно, использование рандомизированных алгоритмов может ускорить очень медленный детерминированный алгоритм . O ( n 2 ) {\displaystyle O(n^{2})} O ( n 3 ) {\displaystyle O(n^{3})} O ( n 2.373 ) {\displaystyle O(n^{2.373})} k {\displaystyle k} 1 / 2 k {\displaystyle 1/2^{k}}

Алгоритм Фрейвальдса часто упоминается во введениях в вероятностные алгоритмы из-за его простоты и того, как он иллюстрирует превосходство вероятностных алгоритмов на практике для некоторых задач.

Смотрите также

Ссылки

  1. ^ Уильямс, Вирджиния Василевска (сентябрь 2014 г.). «Преодоление барьера Копперсмита-Винограда».
  2. ^ Рагхаван, Прабхакар (1997). «Рандомизированные алгоритмы». ACM Computing Surveys . 28 : 33–37 . doi : 10.1145/234313.234327 . S2CID  207196543.
  • Фрейвальдс, Р. (1977). «Вероятностные машины могут использовать меньше времени выполнения». Обработка информации 77: труды Конгресса IFIP 77, Торонто, 8-12 августа 1977 г. Северная Голландия. стр.  839–842 . ISBN 0-7204-0755-9. OCLC  878720415.
  • Митценмахер, Майкл ; Упфал, Эли (2005). "1.3 Приложение: Проверка умножения матриц". Вероятность и вычисления: Рандомизированные алгоритмы и вероятностный анализ . Cambridge University Press. С.  8–12 . ISBN 0-521-83540-2.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Freivalds%27_algorithm&oldid=1268937207"