1. 程式人生 > >因子圖與和積演算法

因子圖與和積演算法

在1981年Tanner的論文中,介紹了一種可以用來表示碼字的圖形,稱為Tanner圖。 Tanner圖包含兩類節點:碼元(變數)節點和校驗節點,然後通過邊連線這兩種不同的節點,並且同種節點間不能有直接的邊連線。如果給定一個碼字的碼元數和它的校驗方程,則用Tanner圖可以唯一地確定該碼字。例如一個(7, 3)線性分組碼,其校驗方程為:
 

 在用Tanner圖表示的過程中, 碼的譯碼演算法是可以用明確的公式反映並可程式化進行, 即有很強的可實現性。Tanner圖從本質上講是用碼字的校驗方程來表述碼字

  • 訊息傳遞演算法

 和 積 算 法 (Sum-Product Algorithm) 作 為 一 種 通 用 的 消 息 傳 遞 算 法(Message Passing Algorithm), 描述了因子圖中頂點(變數節點和校驗節點) 處的資訊計算公式, 而在基於圖的編譯碼系統中, 我們首先需要理解的是頂點之間是如何通過邊來傳遞資訊。

  • 例如, 若干士兵排成一佇列, 每個士兵只能與他相鄰的士兵交流, 問如何才能使每個士兵都知道總的士兵數?
     

  •  將上面的情況抽象成一般模型,如下圖所示,圖中每個點可看作是一個士兵,對應到編碼理論中則可看作因子圖中對應的節點(如前述的變數節點和校驗節點,或卷積碼的BCJR演算法中的狀態點)。

  •  對應上圖, 引入幾個概念: 先驗資訊P、 外資訊E以及後驗資訊A。 在上例中, 先驗資訊P表示每個士兵自身的數字1, 如圖(a) 所示;外資訊E表示從其他相鄰的士兵獲取的資訊, 如圖(c) 所示, 即每個士兵的外資訊均為5;後驗資訊A=P+E, 在這裡表示佇列的總人數, 即為6。 從圖中可以看出, 得到最後的結果是通過前向計算和後向計算得到的。

  •  從圖中可以看出,經過5步計算第3、第4個士兵可以得到總人數6(5+1),經過6步計算第2、第5個士兵可以得到總人數,經過7步計算所有士兵均知道了總人數。

問題:如果士兵不是按照佇列排列,怎麼辦呢?

  •  該圖(a)與前圖不同之處在於, 有些士兵不止有2個相鄰的士兵, 可能有3個或更多。 具體資訊傳遞流程如圖(b)所示。 每個士兵同樣可以獲得其相鄰士兵給他的外資訊, 同時加上自身的資訊然後傳遞給相鄰的士兵。
  • 在上面的兩個例子中, 每個士兵節點的資訊只需在所有其相鄰節點上進行一次前向和後向的計算, 則每個士兵就可知道總人數。 這樣的圖有一個共同特點:所有節點構成一棵樹, 而樹結構中是沒有環路的。


如果有環路, 會導致什麼結果?
 

由於有環路的存在, 如果用上述資訊更新方法來確定總人數, 將會導致無法確定何時中止資訊的傳遞, 因此也就無法確定士兵人數。 對應到編碼理論, 則在設計LDPC碼的校驗矩陣時, 應儘量避免校驗矩陣對應的因子圖中出現短環(如4迴圈、 6迴圈、 8迴圈等) 。

將前述訊息傳遞演算法中的節點構成的圖(Tanner圖)更一般化就得到了因子圖。 因子圖是一種用於描述多變數函式的“二部圖” (Bipartite Graph)。一般來說, 在因子圖中存在兩類節點: 變數節點和對應的函式節點, 變數節點所代表的變數是函式節點的自變數。 同類節點之間沒有邊直接相連。
例如:圖(a) 表示有5個自變數的函式g的因子圖。 假定函式g可以分解成幾個“區域性函式” 之積的形式, 即:
 

相關推薦

因子演算法

在1981年Tanner的論文中,介紹了一種可以用來表示碼字的圖形,稱為Tanner圖。 Tanner圖包含兩類節點:碼元(變數)節點和校驗節點,然後通過邊連線這兩種不同的節點,並且同種節點間不能有直接的邊連線。如果給定一個碼字的碼元數和它的校驗方程,則用Tanner圖可以唯

dijkstraprim演算法

package b; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Graph { pr

大話資料結構讀書筆記艾提拉總結 查詢演算法 排序演算法比較好 第1章資料結構緒論 1 第2章演算法 17 第3章線性表 41 第4章棧佇列 87 第5章串 123 第6章樹 149 第7章 21

大話資料結構讀書筆記艾提拉總結   查詢演算法 和排序演算法比較好     第1章資料結構緒論 1 第2章演算法 17 第3章線性表 41 第4章棧與佇列 87 第5章串 123 第6章樹 149 第7章圖 211

像卷濾波

像素點 aaa uda uri 水平 攝像機 fsp 快速 2.3 一、線性濾波與卷積的基本概念 線性濾波可以說是圖像處理最基本的方法,它可以允許我們對圖像進行處理,產生很多不同的效果。做法很簡單。首先,我們有一個二維的濾波器矩陣(有個高大上的名字叫卷積核)和一個要處理的二

關於Android的margin(當前視周圍視的距離)padding(當前視內部內容的距離)

utf mas 關於 roi pad code odi ren cnblogs <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.an

TensorFlow深度學習實戰---像識別神經網絡

實戰 都是 循環 特征 結構 分析 神經網絡 圖片 網絡 全連接層網絡結構:神經網絡每兩層之間的所有結點都是有邊相連的。 卷積神經網絡:1.輸入層 2.卷積層:將神經網絡中的每一個小塊進行更加深入地分析從而得到抽象程度更高的特征。

資料結構演算法-最短路徑DijkstraFloy演算法

最短路徑問題一般分為兩種情況,單源最短路徑(即從一個點出發到其餘各點的最短路徑問題)和每對頂點之間的最短路徑問題。Dijkstra和Floy演算法相比之下我更喜歡Floy演算法,該演算法容易理解,思路簡潔。 兩種演算法解決最短路徑都是基於貪心的演算法,從區域性出發一點點擴充套件。 以一個

為什麼我要放棄javaScript資料結構演算法(第十章)—— 排序搜尋演算法

本章將會學習最常見的排序和搜尋演算法,如氣泡排序、選擇排序、插入排序、歸併排序、快速排序和堆排序,以及順序排序和二叉搜尋演算法。 第十章 排序和搜尋演算法 排序演算法 我們會從一個最慢的開始,接著是一些效能好一些的方法 先建立一個數組(列表)來表示待排序和搜尋的資料結構。 function Arra

-最短路徑—Dijkstra演算法Floyd演算法

1.定義概覽 Dijkstra(迪傑斯特拉)演算法是典型的單源最短路徑演算法,用於計算一個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。Dijkstra演算法是很有代表性的最短路徑演算法,演算法使用了廣度優先搜尋解決賦權有向圖或者無向圖的單源

排序演算法總結(含動演示Java程式碼實現)

本文將圍繞氣泡排序、桶排序、計數排序、堆排序、插入排序、並歸排序、快速排序和選擇排序,按照描述、時間複雜度(最壞情況)、動態圖展示和程式碼實現來講解。本文預設排序為從小到大。 本文相關程式碼已上傳至github,歡迎關注https://github.com/zhuzhenke/commo

MindMaster-腦其他架構流程圖線上編輯器

http://mm.edrawsoft.cn/files MindMaster線上網頁編輯 現如今很多人都在學習使用思維導圖,它可以幫助我們發散思維理清思路。面對市場上琳琅滿目的腦圖軟體,很多人都不知道怎麼選。 Mindmaster下載地址:http://www.edrawso

有向的無權最短路徑演算法帶權的Dijkstra演算法

  最短路徑演算法是圖論中的常見問題,在實際中有著較為廣泛的應用,比如查詢從一個地方到另一個地方的最快方式。問題可以概括為,對於某個輸入頂點s,給出s到所有其它頂點的最短路徑。水平有限,暫時先對這個問題的求解做簡單記錄。   無權圖是有權最短路徑的特例,即邊的權重均是1。演

經典演算法 | 求整數的全部質數因子分析解答

有這麼一道題:功能:輸入一個正整數,按照從小到大的順序輸出它的所有質數的因子(如180的質數因子為2 2 3 3 5 )最後一個數後面也要有空格這一道題目讓你找給定整數N的全部的質數因子。一般的人可能會考慮每一次遍歷一遍2到N的全部的整數,找到一個質數因子a,然後N/=a,直

的最小生成樹:Prim演算法Kruskal演算法

1. 圖的最小生成樹 生成樹的定義:如果連通圖G的一個子圖是一棵包含G的所有頂點的樹,則該子圖稱為G的生成樹。 生成樹是連通圖的包含圖中的所有頂點的極小連通子圖。它並不唯一,從不同的頂點出發進行遍歷,可以得到不同的生成樹。 其中,權值最小的樹就是最小生成樹

的遍歷演算法(DFSBFS)

1.    圖的深度遍歷DFS 可採用遞迴和迴圈兩種方式實現。 方法一:採用遞迴的方式。 定義一個標誌陣列表示某個結點是否已經被訪問過。以鄰接矩陣的形式表示圖。依次對深度遍歷圖中的每個未被遍歷過的結點,然後針對該結點未被遍歷過的鄰接點再進行深度遍歷,每個結點被遍歷後加入到

OpenCV - 利用SIFTRANSAC演算法實現物體的檢測定位,並求出變換矩陣(findFundamentalMatfindHomography的比較)- 轉

本文目標是通過使用SIFT和RANSAC演算法,完成特徵點的正確匹配,並求出變換矩陣,通過變換矩陣計算出要識別物體的邊界(文章中有部分原始碼,整個工程我也上傳了,請點選這裡)。 SIFT演算法是目前公認的效果最好的特徵點檢測演算法。 整個實現過程可以複述如下:提供兩張初始圖片,一幅為模板影象

利用SIFTRANSAC演算法(openCV框架)實現物體的檢測定位,並求出變換矩陣(findFundamentalMatfindHomography的比較)

本文目標是通過使用SIFT和RANSAC演算法,完成特徵點的正確匹配,並求出變換矩陣,通過變換矩陣計算出要識別物體的邊界(文章中有部分原始碼,整個工程我也上傳了,請點選這裡)。 SIFT演算法是目前公認的效果最好的特徵點檢測演算法,關於該演算法的就不多說了,網上的資料有很多

的遍歷演算法-深度優先搜尋演算法(dfs)廣度優先搜尋演算法(bfs)

一、前提須知圖是一種資料結構,一般作為一種模型用來定義物件之間的關係或聯絡。物件:頂點(V)表示;物件之間的關係或者關聯:通過圖的邊(E)來表示。一般oj題中可能就是點與點,也有可能是具體生活中的物體圖

的概念關於的幾個演算法

一、圖的概念 圖是演算法中是樹的拓展,樹是從上向下的資料結構,結點都有一個父結點(根結點除外),從上向下排列。而圖沒有了父子結點的概念,圖中的結點都是平等關係,結果更加複雜。 圖G=(V, E),其中

程式設計師面試金典: 9.4樹 4.2給定有向,設計一個演算法,找出兩個節點之間是否存在一條路徑。

#include <iostream> #include <stdio.h> #include <vector> #include <queue> using namespace std; /* 問題:給定有向圖,設計一個