Обобщенный закон распределения

редактировать

Обобщенный закон распределения (GDL) является обобщением свойства распределения что дает начало общему алгоритму передачи сообщений . Это синтез работ многих авторов в области теории информации, цифровых коммуникаций, обработки сигналов, статистики и <581.>искусственный интеллект сообщества. Закон и алгоритм были представлены в полуучебном пособии Шриниваса М. Аджи и Роберта Дж. МакЭлиса с тем же названием.

Содержание
  • 1 Введение
  • 2 История
  • 3 Задача MPF
  • 4 GDL: алгоритм решения задачи MPF
    • 4.1 Алгоритм обобщенного закона распределения (GDL)
    • 4.2 Основы работы алгоритма
  • 5 Планирование передачи сообщений и вычисления состояний
  • 6 Построение дерева соединений
  • 7 Теорема о планировании
  • 8 Вычислительная сложность
  • 9 Ссылки
Введение

«Закон распределения в математике - это закон, связывающий операции умножения и сложения., обозначенное символически, a ∗ (b + c) = a ∗ b + a ∗ c {\ displaystyle a * (b + c) = a * b + a * c}a * (b + c) = a * b + a * c ; то есть, мономиальный множитель a {\ displaystyle a}a распределяется или применяется отдельно к каждому члену биномиального множителя b + c {\ displaystyle b + c}b + c , в результате получается произведение a ∗ b + a ∗ c {\ displaystyle a * b + a * c}a * b + a * c "- Britannica

Как видно из определения, применение закона распределения к арифметическому выражению сокращает количество операций в нем. В предыдущем примере общее количество операций уменьшилось с трех (два умножения и сложение в a ∗ b + a ∗ c {\ displaystyle a * b + a * c}a * b + a * c ) до двух ( одно умножение и одно сложение в a ∗ (b + c) {\ displaystyle a * (b + c)}a * (b + c) ). Обобщение закона распределения приводит к большому семейству быстрых алгоритмов. Это включает в себя БПФ и алгоритм Витерби.

Это более формально объясняется в следующем примере:

α (a, b) = def ∑ c, d, e ∈ A е (a, c, b) g (a, d, e) {\ displaystyle \ alpha (a, \, b) {\ stackrel {\ mathrm {def}} {=}} \ displaystyle \ sum \ limits _ {c, d, e \ in A} f (a, \, c, \, b) \, g (a, \, d, \, e)}\ alpha (a, \, b) \ stackrel {\ mathrm {def}} {=} \ displaystyle \ sum \ limits_ {c, d, e \ in A} f (a, \, c, \, b) \, g (a, \, d, \, e) где f (⋅) {\ displaystyle f (\ cdot)}f (\ cdot) и g (⋅) {\ displaystyle g (\ cdot)}g (\ cdot) - функции с действительным знаком, a, b, c, d, e ∈ A {\ displaystyle a, b, c, d, e \ in A}a, b, c, d, e \ in A и | А | = q {\ displaystyle | A | = q}| A | = q (например)

Здесь мы «маргинализируем» независимые переменные (c {\ displaystyle c}c , d {\ displaystyle d}dи e {\ displaystyle e}e ) для получения результата. Когда мы вычисляем вычислительную сложность, мы видим, что для каждого q 2 {\ displaystyle q ^ {2}}q ^ {2} пары (a, b) {\ displaystyle (a, b)}(a, b) , есть q 3 {\ displaystyle q ^ {3}}q^{3}термины из-за тройки (c, d, e) {\ displaystyle (c, d, e)}(c, d, e) , который должен участвовать в оценке α (a, b) {\ displaystyle \ alpha (a, \, b)}\ alpha (a, \, b) на каждом шаге одно сложение и одно умножение. Следовательно, общее количество необходимых вычислений составляет 2 ⋅ q 2 ⋅ q 3 = 2 q 5 {\ displaystyle 2 \ cdot q ^ {2} \ cdot q ^ {3} = 2q ^ {5}}2 \ cdot q ^ 2 \ cdot q ^ 3 = 2q ^ 5 . Следовательно, асимптотическая сложность указанной функции равна O (n 5) {\ displaystyle O (n ^ {5})}O(n^{5}).

Если мы применим закон распределения к правой части уравнения, мы получим следующее:

α (a, b) знак равно def ∑ c ∈ A f (a, c, b) ⋅ ∑ d, e ∈ A g (a, d, e) {\ displaystyle \ alpha (a, \, b) {\ stackrel {\ mathrm {def}} {=}} \ displaystyle \ sum \ limits _ {c \ in A} f (a, \, c, \, b) \ cdot \ sum _ {d, \, e \ in A} g (a, \, d, \, e)}\ альфа (a, \, b) \ stackrel {\ mathrm {def}} {=} \ displaystyle \ sum \ limits_ {c \ in A} f (a, \, c, \, b) \ cdot \ sum _ {d, \, e \ in A} g (a, \, d, \, e)

Это означает, что α (a, b) {\ displaystyle \ alpha (a, \, b)}\ alpha (a, \, b) можно описать как продукт α 1 (a, b) ⋅ α 2 (a) {\ displaystyle \ alpha _ {1} (a, \, b) \ cdot \ alpha _ {2} (a) }\ alpha_ {1} (a, \, b) \ cdot \ альфа_ {2} (а) где α 1 (a, b) = def ∑ c ∈ A f (a, c, b) {\ displaystyle \ alpha _ {1} (a, b) {\ stackrel { \ mathrm {def}} {=}} \ displaystyle \ sum \ limits _ {c \ in A} f (a, \, c, \, b)}\ alpha_ {1} (a, б) \ stackrel {\ mathrm {def}} {=} \ displaystyle \ sum \ limits_ {c \ in A} f (a, \, c, \, b) и α 2 (a) знак равно def ∑ d, е ∈ A g (a, d, e) {\ displaystyle \ alpha _ {2} (a) {\ stackrel {\ mathrm {def}} {=}} \ displaystyle \ sum \ limits _ {d, \, e \ in A} g (a, \, d, \, e)}\ alpha_ {2} (a) \ stackrel {\ mathrm {def}} {=} \ displaystyle \ sum \ limits_ {d, \, e \ in A} g ( a, \, d, \, e)

Теперь, когда мы вычисляем t Вычислительная сложность, мы видим, что есть q 3 {\ displaystyle q ^ {3}}q^{3}сложения в α 1 (a, b) {\ displaystyle \ alpha _ {1 } (a, \, b)}\ alpha_ {1} (a, \, b) и α 2 (a) {\ displaystyle \ alpha _ {2} (a)}\ alpha_ {2} (a) каждый, и есть q 2 {\ displaystyle q ^ {2}}q ^ {2} умножения, когда мы используем произведение α 1 (a, b) ⋅ α 2 (a) {\ displaystyle \ alpha _ {1} ( a, \, b) \ cdot \ alpha _ {2} (a)}\ alpha_ {1} (a, \, b) \ cdot \ альфа_ {2} (а) для вычисления α (a, b) {\ displaystyle \ alpha (a, \, b)}\ alpha (a, \, b) . Следовательно, общее количество необходимых вычислений равно q 3 + q 3 + q 2 = 2 q 3 + q 2 {\ displaystyle q ^ {3} + q ^ {3} + q ^ {2} = 2q ^ {3} + q ^ {2}}q ^ 3 + q ^ 3 + q ^ 2 = 2q ^ 3 + q ^ 2 . Следовательно, асимптотическая сложность вычисления α (a, b) {\ displaystyle \ alpha (a, b)}\ alpha (a, b) уменьшается до O (n 3) {\ displaystyle O (n ^ { 3})}O (n ^ {3}}) из O (n 5) {\ displaystyle O (n ^ {5})}O(n^{5}). Это показывает на примере, что применение закона распределения снижает вычислительную сложность, что является одной из хороших черт «быстрого алгоритма».

История

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

1. Алгоритмы декодирования. GDL-подобный алгоритм использовался Галлагером для декодирования кодов с низкой плотностью проверки четности. Основываясь на работе Галлагера, Таннер представил граф Таннера и выразил работу Галлагера в форме передачи сообщений. График Таннерса также помог объяснить алгоритм Витерби.

. Форни заметил, что максимальное правдоподобие Витерби при декодировании сверточных кодов также использовало алгоритмы GDL-подобной общности.

2. Алгоритм вперед-назад. Алгоритм вперед-назад помогал в качестве алгоритма отслеживания состояний в цепи Маркова. И для этого также использовался алгоритм GDL типа generality

3. Искусственный интеллект. Понятие деревьев соединений использовалось для решения многих проблем в AI. Также концепция устранения корзины использует многие концепции.

Задача MPF

MPF или маргинализация функции произведения - это общая вычислительная проблема, которая, как частный случай, включает множество классических задач, таких как вычисление дискретного преобразования Адамара, декодирование с максимальной вероятностью линейного кода по каналу без памяти и умножение цепочки матриц. Сила GDL заключается в том, что он применяется к ситуациям, в которых сложение и умножение являются обобщенными. Коммутативное полукольцо является хорошей основой для объяснения этого поведения. Он определяется в наборе K {\ displaystyle K}K с операторами «+ {\ displaystyle +}+ » и «. {\ Displaystyle. }. "где (K, +) {\ displaystyle (K, \, +)}(K, \, +) и (K,.) {\ Displaystyle (K, \,.)}(K, \,.) являются коммутативными моноидами и выполняется закон распределения.

Пусть p 1,…, pn {\ displaystyle p_ {1}, \ ldots, p_ {n}}p_1, \ ldots, p_n - такие переменные, что p 1 ∈ A 1,…, Pn ∈ A n {\ displaystyle p_ {1} \ in A_ {1}, \ ldots, p_ {n} \ in A_ {n}}p_1 \ in A_1, \ ldots, p_n \ in A_ {n} где A {\ displaystyle A }A - конечное множество и | A i | знак равно q я {\ displaystyle | A_ {i} | = q_ {i}}| A_i | = q_i . Здесь i = 1,…, n {\ displaystyle i = 1, \ ldots, n}i = 1, \ ldots, n . Если S = {i 1,…, ir} {\ displaystyle S = \ {i_ {1}, \ ldots, i_ {r} \}}S = \ {i_ {1}, \ ldots, i_ {r} \} и S ⊂ {1,…, N} {\ displaystyle S \, \ subset \ {1, \ ldots, n \}}S \, \ subset \ {1, \ ldots, n \} , пусть AS = A i 1 × ⋯ × A ir {\ displaystyle A_ { S} = A_ {i_ {1}} \ times \ cdots \ times A_ {i_ {r}}}A_ {S} = A_ {i_1} \ times \ cdots \ times A_ { i_r} , p S = (pi 1,…, pir) {\ displaystyle p_ {S} = (p_ {i_ {1}}, \ ldots, p_ {i_ {r}})}p_ {S} = (p_ {i_1}, \ ldots, p_ {i_r}) , q S = | A S | {\ displaystyle q_ {S} = | A_ {S} |}q_ {S } = | A_ {S} | , A = A 1 × ⋯ × A n {\ displaystyle \ mathbf {A} = A_ {1} \ times \ cdots \ times A_ {n} }\ mathbf A = A_ {1} \ times \ cdots \ times A_ {n} и p = {p 1,…, pn} {\ displaystyle \ mathbf {p} = \ {p_ {1}, \ ldots, p_ {n} \}}\ mathbf p = \ {p_ {1}, \ ldots, p_ {n} \}

Пусть S = {S j} j = 1 M {\ displaystyle S = \ {S_ {j} \} _ {j = 1} ^ {M}}S = \ {S_ {j} \} _ {j = 1} ^ M где S j ⊂ {1,..., n} {\ displaystyle S_ {j} \ subset \ {1,... \,, n \}}S_ {j} \ subset \ {1,... \,, n \} . Предположим, что функция определена как α i: AS i → R {\ displaystyle \ alpha _ {i}: A_ {S_ {i}} \ rightarrow R}\ alpha_ {i}: A_ {S_ {i}} \ rightarrow R , где R { \ displaystyle R}R - это коммутативное полукольцо. Кроме того, p S i {\ displaystyle p_ {S_ {i}}}p_ {S_ {i}} называются локальными доменами, а α i {\ displaystyle \ alpha _ {i}}\ alpha _ {{i}} как локальные ядра.

Теперь глобальное ядро ​​β: A → R {\ displaystyle \ beta: \ mathbf {A} \ rightarrow R}\ beta: \ mathbf A \ rightarrow R определяется как: β (p 1,..., pn) знак равно ∏ я знак равно 1 M α (п S я) {\ Displaystyle \ бета (p_ {1},... \,, p_ {n}) = \ prod _ {i = 1} ^ {M} \ alpha (p_ {S_ {i}})}\ beta (p_ {1},... \, p_ {n}) = \ prod_ {i = 1} ^ M \ alpha (p_ {S_ {i}})

Определение проблемы MPF: для одного или нескольких индексов i = 1,..., M {\ displaystyle i = 1,... \,, M}i = 1,... \, M , вычислить таблицу значений S i {\ displaystyle S_ {i}}S_ {i} -маргинализация глобального ядра β {\ displaystyle \ beta}\ beta , которая является функцией β i: AS i → R {\ displaystyle \ beta _ {i}: A_ {S_ {i}} \ rightarrow R}\ beta_ {i}: A_ {S_ {i}} \ rightarrow R определяется как β i (p S i) = ∑ p S ic ∈ AS ic β (p) {\ displaystyle \ beta _ {i} (p_ { S_ {i}}) \, = \ displaystyle \ sum \ limits _ {p_ {S_ {i} ^ {c}} \ in A_ {S_ {i} ^ {c}}} \ beta (p)}\ beta_ {i} (p_ {S_ {i}}) \, = \ displaystyle \ sum \ limits_ {p_ {S_ {i} ^ c} \ in A_ {S_ {i} ^ c}} \ beta (p)

Здесь S ic {\ displaystyle S_ {i} ^ {c}}S_ {i} ^ c является дополнением S i {\ displaystyle S_ {i}}S_ {i} с учетом на {1,..., n} {\ displaystyle \ mathbf {\ {} 1,... \,, n \}}\ mathbf \ {1,... \,, n \} и β i (p S i) {\ displaystyle \ beta _ {i } (p_ {S_ {i}})}\ beta_i (p_ {S_i}) называется i-й {\ displaystyle i ^ {th}}i ^ {th} целевой функцией или целевой функцией в S я {\ Displaystyle S_ {я}}S_ {i} . Можно заметить, что для вычисления целевой функции ith {\ displaystyle i ^ {th}}i ^ {th} очевидным образом требуется M q 1 q 2 q 3 ⋯ qn {\ displaystyle Mq_ {1} q_ {2} q_ {3} \ cdots q_ {n}}Mq_1 q_2 q_3 \ cdots q_ {n} операций. Это потому, что есть q 1 q 2 ⋯ qn {\ displaystyle q_ {1} q_ {2} \ cdots q_ {n}}q_1 q_2 \ cdots q_n сложения и (M - 1) q 1 q 2... qn {\ displaystyle (M-1) q_ {1} q_ {2}... q_ {n}}(M-1) q_1 q_2... q_n умножения, необходимые для вычисления i th {\ displaystyle i ^ {\ text {th}}}i ^ {{\ text {th}}} целевая функция. Алгоритм GDL, который объясняется в следующем разделе, может уменьшить эту вычислительную сложность.

Ниже приведен пример проблемы MPF. Пусть p 1, p 2, p 3, p 4, {\ displaystyle p_ {1}, \, p_ {2}, \, p_ {3}, \, p_ {4},}p_ {1}, \, p_ {2}, \, p_ {3}, \, p_ {4}, и p 5 {\ displaystyle p_ {5}}p_ {5 } быть такими переменными, что p 1 ∈ A 1, p 2 ∈ A 2, p 3 ∈ A 3, p 4 ∈ A 4, {\ displaystyle p_ {1} \ in A_ {1}, p_ {2} \ in A_ {2}, p_ {3} \ in A_ {3}, p_ {4} \ in A_ {4}, }p_ {1} \ in A_ {1}, p_ {2} \ in A_ {2}, p_ {3} \ in A_ {3}, p_ {4} \ in A_ {4}, и p 5 ∈ A 5 {\ displaystyle p_ {5} \ in A_ {5}}p_ {5} \ in A_ {5} . Здесь M = 4 {\ displaystyle M = 4}M = 4 и S = {{1, 2, 5}, {2, 4}, {1, 4}, {2} } {\ displaystyle S = \ {\ {1,2,5 \}, \ {2,4 \}, \ {1,4 \}, \ {2 \} \}}S = \ {\ {1,2,5 \}, \ {2, 4 \}, \ {1,4 \}, \ {2 \} \} . Данные функции, использующие эти переменные: f (p 1, p 2, p 5) {\ displaystyle f (p_ {1}, p_ {2}, p_ {5})}f (p_ {1}, p_ {2}, p_ {5}) и g (p 3, p 4) {\ displaystyle g (p_ {3}, p_ {4})}g (p_ {3}, p_ {4}) и нам нужно вычислить α (p 1, p 4) {\ displaystyle \ alpha (p_ {1}, \, p_ {4})}\ alpha (p_ {1 }, \, p_ {4}) и β (p 2) {\ displaystyle \ beta (p_ {2})}\ beta (стр _ {2}) определяется как:

α (p 1, p 4) = ∑ p 2 ∈ A 2, p 3 ∈ A 3, p 5 ∈ A 5 f (p 1, p 2, p 5) ⋅ g (p 2, п 4) {\ displaystyle \ alpha (p_ {1}, \, p_ {4}) = \ displaystyle \ sum \ limits _ {p_ {2} \ in A_ {2}, \, p_ {3} \ in A_ {3}, \, p_ {5} \ in A_ {5}} f (p_ {1}, \, p_ {2}, \, p_ {5}) \ cdot g (p_ {2}, \, p_ {4})}\ alpha (p_1, \, p_4) = \ displaystyle \ sum \ limits_ {p_2 \ in A_2, \, p_3 \ in A_3, \, p_5 \ in A_5} f (p_1, \, p_2, \, p_5) \ cdot g (p_2, \, p_4)
β (p 2) = ∑ p 1 ∈ A 1, p 3 ∈ A 3, p 4 ∈ A 4, p 5 ∈ A 5 f (p 1, p 2, p 5) ⋅ г (п 2, п 4) {\ displaystyle \ beta (p_ {2}) = \ sum \ limits _ {p_ {1} \ in A_ {1}, \, p_ {3} \ in A_ {3}, \, p_ {4} \ in A_ {4}, \, p_ {5} \ in A_ {5}} f (p_ {1}, \, p_ {2}, \, p_ {5}) \ cdot g (p_ {2}, \, p_ {4})}\ beta (p_ {2}) = \ sum \ limits_ {p_1 \ in A_1, \, p_3 \ in A_3, \, p_4 \ in A_4, \, p_5 \ in A_5} f (p_1, \, p_2, \, p_5) \ cdot g (p_2, \, p_4)

Здесь локальные домены и локальные ядра определены следующим образом:

локальные доменылокальные ядра
{p 1, p 2, п 5} {\ displaystyle \ {p_ {1}, p_ {2}, p_ {5} \}}\ {p_ {1}, p_ {2}, p_ {5} \} (f (p 1, p 2, p 5) {\ displaystyle (f (p_ { 1}, p_ {2}, p_ {5})}(f (p_ {1}, p_ {2}, p_ {5})
{p 2, p 4} {\ displaystyle \ {p_ {2}, p_ {4} \}}\ {p_ {2}, p_ {4} \} g (p 2, p 4) {\ displaystyle g (p_ {2}, p_ {4})}g (p_ {2}, p_ {4})
{p 1, p 4} {\ displaystyle \ {p_ {1}, p_ {4} \}}\ {p_ {1}, p_ {4} \} 1 { \ displaystyle 1}1
{p 2} {\ displaystyle \ {p_ {2} \}}\ {p_ {2} \} 1 {\ displaystyle 1}1

где α (p 1, p 4) {\ displaystyle \ alpha (p_ {1}, p_ {4})}\ alpha (p_ {1}, p_ {4}) - это 3-е {\ displaystyle 3 ^ {rd}}3 ^ {rd} целевая функция и β ( p 2) {\ displaystyle \ beta (p_ {2})}\ beta (стр _ {2}) - целевая функция 4 th {\ displaystyle 4 ^ {th}}4 ^ {th} .

Рассмотрим другой пример, где p 1, p 2, p 3, p 4, r 1, r 2, r 3, r 4 ∈ {0, 1} {\ displaystyle p_ {1}, p_ {2}, p_ {3}, p_ {4}, r_ {1}, r_ {2}, r_ {3}, r_ {4} \ in \ {0,1 \}}p_ {1}, p_ {2}, p_ {3}, p_ {4}, r_ {1}, r_ {2}, r_ {3 }, r_ {4} \ in \ {0,1 \} и f (r 1, r 2, r 3, r 4) {\ displaystyle f (r_ {1}, r_ {2}, r_ {3}, r_ {4})}f (r_ {1}, r_ {2}, r_ {3}, r_ {4}) является вещественной функцией. Теперь мы рассмотрим задачу MPF, в которой коммутативное полукольцо определяется как набор действительных чисел с обычным сложением и умножением, а локальные области и локальные ядра определяются следующим образом:

локальные областилокальные ядра
{r 1, r 2, r 3, r 4} {\ displaystyle \ {r_ {1}, r_ {2}, r_ {3}, r_ {4} \}}\ {r_1, r_2, r_3, r_4 \} f (r 1, r 2, r 3, r 4) {\ displaystyle f (r_ {1}, r_ {2}, r_ {3}, r_ {4})}f (r_1, r_2, r_3, r_4)
{p 1, r 1} {\ displaystyle \ {p_ {1}, r_ {1} \}}\ { p_1, r_1 \} (- 1) p 1 r 1 {\ displaystyle (-1) ^ {p_ {1} r_ {1}}}(-1) ^ {p_1 r_1}
{p 2, р 2} {\ displaystyle \ {p_ {2}, r_ {2} \}}\ {p_2, r_2 \} (- 1) p 2 r 2 {\ displaystyle (-1) ^ {p_ {2} r_ {2}}}(-1) ^ {p_2 r_2}
{п 3, r 3} {\ displaystyle \ {p_ {3}, r_ {3} \}}\ {p_3, r_3 \} (- 1) p 3 r 3 {\ displaystyle (-1) ^ {p_ {3 } r_ {3}}}(-1) ^ {p_3 r_3}
{p 4, r 4} {\ displaystyle \ {p_ {4}, r_ {4} \}}\ {p_4, r_4 \} (- 1) p 4 r 4 {\ displaystyle (- 1) ^ {p_ {4} r_ {4}}}(-1) ^ {p_4 r_4}
{p 1, p 2, p 3, p 4} {\ displaystyle \ {p_ {1}, p_ {2}, p_ {3}, p_ {4} \}}\ {p_1, p_2, p_3, p_4 \} 1 {\ displaystyle 1}1

Теперь, поскольку глобальное ядро ​​определяется как продукт loc al ядер, это

F (p 1, p 2, p 3, p 4, r 1, r 2, r 3, r 4) = f (p 1, p 2, p 3, p 4) ⋅ (- 1) п 1 р 1 + п 2 р 2 + п 3 р 3 + п 4 р 4 {\ displaystyle F (p_ {1}, p_ {2}, p_ {3}, p_ {4}, r_ { 1}, r_ {2}, r_ {3}, r_ {4}) = f (p_ {1}, p_ {2}, p_ {3}, p_ {4}) \ cdot (-1) ^ {p_ {1} r_ {1} + p_ {2} r_ {2} + p_ {3} r_ {3} + p_ {4} r_ {4}}}F (p_1, p_2, p_3, p_4, r_1, r_2, r_3, r_4) = f (p_1, p_2, p_3, p_4) \ cdot (-1) ^ {p_1r_1 + p_2r_2 + p_3r_3 + p_4r_4}

и целевая функция в локальном домене p 1, p 2, p 3, p 4 {\ displaystyle p_ {1}, p_ {2}, p_ {3}, p_ {4}}p_1, p_2, p_3, p_4 равно

F (p 1, p 2, p 3, p 4) = ∑ r 1, r 2, r 3, r 4 f (r 1, r 2, r 3, r 4) ⋅ (- 1) p 1 r 1 + p 2 r 2 + п 3 к 3 + п 4 к 4. {\ displaystyle F (p_ {1}, p_ {2}, p_ {3}, p_ {4}) = \ displaystyle \ sum \ limits _ {r_ {1}, r_ {2}, r_ {3}, r_ {4}} f (r_ {1}, r_ {2}, r_ {3}, r_ {4}) \ cdot (-1) ^ {p_ {1} r_ {1} + p_ {2} r_ {2 } + p_ {3} r_ {3} + p_ {4} r_ {4}}.}F (p_1, p_2, p_3, p_4) = \ displaystyle \ sum \ limits_ {r_1, r_2, r_3, r_4} f (r_1, r_2, r_3, r_4) \ cdot (-1) ^ {p_1r_1 + p_2r_2 + p_3r_3 + p_4r_4}.

Это преобразование Адамара функции f (⋅) {\ displaystyle f (\ cdot)}f (\ cdot) . Следовательно, мы можем видеть, что вычисление преобразования Адамара является частным случаем проблемы MPF. Можно продемонстрировать и другие примеры, чтобы доказать, что проблема MPF образует частные случаи многих классических проблем, как объяснено выше, детали которых можно найти в

GDL: алгоритм для решения проблемы MPF

Если один можно найти взаимосвязь между элементами данного набора S {\ displaystyle S}S , тогда можно решить проблему MPF, основываясь на понятии распространения убеждений, которое является специальное использование техники «передачи сообщений». Требуемая взаимосвязь состоит в том, что данный набор локальных доменов может быть организован в дерево соединений . Другими словами, мы создаем теоретико-графическое дерево с элементами S {\ displaystyle S}S в качестве вершин tree T {\ displaystyle T}T , так что для любых двух произвольных вершин говорят vi {\ displaystyle v_ {i}}v_{{i}}и vj {\ displaystyle v_ {j}}v_ {j} где я ≠ j {\ displaystyle i \ neq j}i \ neq j и между этими двумя вершинами существует ребро, то есть пересечение соответствующих меток, а именно S i ∩ S j { \ displaystyle S_ {i} \ cap S_ {j}}S_ {i} \ cap S_ { j} , представляет собой подмножество метки на каждой вершине на уникальном пути из vi {\ displaystyle v_ {i}}v_{{i}}на vj {\ displaystyle v_ {j}}v_ {j} .

Например,

Пример 1. Рассмотрим следующие девять локальных доменов:

  1. {p 2} {\ displaystyle \ {p_ {2} \}}\ {p_2 \}
  2. {p 3, p 2} {\ displaystyle \ {p_ {3}, p_ {2} \}}\ {p_3, p_2 \}
  3. {p 2, p 1} {\ displaystyle \ {p_ { 2}, p_ {1} \}}\{p_2,p_1\}
  4. {p 3, p 4} {\ displaystyle \ {p_ {3}, p_ {4} \}}\ {p_3, p_4 \}
  5. {p 3} {\ displaystyle \ {p_ {3} \}}\ { p_3 \}
  6. {p 1, p 4} {\ dis playstyle \ {p_ {1}, p_ {4} \}}\ {p_1, p_4 \}
  7. {p 1} {\ displaystyle \ {p_ {1} \}}\ {p_1 \}
  8. {p 4} {\ displaystyle \ {p_ {4} \}}\ {p_4 \}
  9. {p 2, p 4} {\ displaystyle \ {p_ {2}, p_ {4} \}}\ {p_2, p_4 \}

Для указанного выше набора локальных доменов их можно организовать в дерево соединений как показано ниже:

Пример соединения дерева

Аналогично. Если задан другой набор, подобный следующему

Пример 2: Рассмотрим следующие четыре локальных домена:

  1. {p 1, p 2} {\ displaystyle \ {p_ {1 }, p_ {2} \}}\ {p_1, p_2 \}
  2. {p 2, p 3} {\ displaystyle \ {p_ {2}, p_ {3} \}}\ {p_2, p_3 \}
  3. {p 3, p 4} {\ displaystyle \ {p_ {3}, p_ {4} \}}\ {p_3, p_4 \}
  4. {p 1, p 4} {\ displaystyle \ {p_ {1}, p_ {4} \}}\ {p_1, p_4 \}

Затем построение дерева только с этими локальные домены невозможны, так как этот набор значений не имеет общих доменов, которые могут быть помещены между любыми двумя значениями указанного выше набора. Но, однако, если добавить два фиктивных домена, как показано ниже, то организация обновленного набора в дерево соединений станет возможной и простой.

5.{p 1, p 2 {\ displaystyle \ {p_ {1}, p_ {2}}\ {p_ {1}, p_ {2} ,p 4} {\ displaystyle p_ {4} \}}p_ {4} \} . 6.{p 2, p 3 { \ displaystyle \ {p_ {2}, p_ {3}}\ {p_ {2}, p_ {3} ,p 4} {\ displaystyle p_ {4} \}}p_ {4} \}

Аналогично для этого набора доменов дерево соединений выглядит так, как показано ниже:

Другой пример дерева соединений

Алгоритм обобщенного закона распределения (GDL)

Входные данные: набор локальных доменов.. Выходные данные: для заданного набора доменов вычисляется возможное минимальное количество операций, необходимых для решения проблемы.. Итак, если vi {\ displaystyle v_ {i}}v_{{i}}и vj {\ displaystyle v_ {j}}v_ {j} соединены ребром в дерево соединений, то сообщение от vi {\ displaystyle v_ {i}}v_{{i}}до vj {\ displaystyle v_ {j}}v_ {j} представляет собой набор / таблицу значения, задаваемые функцией: μ i, j {\ displaystyle \ mu _ {i, j}}\ mu _ {{i, j}} :AS i ∩ S j → R {\ displaystyle A_ {S_ {i} \ cap S_ {j} } \ rightarrow R}A_ {S_ {i} \ cap S_ {j}} \ rightarrow R . Чтобы начать со всех функций, т.е. для всех комбинаций i {\ displaystyle i}i и j {\ displaystyle j}j в данном дереве, μ i, j {\ displaystyle \ mu _ {i, j}}\ mu _ {{i, j}} идентично 1 {\ displaystyle 1}1, и когда конкретное сообщение обновляется, это следует уравнению, приведенному ниже.

μ я, J (п S я ∩ S J) {\ Displaystyle \ mu _ {я, j} (p_ {S_ {i} \ cap S_ {j}})}\ mu_ {i, j} (p_ {S_ {i} \ cap S_ {j}}) = ∑ п S я ∖ S J ∈ AS я ∖ S J α я (п S я) ∏ vk adj ⁡ vi, К k J μ К, J (п S К k S я) (1) {\ Displaystyle \ сумма _ {р_ {S_ {i} \ setminus S_ {j}} \ in A_ {S_ {i} \ setminus S_ {j}}} \ alpha _ {i} (p_ {S_ {i}}) \ prod _ {{v_ {k} \ имя оператора {прил} v_ {i}}, {k \ neq j}} \ mu _ {k, j} (p_ {S_ {k} \ cap S_ {i}}) (1)}\ sum_ {p_ {S_ {i} \ setminus S_ {j}} \ in A_ {S_ {i } \ setminus S_ {j}}} \ alpha _ {i} (p_ {S_ {i}}) \ prod _ {{v_k \ operatorname {adj} v_i}, {k \ neq j}} \ mu_ {k, j } (p_ {S_k \ cap S_i}) (1)

где vk прил. ⁡ vi {\ displaystyle v_ {k} \ operatorname {adj} v_ {i}}v_k \ operatorname {adj} v_i означает, что vk {\ displaystyle v_ {k}}v_ {k} является дополнительной вершина с vi {\ displaystyle v_ {i}}v_{{i}}в дереве.

Аналогичным образом каждая вершина имеет состояние, которое как таблица, содержащая значения из функций σ i: AS i → R {\ displaystyle \ sigma _ {i}: A_ {S_ {i}} \ rightarrow R}\ sigma_ {i}: A_ {S_ {i}} \ rightarrow R , точно так же, как сообщения инициализируются в 1 идентично, состояние vi {\ displaystyle v_ {i}}v_{{i}}определяется как локальное ядро ​​α (п S я) {\ displaystyle \ alpha (p_ {S_ {i}})}\ alpha (p_ {S_ {i} }) , но всякий раз, когда σ я {\ displaystyle \ sigma _ {i}}\ sigma_ { i} обновляется, это следует к уравнению:

σ (p S i) = α i (p S i) ∏ vk adj ⁡ vi μ k, j (p S k ∩ S i) (2). {\ displaystyle \ sigma (p_ {S_ {i}}) = \ alpha _ {i} (p_ {S_ {i}}) \ prod _ {v_ {k} \ operatorname {adj} v_ {i}} \ mu _ {k, j} (p_ {S_ {k} \ cap S_ {i}}) (2).}\ sigma (p_ {S_i}) = \ alpha_i (p_ {S_i}) \ prod_ {v_k \ operatorname {adj} v_i} \ mu_ {k, j} (p_ {S_k \ cap S_i}) (2).

Основная работа алгоритма

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

Планирование передачи сообщений и вычислений состояния

Здесь мы собираемся поговорить о двух особых случаях, а именно задаче с одной вершиной, в которой целевая функция вычисляется только на одной вершине v 0 { \ displaystyle v_ {0}}v_ {0} , вторая - задача для всех вершин, цель которой - вычислить целевую функцию во всех вершинах.

Начнем с задачи с одной вершиной, GDL начало с направления каждого ребра к целевой вершине v 0 {\ displaystyle v_ {0}}v_ {0} . Здесь сообщения отправляются только в направлении вершины. Обратите внимание, что все сообщения отправляются только один раз. Сообщения начинаются с конечных узлов (где степень равна 1) и идут вверх к вершине v 0 {\ displaystyle v_ {0}}v_ {0} . Сообщение передается от листьев к своим родителям, а затем оттуда к их родителям и так далее, пока не достигнет вершины v 0 {\ displaystyle v_ {0}}v_ {0} . Целевая вершина v 0 {\ displaystyle v_ {0}}v_ {0} будет вычислять свое состояние только тогда, когда она получит все сообщения от всех своих соседей. Когда у нас есть состояние, мы получили ответ, и, следовательно, алгоритм завершается.

Например, давайте рассмотрим дерево соединений, приведенное выше, то есть набор из примера 1,. Теперь таблица планирования для этих доменов (где целевая вершина п 2 {\ displaystyle р_ {2}}p_{2}).

Круглое сообщение или вычисление состояния {\ displaystyle {\ text {Круглое сообщение или вычисление состояния}}}\ text {Круглое сообщение или вычисление состояния} . 1. μ 8, 4 (п 4) знак равно α 8 (п 4) {\ displaystyle 1. \ mu _ {8,4} (p_ {4}) = \ alpha _ {8} (p_ {4})}1. \ mu_ {8,4} (p_ {4}) = \ alpha_ {8} (p_ {4}) . 2. μ 8, 4 (p 4) знак равно Σ p 2 α 9 (p 2, p 4) {\ displaystyle 2. \ mu _ {8,4} (p_ {4}) = \ Sigma _ {p_ {2} } \ alpha _ {9} (p_ {2}, p_ {4})}2. \ mu_ {8,4} (p_ {4}) = \ Sigma_ {p_ {2}} \ alpha_ {9} (p_ {2}, p_ {4}) . 3. μ 5, 2 (p 3) знак равно α 5 (p 3) {\ displaystyle 3. \ mu _ {5,2} (p_ {3}) = \ alpha _ {5} (p_ {3})}3. \ mu_ {5,2} (p_ {3}) = \ alpha_ {5} ( p_ {3}) . 4. μ 6, 3 (p 1) знак равно Σ p 4 α 6 (p 1, p 4) {\ displaystyle 4. \ mu _ {6,3} (p_ {1}) = \ Sigma _ {p_ {4} } \ alpha _ {6} (p_ {1}, p_ {4})}4. \ mu_ {6,3} (p_ {1}) = \ Sigma_ {p_ {4}} \ alpha_ {6} (p_ {1}, p_ {4}) . 5. μ 7, 3 (п 1) знак равно α 7 (п 1) {\ Displaystyle 5. \ mu _ {7,3} (p_ {1}) = \ alpha _ {7} (p_ {1})}5. \ mu_ {7,3} (p_ {1}) = \ alpha_ {7} (p_ {1}) . 6. μ 4, 2 (p 3) = Σ p 4 α 4 (p 3, p 4). μ 8, 4 (стр 4). μ 9, 4 (p 4) {\ displaystyle 6. \ mu _ {4,2} (p_ {3}) = \ Sigma _ {p_ {4}} \ alpha _ {4} (p_ {3}, p_ {4}). \ Mu _ {8,4} (p_ {4}). \ Mu _ {9,4} (p_ {4})}6. \ mu_ {4,2} (p_ {3}) = \ Sigma_ {p_ {4}} \ alpha_ {4} (p_ {3}, p_ {4 }). \ mu_ {8,4} (p_ {4}). \ mu_ {9,4} (p_ {4}) . 7. μ 3, 1 (p 2) = Σ p 1 α 3 (p 2, p 1). μ 6, 3 (p 1). μ 7, 3 (p 1) {\ displaystyle 7. \ mu _ {3,1} (p_ {2}) = \ Sigma _ {p_ {1}} \ alpha _ {3} (p_ {2}, p_ {1}). \ Mu _ {6,3} (p_ {1}). \ Mu _ {7,3} (p_ {1})}7. \ mu_ {3,1} (p_ {2}) = \ Sigma_ {p_ {1}} \ alpha_ {3} ( p_ {2}, p_ {1}). \ mu_ {6,3} (p_ {1}). \ mu_ {7,3} (p_ {1}) . 8. μ 2, 1 (p 2) = Σ p 3 α 2 (p 3, p 2). μ 4, 2 (п 3). μ 5, 2 (p 3) {\ displaystyle 8. \ mu _ {2,1} (p_ {2}) = \ Sigma _ {p_ {3}} \ alpha _ {2} (p_ {3}, p_ {2}). \ Mu _ {4,2} (p_ {3}). \ Mu _ {5,2} (p_ {3})}8. \ mu_ {2,1} (p_ {2}) = \ Sigma_ {p_ {3}} \ alpha_ {2} (p_ {3}, p_ {2}). \ Mu_ {4,2} (p_ {3}). \ Mu_ {5,2} (p_ { 3}) . 9. σ 1 (p 2) = α 1 (p 2). μ 2, 1 (p 2). μ 3, 1 (п 2) {\ displaystyle 9. \ sigma _ {1} (p_ {2}) = \ alpha _ {1} (p_ {2}). \ mu _ {2,1} (p_ {2}). \ Mu _ {3,1} (p_ {2})}9. \ sigma_ {1} (p_ {2}) = \ alpha_ {1} (p_ {2}). \ Mu_ {2,1} (p_ {2}). \ Mu_ {3,1} (p_ {2})

Таким образом, сложность GDL с одной вершиной может быть представлена ​​как

Σ vd (v) | A S (v) | {\ displaystyle \ Sigma _ {v} d (v) | A_ {S _ {(v)}} |}\ Sigma_ {v} d (v) | A_ {S _ {(v)}} | арифметические операции. Где (Примечание: объяснение приведенного выше уравнения объясняется позже в статье). S (v) {\ displaystyle S (v)}S (v) - это метка v {\ displaystyle v}v .. d (v) {\ displaystyle d (v)}d(v)- это степень для v {\ displaystyle v}v (т. Е. Количество вершин, связанных с v).

Чтобы решить проблему All-Vertices, мы можем запланировать GDL методы, некоторые из них включают параллельную управление, где в каждом раунде обновляется каждое состояние, и каждое сообщение вычисляется и передается. в то же время. В этом типе реализации состояния и сообщения будут стабилизироваться после количества раундов, которое не больше диаметра дерева. В этот момент все состояния вершин будут равны желаемой целевой функции.

Другой способ запланировать GDL для проблемы - последовательная реализация, аналогичная этой задаче с одной вершиной, за исключением того, что мы не останавливаем алгоритм до тех пор, пока все вершины необходимого набора не получат все сообщения от всех их соседи и вычислили их состояние.. Таким образом, количество арифметических операций, необходимых для этой реализации, не больше Σ v ∈ V d (v) | A S (v) | {\ Displaystyle \ Sigma _ {v \ in V} d (v) | A_ {S _ {(v)}} |}\ Sigma_ {v \ in V} d (v) | A_ {S _ {(v)}} | арифметические операции.

Построение дерева соединений

Ключ к построению соединений в локальном графе домена GLD {\ displaystyle G_ {LD}}G_ {LD} , является взвешенным полным графом с M {\ displaystyle M}M вершинами v 1, v 2, v 3,…, v M {\ displaystyle v_ {1}, v_ {2}, v_ {3}, \ ldots, v_ {M}}v_1, v_2, v_3, \ ldots, v_M т.е. по одному для каждого локального домена, имеющего вес ребра ei, j: vi ↔ vj {\ displaystyle e_ {i, j}: v_ {i} \ leftrightarrow v_ {j}}e_ {i, j}: v_i \ leftrightarr ow v_j имеет значение на. ω i, j = | S i ∩ S j | {\ displaystyle \ omega _ {i, j} = | S_ {i} \ cap S_ {j} |}\ omega_ {i, j} = | S_ {i} \ cap S_ {j} | .., если xk ∈ S i ∩ S j {\ displaystyle x_ {k} \ in S_ {i} \ cap S_ {j}}x_ {k} \ in S_ {i} \ cap S_ {j} , тогда мы говорим, что xk {\ displaystyle x_ {k}}x_ {k} содержится в ei, j {\ displaystyle e_ {i, j}}e _ {{ i, j}} . Обозначается ω max {\ displaystyle \ omega _ {max}}\ omega _ {{max}} (вес остовного дерева размера GLD {\ displaystyle G_ {LD}}G_ {LD} ), что определяется как

ω ∗ = Σ i = 1 M | S i | - п {\ displaystyle \ omega ^ {*} = \ Sigma _ {i = 1} ^ {M} | S_ {i} | -n}\ omega ^ {*} = \ Sigma ^ M_ {i = 1} | S_ {i} | - n

, где n - количество элементов в этом наборе. Для большей ясности и подробностей, пожалуйста, обратитесь к ним.

Теорема планирования

Пусть ′ T ′ {\ displaystyle 'T'}'T'будет деревом соединений с набором вершин ′ V ′ {\ displaystyle ' V '}'V'и набор ребер ′ E ′ {\ displaystyle' E '}'E'. В этом алгоритме сообщения отправляются в обоих направлениях на любом ребре, поэтому мы можем сказать / рассматривать набор ребер E как набор упорядоченных пар вершин. Например, из рисунка 1 ′ E ′ {\ displaystyle 'E'}'E'можно определить следующим образом:

E = {(1, 2), (2, 1), (1, 3), (3, 1), (4, 2), (2, 4), (5, 2), (2, 5), (6, 3), (3, 6), (7, 3)), (3, 7), (8, 4), (4, 8), (9, 4), (4, 9)} {\ Displaystyle E = \ {(1,2), (2,1), (1,3), (3,1), (4,2), (2,4), (5,2), (2,5), (6,3), (3,6), ( 7,3), (3,7), (8,4), (4,8), (9,4), (4,9) \}}E = \ {(1, 2), (2,1), (1,3), (3,1), (4,2), (2,4), (5,2), (2,5), (6,3), (3,6), (7,3), (3,7), (8,4), (4,8), (9,4), (4,9) \}

ПРИМЕЧАНИЕ: E {\ displaystyle E }Eвыше дает вам все возможные направления, по которому может перемещаться в дереве.

Расписание для GDL как конечная последовательность подмножеств E {\ displaystyle E}E. Что обычно обозначается как E = {\ displaystyle {\ mathcal {E}} =}\ mathcal {E} = {E 1, E 2, E 3,…, EN {\ displaystyle E_ {1}, E_ {2}, E_ {3}, \ ldots, E_ {N}}E_ {1}, E_ {2}, E_ {3}, \ ldots, E_ {N} }, где EN {\ displaystyle E_ {N}}E_{N}- это набор сообщений, обновленных в течение N-й {\ displaystyle N ^ {th}}N ^ {{th}} раунд запуска алгоритма.

Определив / просмотрев некоторые обозначения, мы увидим, что в теореме говорится: «Когда нам дано расписание» E = {E 1, E 2, E 3,…, EN} {\ displaystyle {\ mathcal {E}} = \ {E_ {1}, E_ {2}, E_ {3}, \ ldots, E_ {N} \}}\ mathcal {E} = \ {E_1, E_2, E_3, \ ldots, E_N \} , соответствующая решетка сообщений как конечный ориентированный граф с набором вершин V × {0, 1, 2, 3,…, N} {\ displaystyle V \ times \ {0,1,2,3, \ ldots, N \}}V \ times \ {0,1,2,3, \ ldots, N \} , в котором типичный элемент обозначается vi (t) {\ displaystyle v_ {i} (t)}v_ {i} (t) для t ∈ {0, 1, 2, 3,…, N} {\ displaystyle t \ in \ {0,1,2,3, \ ldots, N \}}t \ in \ {0,1,2,3, \ ldots, N \} , после завершения передачи сообщения состояние в вершине vj {\ displaystyle v_ {j }}v_ {j} будет j th {\ displaystyle j ^ {\ text {th}}}j ^ \ text {th} целью, предназначенным для

σ (п S я) знак равно α я (п S я) ∏ vk прил ⁡ vi μ К, J (п S К ∩ S я) {\ Displaystyle \ sigma (p_ {S_ {i}}) = \ альфа _ {i} (p_ {S_ {i} }) \ prod _ {v_ {k} \ operatorname {adj} v_ {i}} \ mu _ {k, j} (p_ {S_ {k} \ cap S_ {i}})}\ sigma (p_ {S_i}) = \ alpha_i (p_ {S_i}) \ prod_ {v_k \ operatorname {adj} v_i} \ mu_ {k, j} (p_ {S_ {k} \ cap S_ {i}})

и если только там - путь от vi (0) {\ displaystyle v_ {i} (0)}v_i (0) до vj (N) {\ displaystyle v_ {j} (N)}v_j (N)

Вычислительная сложность

Здесь мы пытаемся объяснить сложность решения задачи MPF с точки зрения количества математических операций, необходимые для вычислений. т.е. Мы сравнили количество операций, требуемых при вычислении с использованием обычного метода, мы используем методы, которые не используют передачу сообщений или соединения в коротких методах, которые не используют GDL) и количество операций, использующих обобщенный распределительный закон.

Пример: рассмотрим простейший случай, когда нам нужно вычислить следующее выражение a b + a c {\ displaystyle ab + ac}ab + ac .

Для вычислений этого выражения наивно требуется два умножения и одно сложение. Выражение, выраженное с использованием закона распределения, может быть записано a (b + c) {\ displaystyle a (b + c)}a (b + c) простая оптимизация, которая сокращает количество операций до одного добавления и одно умножение.

Подобно объясненному выше, мы будем выражать уравнения в различных формах, чтобы выполнить как можно меньше с помощью операций GDL.

Как объяснялось в предыдущих разделах, мы решаем проблему, используя концепцию соединений деревьев. Оптимизация, полученная с помощью этих деревьев, сравнима с оптимизацией, полученной путем полугрупповой задачи на деревьях. Например, чтобы найти минимум группы чисел, мы можем заметить, что если у нас есть дерево, и все элементы находятся в нижней части дерева, то мы можем сравнить минимум два элемента последовательно. Когда этот процесс распространяется по дереву, минимум элементов будет находиться в корне.

Ниже описана сложность решений соединений с использованием передачи сообщений

Мы перепишем формулу, используем ранее, в следующую форму. Это уравнение для отправки сообщения из вершины v в w

μ v, w (pv ∩ w) = ∑ pv ∖ w ∈ AS (v) ∖ S (w) α v (pv) ∏ uadjvu ≠ v μ U, v (пу ∩ v) {\ displaystyle \ mu _ {v, w} (p_ {v \ cap w}) = \ sum _ {p_ {v \ setminus w} \ in A_ {S (v) \ setminus S (w)}} \ alpha _ {v} (p_ {v}) \ prod _ {uadjv_ {u \ neq v}} \ mu _ {u, v} (p_ {u \ cap v})}\ mu _ {v, w} (p_ {v \ cap w}) = \ sum _ {p _ {v \ setminus w} \ in A _ {S (v) \ setminus S (w)}} \ alpha _ {v} (p _ {v}) \ prod _ {u adj v _ {u \ neq v}} \ mu _ {u, v} (p _ {u \ cap v}) ---- уравнение сообщения

Аналогичным образом мы перепишем уравнение для расчета состояния вершины v следующим образом:

σ v (pv) = α v (pv) ∏ u adj ⁡ v μ v вес (pv ∩ вес) {\ displaystyle \ sigma _ {v} (p_ {v}) = \ alpha _ {v} (p_ {v}) \ prod _ {u \ operatorname {adj} v} \ mu _ {v, w} (p_ {v \ cap w})}\ sigma_v (p_v) = \ alpha_v (p_v) \ prod_ {u \ operatorname {adj} v} \ mu _ {v, w} (p _ {v \ cap w})

Сначала мы проанализируем задачу с одной вершиной и предположим, что целевая вершина равна v 0 {\ displaystyle v_ {0}}v_ {0} и, следовательно, у нас есть одно ребро от v {\ displaystyle v}v до v 0 {\ displaystyle v_ {0}}v _ {0} . Предположим, у нас есть край (v, w) {\ displaystyle (v, w)}(v, w) , мы вычисляем сообщение, используя уравнение сообщения. Для вычисления pu ∩ v {\ displaystyle p_ {u \ cap v}}p _ {u \ cap v} требуется

qv ∖ w - 1 {\ displaystyle q_ {v \ setminus w} -1}q _ {v \ setminus w} -1

сложения и

qv ∖ w (d (v) - 1) {\ displaystyle q_ {v \ setminus w} (d (v) -1)}q _ {v \ setminus w} ( d (v) -1)

умножения.

(Мы представляем | AS (v) S (w) | {\ displaystyle | A_ {S (v) \ S (w)} |}| A _ {S (v) \ S (w)} | как qv ∖ вес {\ displaystyle q_ {v \ setminus w}}q _ {v \ setminus w} .)

Но будет много возможностей для xv ∩ w {\ displaystyle x_ {v \ cap w}}x _ {v \ cap w} , следовательно,. qv ∩ w = def | A S (v) ∩ S (w) | {\ displaystyle q_ {v \ cap w} {\ stackrel {\ mathrm {def}} {=}} | A_ {S (v) \ cap S (w)} |}q _ {v \ cap w} \ stackrel {\ mathrm {def}} {=} | A _ {S (v) \ cap S (w)} | возможностей для пв ∩ вес {\ displaystyle p_ {v \ cap w}}p _ {v \ cap w} . Таким образом, для всего сообщения потребуется

(qv ∩ w) (qv ∖ w - 1) = qv - qv ∩ w {\ displaystyle (q_ {v \ cap w}) (q_ {v \ setminus w} -1) = q_ {v} -q_ {v \ cap w}}(q _ {v \ cap w}) (q _ {v \ setminus w} -1) = q _ {v} - q _ {v \ cap w}

сложения и

(qv ∩ w) qv ∖ w. (d (v) - 1) знак равно (d (v) - 1) qv {\ displaystyle (q_ {v \ cap w}) q_ {v \ setminus w}. (d (v) -1) = (d ( v) -1) q_ {v}}(q _ {v \ cap w}) q _ {v \ setminus w}. (d (v) -1) = (d (v) -1) q _v

умножения

Общее количество арифметических операций, необходимых для отправки сообщения по направлению v 0 {\ displaystyle v_ {0}}v_ {0} по краям дерева будет

∑ v ≠ v 0 (qv - qv ∩ w) {\ displaystyle \ sum _ {v \ neq v0} (q_ {v} -q_ {v \ cap w})}\ sum _ {v \ neq v0} (q_v - q _ {v \ cap w})

сложения и

∑ v ≠ v 0 (d (v) - 1) qv {\ displaystyle \ sum _ {v \ neq v0} (d (v) -1) q_ {v}}\ sum _ {v \ neq v0} (d (v) - 1) q_v

умножения.

После того, как все сообщения были переданы, алгоритм завершается вычислением состояния в v 0 {\ displaystyle v_ {0}}v_ {0} Для вычисления состояния требуется d ( v 0) q 0 {\ displaystyle d (v_ {0}) q_ {0}}d (v_0) q _0 больше умножений. Таким образом, количество вычислений, необходимых для вычисления состояния, указано ниже:

∑ v ≠ v 0 (qv - qv ∩ w) {\ displaystyle \ sum _ {v \ neq v_ {0}} (q_ {v} -q_ {v \ cap w})}\ sum _ {v \ neq v _ {0}} (q _ {v} - q _ {v \ cap w})

сложения и

∑ v ≠ v 0 (d (v) - 1) qv + d (v 0) qv 0 {\ displaystyle \ sum _ {v \ neq v_ { 0}} (d (v) -1) q_ {v} + d (v_ {0}) q_ {v_ {0}}}\ sum _ {v \ neq v _ {0} } (d (v) -1) q _ {v} + d (v _ {0}) q _ {v _ {0}}

умножения

Таким образом, общая сумма количества вычислений равно

χ (T) = ∑ v ∈ V d (v) qv - ∑ e ∈ E qe {\ displaystyle \ chi (T) = \ sum _ {v \ in V} d (v) q_ {v} - \ sum _ {е \ in E} q_ {e}}\ chi (T) = \ sum _ {v \ in V} d (v) q _ {v} - \ sum _ {e \ in E} q _ {e} ---- (1) {\ displaystyle (1)}(1)

где e = (v, w) {\ displaystyle e = (v, w)}e = (v, w) является ребром, и его размер определяется как qv ∩ w {\ displaystyle q_ {v \ cap w}}q _ {v \ cap w}

Формула выше дает нам верхнюю границу.

Если мы определим сложность ребра e = (v, w) {\ displaystyle e = (v, w)}e = (v, w) как

χ (e) = qv + qw - qv ∩ вес {\ displaystyle \ chi (e) = q_ {v} + q_ {w} -q_ {v \ cap w}}\ chi (e) = q _ {v} + q _ {w} - q _ {v \ cap w}

Следовательно, (1) {\ displaystyle (1)}(1) можно записать как

χ (T) = ∑ e ∈ E χ (e) {\ displaystyle \ chi (T) = \ sum _ {e \ in E} \ chi (e)}\ chi (T) = \ sum _ {е \ in E} \ chi (e)

Теперь вычислим сложность ребра для задачи, определенной на рисунке 1, следующим образом:

χ (1, 2) = q 2 + q 2 q 3 - q 2 {\ displaystyle \ chi (1,2) знак равно q_ {2} + q_ {2} q_ {3} -q_ {2}}\ chi (1,2) = q_2 + q_2 q_3 - q_2
χ (2, 4) = q 3 q 4 + q 2 q 3 - q 3 {\ displaystyle \ chi (2, 4) = q_ {3} q_ {4} + q_ {2} q_ {3} -q_ {3}}\ chi (2,4) = q_3 q_4 + q_2 q_3 - q_3
χ (2, 5) = q 3 + q 2 q 3 - q 3 {\ displaystyle \ хи (2,5) знак равно q_ {3} + q_ {2} q_ {3} -q_ {3}}\ chi (2,5) = q_3 + q_2 q_3 - q_3
χ (4, 8) = q 4 + q 3 q 4 - q 4 {\ displaystyle \ chi (4,8) = q_ {4} + q_ {3} q_ {4} -q_ {4}}\ chi ( 4,8) = q_4 + q_3 q_4 - q_4
χ (4, 9) = q 2 q 4 + q 3 q 4 - q 4 {\ displaystyle \ chi (4,9) = q_ {2} q_ {4} + q_ {3} q_ {4} -q_ {4}}\ chi (4,9) = q_2 q_4 + q_3 q_4 - q_4
χ (1, 3) = q 2 + q 2 q 1 - q 2 {\ displaystyle \ chi (1,3) знак равно q_ {2} + q_ {2} q_ {1} -q_ { 2}}\ chi (1,3) = q _2 + q_2 q_1 - q_2
χ (3, 7) = q 1 + q 1 q 2 - q 1 {\ displaystyle \ chi (3,7) знак равно q_ {1} + q_ {1} q_ {2} -q_ {1}}\ chi (3,7) = q_1 + q_1 q_2 - q_1
χ (3, 6) = q 1 q 4 + q 1 q 2 - q 1 {\ displaystyle \ chi (3, 6) = q_ {1} q_ {4} + q_ {1} q_ {2} -q_ {1}}\ chi (3,6) = q_1 q _4 + q _1 q_2 - q _1

Общая сложность будет 3 q 2 q 3 + 3 q 3 q 4 + 3 q 1 q 2 + q 2 q 4 + q 1 q 4 - q 1 - q 3 - q 4 {\ displaystyle 3q_ {2} q_ {3} + 3q_ {3} q_ {4} + 3q_ {1} q_ {2} + q_ {2} q_ {4} + q_ {1} q_ { 4} -q_ ниже {1} -q_ {3} -q_ {4}}3 q _ {2} q _ {3} + 3q _ {3} q _ {4} + 3 q _ {1} q _ {2} + q _ {2} q _ {4} + q _ {1} q _ {4} - q _ {1} - q _ {3} - q _ {4} , что значительно по сравнению с прямым методом. (Здесь под методом мы подразумеваем методы, которые используют методы использования передачи сообщений. Время, затрачиваемое на использование методов прямого вычисления, будет эквивалентно вычислению для вычислений состояний каждого из узлов.)

всех вершин, в сообщении должно быть отправлено в обоих направлениях, а состояние должно быть вычислено в обоих вершинах. Для этого потребуется O (∑ vd (v) d (v) qv) {\ displaystyle O (\ sum _ {v} d (v) d (v) q_ {v})}O (\ sum _ {v} d (v) d (v) q _ {v}) но с помощью предварительных вычислений мы можем уменьшить количество умножений до 3 (d - 2) {\ displaystyle 3 (d-2)}3 (d-2) . Здесь d {\ displaystyle d}d- степень вершины. Пример: Если есть набор (a 1,…, ad) {\ displaystyle (a_ {1}, \ ldots, a_ {d})}(a _ {1}, \ ldots, a _ {d}) с d {\ displaystyle d}dчисла. Можно вычислить все d произведений d - 1 {\ displaystyle d-1}d-1 из ai {\ displaystyle a_ {i}}a _ {i} с помощью не более 3 (d - 2) {\ displaystyle 3 (d-2)}3 (d-2) умножения вместо очевидного d (d - 2) {\ displaystyle d (d-2)}d (d-2) . Выполним это, вычисляя величину b 1 = a 1, b 2 = b 1 ⋅ a 2 = a 1 ⋅ a 2, bd - 1 = bd - 2 ⋅ ad - 1 = a 1 a 2 ⋯ ad - 1 {\ displaystyle b_ {1} = a_ {1}, b_ {2} = b_ {1} \ cdot a_ {2} = a_ {1} \ cdot a_ {2}, b_ {d-1} = b_ { d-2} \ cdot a_ {d-1} = a_ {1} a_ {2} \ cdots a_ {d-1}}b_1 = a_1, b_2 = b_1 \ cdot a_2 = a_1 \ cdot a _2, b _ {d-1} = b _ {d-2} \ cdot a_ {d-1} = a_1 a_2 \ cdots a_ {d-1} и cd = ad, cd - 1 = ad - 1 cd = ad - 1 ⋅ ad,…, c 2 = a 2 ⋅ c 3 = a 2 a 3 ⋯ ad {\ displaystyle c_ {d} = a_ {d}, c_ {d-1} = a_ {d- 1} c_ {d} = a_ {d-1} \ cdot a_ {d}, \ ldots, c_ {2} = a_ {2} \ cdot c_ {3} = a_ {2} a_ {3} \ cdots a_ {d}}c_d = a_d, c_ {d-1} = a_ {d-1} c_d = a _ {d-1} \ cdot a_d, \ ldots, c_2 = a _2 \ cdot c_3 = a _2 a_ 3 \ cdots a_d для этого требуется 2 (d - 2) {\ displaystyle 2 (d-2)}2 (d-2) умножений. Тогда, если mj {\ displaystyle m_ {j}}m_j обозначает произведение всех ai {\ displaystyle a_ {i}}a_i кроме aj {\ displaystyle a_ {j}}a_j имеем m 1 = c 2, m 2 = b 1 ⋅ c 3 {\ displaystyle m_ {1} = c_ {2}, m_ {2} = b_ {1 } \ cdot c_ {3}}m_1 = c_2, m_2 = b_1 \ cdot c_3 и т. д. потребуются еще d - 2 {\ displaystyle d-2}d-2 умножения, в результате чего в сумме получится 3 (d - 2) {\ displaystyle 3 (d-2)}3 (d-2)

Когда доходит до построения соединений, мы должны выбрать остовное дерево с наименьшим значением χ (T) {\ displaystyle \ chi (T)}\ chi (T) , иногда это может означать добавление локального домена для снижения сложности дерева соединений.

Может показаться, что GDL верен только тогда, когда локальные домены могут быть представлены в виде дерева соединений. Но даже в случаях, когда есть циклы и количество итераций. Эксперименты с алгоритмом Галлагера - Таннера - Виберга для кодов с низкой плотностью проверки на четность подтвердили это утверждение.

Ссылки
  1. ^ Aji, S.M.; МакЭлис, Р.Дж. (Март 2000 г.). «Обобщенный распределительный закон» (PDF). IEEE Transactions по теории информации. 46 (2): 325–343. doi : 10.1109 / 18.825794.
  2. ^"закон о распределении доходов". Encyclopdia Britannica. Энциклопедия Britannica Online. Encyclopdia Britannica Inc. Проверено 1 мая 2012 г.
  3. ^«Архивная копия» (PDF). Архивировано из оригинального (PDF) 19 марта 2015 года. Проверено 19 марта 2015. CS1 maint: заархивированная копия как заголовок (ссылка ) Алгоритмы дерева соединений
  4. ^http://www-anw.cs.umass.edu/ ~ cs691t / SS02 / lectures / week7.PDF Архивировано 26 мая 2012 г. на Wayback Machine Алгоритм дерева соединений
Последняя правка сделана 2021-05-21 14:48:59
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте