程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> for-一個程序誰給講解下?

for-一個程序誰給講解下?

編輯:編程綜合問答
一個程序誰給講解下?

char * suff[100];

int pstrcmp(const void p, const void *q)
{
return strcmp(
(char**)p,*(char**)q);
}

int comlen_suff(char * p, char * q)
{
int len = 0;
while(*p && *q && *p++ == *q++)
{
++len;
if(*p == '#' || *q == '#')
{
return len;
}
}
return 0;
}

void LCS_suffix(char * X, int xlen, char * Y, int ylen)
{
int suf_index = maxlen = maxindex = 0;

int len_suff = xlen + ylen + 1;
char * arr = new char [len_suff + 1];  /* 將X和Y連接到一起 */
strcpy(arr,X);
arr[xlen] = '#';
strcpy(arr + xlen + 1, Y);

for(int i = 0; i < len_suff; ++i)  /* 初始化後綴數組 */
{
    suff[i] = & arr[i];
}

qsort(suff, len_suff, sizeof(char *), pstrcmp);

for(int i = 0; i < len_suff-1; ++i)
{
    int len = comlen_suff(suff[i],suff[i+1]);
    if(len > maxlen)
    {
        maxlen = len;
        suf_index = i;
    }
}
outputLCS(suff[suf_index]);

}

最佳回答:


後綴數組是處理字符串的有力工具。後綴數組是後綴樹的一個非常精巧的替代品,它比後綴樹容易編程實現,能夠實現後綴樹的很多功能而時間復雜度也並不遜色,而且它比後綴樹所占用的內存空間小很多。

子串:字符串S的子串r[i..j],i<=j,表示r串中從i到j這一段,也就是順次排列r[i],r[i+1],...,r[j]形成的字符串。

後綴:後綴是指從某個位置i開始到整個串末尾結束的一個特殊子串。字符串 s 的從第i個字符開始的後綴表示為Suffix(i), 也就是Suffix(i)=r[i..len(s)]。

大小比較:關於字符串的大小比較,是指通常所說的“字典順序”比較,也就是對於兩個字符串u、v,令i 從1 開始順次比較u[i]和v[i],如果u[i]=v[i]則令i加1,否則若u[i]v[i]則認為u>v(也就是vlen(u)或者i>len(v)仍比較不出結果,那麼,若len(u)len(v)則u>v。
從字符串的大小比較的定義來看,S的兩個開頭位置不同的後綴u和v進行比較的結果不可能是相等,因為u=v的必要條件len(u)=len(v)在這裡不可能滿足。

後綴數組:後綴數組SA是一個一維數組,它保存1..n的某個排列SA[1],SA[2],……,SA[n],並且保證Suffix(SA[i])<Suffix(SA[i+1]),1<=i<n。也就是將S的n個後綴從小到大進行排序之後把排好序的後綴的開頭位置順次放入SA中。

1 後綴數組求最長公共子串(LCS)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved