『壹』 計算冗餘碼
FJNU.1240Description
計算機網路中採用循環冗餘碼來校驗數據的正確性。其原理是:發送方計算出待發送的二進制數據的循環冗餘碼,並隨同原數據一起發送到接收方;接收方通過重新計算接收到的數據的循環冗餘碼,並和收到的循環冗餘碼進行比較,如果兩者相同則可判定所收到的數據是正確的,否則說明數據是錯誤的。其中計算二進制數據的循環冗餘碼的計算過程如下:
>>協議事先約定一個二進制生成表達式,本題設為10011;
>>將待發送的二進制數據串的末尾加4個0;
>>將補上0的數據串按模2除法除於生成表達式,取余數;
>>該余數就是該二進制數據串的循環冗餘碼。
例如:
數據串為:1101011011
生成表達式為:10011
循環冗餘碼為1110
計算過程如下:
根據上述的計算方法,請編寫一個循環冗餘碼計算程序,假設二進制數據串的長度不超過20位,生成表達式固定為10011。
Input
輸入的第一行含一個正整數k (1<=k<=10),表示測試例的個數。後面緊接著k行,每行對應一個測試例,含一個N位二進制串(1<=N<=20),代表數據。
Output
每個測試例對應一行輸出,含一個5位二進制串,表示循環冗餘碼。
Sample Input
2
1101011011
10101010
Sample Output
01110
01001
Source
福建師范大學第三屆程序設計比賽網上預賽
My Program
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄它是華麗的分隔線
【題意簡述】
對於輸入的二進制數,在末尾加上4個0後用10011對其進行模2除法。並輸出最後的結果(5位二進制碼)。
【粗略分析】
由於C++中沒有二進制的數據類型,因此採用字元串記錄。
觀察運算圖可知,每次都取前5位對它進行模2除法。我們可以設定一個i = 0 to n-5,用來計算每一步。
我們還可以觀察出,每次只有第i位為1時才會進行運算。所以我們加一個判定m[j]=='1'時才計算。
因為固定除數都為10011,我們直接將它列為數組,i=1 to 5 進行模2並存儲回字元數組即可。
【C++源代碼】
簡單地模擬一下計算過程就可以了。
『貳』 冗餘 和 容錯 的區別
區別:容錯主要依靠冗餘設計來實現,它以增加資源的辦法換取可靠性。由於資源的不同,冗餘技術分為硬體冗餘、軟體冗餘、時間冗餘和信息冗餘。
硬體冗餘是通過硬體的重復使用來獲得容錯能力。
軟體冗餘的基本思想是用多個不同軟體執行同一功能,利用軟體設計差異來實現容錯。
信息冗餘是利用在數據中外加的一部分信息位來檢測或糾正信息在運算或傳輸中的錯誤而達到容錯。在通信和計算機系統中,常用的可靠性編碼包括:奇偶校驗碼、循環冗餘碼CRC、漢明碼等。
時間冗餘是通過消耗時間資源來實現容錯,其基本思想是重復運算以檢測故障。按照重復運算是在指令級還是程序級分為指令復執程序復算。指令復執當指令執行的結果送到目的地址中,如果這時有錯誤恢復請求信號,則重新執行該指令。
程序復算常用程序滾回技術。例如將機器運行的某一時刻稱作檢查點,此時檢查系統運行的狀態是否正確,不論正確與否,都將這一狀態存儲起來,一旦發現運行故障,就返回到最近一次正確的檢查點重新運行。
冗餘設計可以是元器件級的冗餘設計,也可以是部件級的、分系統級的、或系統級的冗餘設計。冗餘要消耗資源,應當在可靠性與資源消耗之間進行權衡和折衷。
容錯系統工作過程包括自動偵測、自動切換、自動恢復。
『叄』 計算機網路中的循環冗餘效驗問題。
CRC碼:原理循環冗餘碼校驗英文名稱為Cyclical Rendaney Check
G(X)是生成多項式。
CRC碼是用G(X)來生成的。(第一句)
K位二進制加上R位CRC碼,信息位要向左移N-K位(這個不難理解吧,碼字長度為N,信息欄位為K位,校驗欄位為R位(N=K+R),就是向左移動R位)