程式設計珠璣(2)第十五章學習筆記

2021-06-14 14:27:13 字數 1091 閱讀 7415

`我們生活在乙個字串的世界裡。位字串構成了整數和浮點數,數字串構成了**號碼,字母字串構成了單詞,長字串可以形成網頁,更長的字串則形成書。在遺傳學家的資料庫和人的細胞裡,存在著由字母a、c、g和t表示的極長的字串。

我們的第乙個問題是:為文件中包含的單詞生成乙個列表。我們的第乙個c++程式用到了標準模板庫中的sets和strings。主要思想就是用set的insert函式直接插入即可。而set只能儲存單詞,卻無法統計每個單詞出現的次數。為了統計每個單詞出現的次數,我們可以使用map這一資料結構。當然,為了節省時間,我們也可以自己建立雜湊表。

有乙個很簡單的辦法,暴力匹配所有字串,但時間複雜度是o(n^2),無法令人滿意。

還有乙個辦法,利用「字尾陣列」。「字尾陣列」是乙個字元指標陣列。下面是具體實現**:

#include#include#include#define maxn 500

char c[maxn], *a[maxn];

int pstrcmp(const void *a, const void *b) //字串陣列qsort的比較函式

int comlen(char *p, char *q)

return i;

}int main()

c[n] = null;

qsort(a, n, sizeof(char*), pstrcmp); //對字尾陣列排序

maxlen = 0;

maxi = 0;

for(i=0; imaxlen)

} printf("%.*s\n", maxlen, a[maxi]);

return 0;

}

原理:字串的資料結構。

雜湊。這一結構的平均速度很快,且易於實現。

平衡樹。這些結構在最壞的情況下也有較好的效能,c++標準模板庫的set和map的大部分實現都採用平衡樹。

字尾陣列。初始化指向文字中每個字元(或每個單詞)的指標陣列,對其排序就得到乙個字尾陣列。然後可以遍歷該陣列以查詢接近的字串,也可以使用二分搜尋查詢單詞或短語。

這是本書的最後一章,看完之後有一些啟發,但總覺得自己還有很多問題沒弄明白,需要再接再礪啊!

UNP 學習筆記 第十五章

1.描述符傳遞 接收傳送者的憑證用到的時候再看 2.struct sockaddr un 3.socketpair 4.書上有三四個例子,跟著學習一下如何建立乙個unix域套接字1.基礎 2.socketpair 1.unix域套接字往往比通訊兩端位於同乙個主機的tcp套接字快出一倍。2.unix域...

程式設計珠璣 第十五章 字串(二)

給定乙個文字作為輸入,找出其中最長的重複字串 1 檢視所有字串,並依次進行比較 for i 1,n for j i,if thielen comlen c i c j maxlen maxlen thielen maxi i maxj j 思路十分簡單,不過由於查詢所有字串對,因此時間最少為n n的...

第十五章預習

public class yuxi15 else 字串的比較 字串1.equals 字串2 比較兩個字串的值是否相同,返回boolean型別的值.如果相同,則返回真值,否則返回假值.字串1.equalsignorecase 字串2 忽略大小寫比較字串1和字串2.如果都相同則返回真值 否則返回假值 改...