111年關務三等資料結構

四、以文本 (text) X = “AGTCATTCGATTC”,樣式 (pattern) Y = “ATTC” 兩字串為例,請問使用暴力比較/窮舉法 (exhaustive search) 中的樣式前向法(forward) 及後向法 (backward) 各需比較幾次?(10分)

答:

暴力比較法實作:

#include <iostream>

#include <string>

using namespace std;

int Find(char Text[ ], char Pattern[ ]) {

    int m, n, T = 0, P = 0, StartT = 0, EndT; // T 指向文字,P 指向 Pattern

    n = strlen(Text);

    m = strlen(Pattern);

    EndT = m-1;

    int cnt = 0; // 比較次數

    while (P < m && StartT <= n-m) { // P = m 時,離開迴圈

        cout << "" << ++cnt << "次比較" << endl;

        if (Text[T] == Pattern[P]) {

            P++;

            T++;

        }

        else {

            StartT++;

            EndT++;

            T = StartT;

            P = 0;

        }

    }

    if (P == m) {

        return(StartT); // 傳回比對成功的字串開頭索引

    }

    return(-1);

}

int main( ) {

    char Text[ ] = "AGTCATTCGATTC";

    char Pattern[ ] = "ATTC";

    cout << "字串開頭索引是" << Find(Text, Pattern) << endl;

    return 0;

}

執行結果:

1次比較

2次比較

3次比較

4次比較

5次比較

6次比較

7次比較

8次比較

9次比較

字串開頭索引是4

()樣式前向法

[速解]

文本

A

G

T

C

A

T

T

C

G

A

T

T

C

次數

2

1

1

1

1

1

1

1

比較次數 = 2+1+1+1+1+1+1+1 = 9次。

[詳解]

1.1次比較:

  文本:

T

 

 

 

 

 

 

 

 

 

 

 

 

0

1

2

3

4

5

6

7

8

9

10

11

12

A

G

T

C

A

T

T

C

G

A

T

T

C

  樣式:

P

 

 

 

0

1

2

3

A

T

T

C

2.2次比較:

  文本:

 

T

 

 

 

 

 

 

 

 

 

 

 

0

1

2

3

4

5

6

7

8

9

10

11

12

A

G

T

C

A

T

T

C

G

A

T

T

C

  樣式:

 

P

 

 

0

1

2

3

A

T

T

C

3.3次比較:

  文本:

 

T

 

 

 

 

 

 

 

 

 

 

 

0

1

2

3

4

5

6

7

8

9

10

11

12

A

G

T

C

A

T

T

C

G

A

T

T

C

  樣式:

P

 

 

 

0

1

2

3

A

T

T

C

4.4次比較:

  文本:

 

 

T

 

 

 

 

 

 

 

 

 

 

0

1

2

3

4

5

6

7

8

9

10

11

12

A

G

T

C

A

T

T

C

G

A

T

T

C

  樣式:

P

 

 

 

0

1

2

3

A

T

T

C

5.5次比較:

  文本:

 

 

 

T

 

 

 

 

 

 

 

 

 

0

1

2

3

4

5

6

7

8

9

10

11

12

A

G

T

C

A

T

T

C

G

A

T

T

C

  樣式:

P

 

 

 

0

1

2

3

A

T

T

C

6.6次比較:

  文本:

 

 

 

 

T

 

 

 

 

 

 

 

 

0

1

2

3

4

5

6

7

8

9

10

11

12

A

G

T

C

A

T

T

C

G

A

T

T

C

  樣式:

P

 

 

 

0

1

2

3

A

T

T

C

7.7次比較:

  文本:

 

 

 

 

 

T

 

 

 

 

 

 

 

0

1

2

3

4

5

6

7

8

9

10

11

12

A

G

T

C

A

T

T

C

G

A

T

T

C

  樣式:

 

P

 

 

0

1

2

3

A

T

T

C

8.8次比較:

  文本:

 

 

 

 

 

 

T

 

 

 

 

 

 

0

1

2

3

4

5

6

7

8

9

10

11

12

A

G

T

C

A

T

T

C

G

A

T

T

C

  樣式:

 

 

P

 

0

1

2

3

A

T

T

C

9.9次比較:

  文本:

 

 

 

 

 

 

 

T

 

 

 

 

 

0

1

2

3

4

5

6

7

8

9

10

11

12

A

G

T

C

A

T

T

C

G

A

T

T

C

  樣式:

 

 

 

P

0

1

2

3

A

T

T

C

  樣式比對結束。

()樣式後向法

[速解]

文本

A

G

T

C

A

T

T

C

G

A

T

T

C

次數

1

1

1

1

比較次數 = 1+1+1+1 = 4次。

[詳解]

1.1次比較:

  文本:

 

 

 

 

 

 

 

 

 

 

 

 

T

0

1

2

3

4

5

6

7

8

9

10

11

12

A

G

T

C

A

T

T

C

G

A

T

T

C

  樣式:

 

 

 

P

0

1

2

3

A

T

T

C

2.2次比較:

  文本:

 

 

 

 

 

 

 

 

 

 

 

T

 

0

1

2

3

4

5

6

7

8

9

10

11

12

A

G

T

C

A

T

T

C

G

A

T

T

C

  樣式:

 

 

P

 

0

1

2

3

A

T

T

C

3.3次比較:

  文本:

 

 

 

 

 

 

 

 

 

 

T

 

 

0

1

2

3

4

5

6

7

8

9

10

11

12

A

G

T

C

A

T

T

C

G

A

T

T

C

  樣式:

 

P

 

 

0

1

2

3

A

T

T

C

4.4次比較:

  文本:

 

 

 

 

 

 

 

 

 

T

 

 

 

0

1

2

3

4

5

6

7

8

9

10

11

12

A

G

T

C

A

T

T

C

G

A

T

T

C

  樣式:

P

 

 

 

0

1

2

3

A

T

T

C

  樣式比對結束。

arrow
arrow
    文章標籤
    資料結構
    全站熱搜
    創作者介紹
    創作者 jacksaleok 的頭像
    jacksaleok

    國考資訊處理工作室(高考二級資訊處理/高考三級資訊處理/調查局三等/關務人員三等/地方特考三等)

    jacksaleok 發表在 痞客邦 留言(0) 人氣()