演算法實驗 格雷碼問題

2021-08-01 19:45:59 字數 2147 閱讀 1890

實驗 遞迴演算法設計與應用

一. 基本原理的概括

遞迴是一種重要的程式設計方法。使用遞迴方法有時可使演算法簡潔明瞭,邏輯清晰,易於設計。

遞迴指演算法自己呼叫自己, 有直接遞迴與間接遞迴兩種。

遞迴方法用於解決一類滿足遞迴關係的問題。即:對原問題的求解可轉化為對其性質相同的子問題的求解。

二. 該類演算法設計與實現的要點

1. 遞迴關係:產生遞迴的基礎。

當演算法中某步驟要通過解性質相同的子問題實現時,該步驟用遞迴呼叫實現。找準遞迴關係是解此類問題的關鍵。

2. 遞迴出口(結束條件):確定遞迴的層數。

當子問題的規模充分小時可直接求解時,遞迴結束。乙個遞迴關係必須有遞迴出口才能正常結束。

3. 引數設定:引數表示了原問題及其不同的子問題。

引數表示了子問題的大小和狀態,以區別原問題以及不同層次的子問題。

4. 演算法功能的設定:嚴格規定遞迴演算法要解決什麼樣的問題。

演算法功能的正確設定是保證遞迴過程正確進行的前提。

三. 實驗目的和要求

1. 加深對遞迴演算法的理解,掌握遞迴演算法的設計方法;

2. 針對具體應用問題,設計解決問題的演算法;

3. 分析演算法的複雜性,尋找比較高效的演算法,並實現。

四. 實驗內容

格雷碼問題

1.問題描述

對於給定的正整數n,格雷碼為滿足如下條件的乙個編碼序列:

(1) 序列由2n個編碼組成,每個編碼都是長度為n的二進位制位串。

(2) 序列中無相同的編碼。

(3) 序列中位置相鄰的兩個編碼恰有一位不同。

例如:n=2時的格雷碼為:。

設計求格雷碼的遞迴演算法並實現。

2. 具體要求

輸入的第一行是乙個正整數m,表示測試例個數。接下來幾行是m個測試例的資料,每個測試例的輸入資料由一行組成,用乙個正整數n (n<=20),表示格雷碼的位數。

輸出:對於每個測試例輸出2n行,表示2n個長度為n的格雷碼。第一行為最長遞增子串行的長度,第二行為最長遞增子串行,整數之間用乙個空格隔開。兩個測試例的輸出資料之間用乙個空行隔開。

3. 測試資料

如, 輸入:

4 輸出:

0 0 0 0

0 0 0 1

0 0 1 1

0 0 1 0

0 1 1 0

0 1 1 1

0 1 0 1

0 1 0 0

1 1 0 0

1 1 0 1

1 1 1 1

1 1 1 0

1 0 1 0

1 0 1 1

1 0 0 1

1 0 0 0

4. 設計與實現的提示

對於同乙個輸入的正整數,不同的演算法得到的格雷碼可能會不同。長度為n的格雷碼可以由長度為n-1的格雷碼適當變換而成。可以用陣列或字串來儲存格雷碼。對於較大的正整數n,用陣列儲存容易引起宕機。

五、實驗步驟

觀察格雷碼的結構,我們會有以下發現:

1、除了最高位(左邊第一位),格雷碼的位元完全上下對稱(看下面列表)。比如第乙個格雷碼與最後乙個格雷碼對稱(除了第一位),第二個格雷碼與倒數第二個對稱,以此類推。

2、所以,在實現的時候,可以利用遞迴,在每一層前面加上0或者1,然後就可以列出所有的格雷碼。

如果要生成4位元格雷碼,我們只需要在3位元格雷碼上再加一層0,1就可以了: 0000,0001,0011,0010,0110,0111,0101,0100,1100,1101,1111,1110,1010,0111,1001,1000.

也就是說,n位元格雷碼是基於n-1位元格雷碼產生的。

根據以上分析編寫遞迴演算法

實驗**:

public

class test2

}public

static string graycode(int n)

//上一位元的格雷碼

string last = graycode(n - 1);

//在上一位元的基礎上加一層0,1

for (int i = 0; i < last.length; i++)

return graycode;

} }

自動生成格雷碼演算法

典型的二進位制格雷碼 binary gray code 簡稱格雷碼,在一組數的編碼中,若任意兩個相鄰的 只有一位二進位制數不同,則稱這種編碼為 格雷碼 gray code 另外由於最大數與最小數之間也僅一位數不同,即 首尾相連 因此又稱 迴圈碼或 反射碼。自動生成格雷碼的演算法主要利用以下規則 1....

生成格雷碼

程式設計題 生成格雷碼 在一組數的編碼中,若任意兩個相鄰的 只有一位二進位制數不同,則稱這種編碼為格雷碼 gray code 請編寫乙個函式,使用遞迴的方法生成n位的格雷碼。給定乙個整數n,請返回n位的格雷碼,順序為從0開始。測試樣例 1返回 0 1 思想 用遞迴法實現,把求n位格雷碼分解為求n 1...

生成格雷碼

題目描述 在一組數的編碼中,若任意兩個相鄰的 只有一位二進位制數不同,則稱這種編碼為格雷碼 gray code 請編寫乙個函式,使用遞迴的方法生成n位的格雷碼。給定乙個整數n,請返回n位的格雷碼,順序為從0開始。測試樣例 1返回 0 1 1 n 1時,返回0,1 2 n 2時,返回00,01,10,...