統計檔案中單詞頻率的各種演算法實現

2021-07-04 18:54:42 字數 1118 閱讀 3908

為了應付面試,最近一直在學習資料結構和演算法。本文將通過統計檔案中單詞的頻率,並按頻率出現順序和按字母順序輸出檔案中的單詞及出現次數。

比如「abc  aa hello welcome hello aa abc hello」, 按頻率次數的輸出為:

hello 3

aa 2 

abc 2

welcome 1

按字元順序輸出為:

aa 2 

abc 2

hello 3

welcome 1

本文將嘗試採用以下幾種演算法分別來實現

1.陣列+氣泡排序

2.鍊錶+雜湊

3.二叉樹

方案一:

首先構件如下結構體:

typedef struct node *nodeptr

typedef struct node

char*word;//用來存放單詞

int count;//用來存放單詞出現的個數

}node

陣列的劣勢在於需要事先知道文字檔案中字串的多少,如果太大會造成浪費太小又會造成陣列溢位。

只能先定義乙個足夠大的陣列

#define max_word_num 1024*1024

通過乙個個讀取檔案中的字串,將其按順序存放在陣列中,每次存放之前要比較當前字串是否在陣列中已經存在,

當存在時count++,不存在即存放在最後乙個未被暫用的陣列空間中。比較的時間複雜度為o(n)

由於陣列的插入與刪除操作是不方便的,所以排序是放在最後的。

針對按詞頻輸出和按字母順序輸出都是一樣的比較方法,採用氣泡排序

for(int i = 0 ; i < word_num; i++)

for(int j = 0 ; j < word_num - i ; j++)

}這種排序的時間複雜度為o(n*n)

方案二:

陣列存在明顯的弊端,需要事先知道檔案中字串的個數

那麼可以改用鍊錶,鍊錶的優勢在於插入與刪除

在插入之前我們就保證鍊錶是有序的,我們先按字母順序插入,

比如aa就比abc要小,那麼aa會插入在abc之前

查詢插入的時間複雜度為o(n)

for(int i = 0 ; i if()

使用Python計算檔案中的單詞頻率

是否曾想知道一種快速的方法來告知某些文件所關注的內容?它的主要主題是什麼?讓我給你這個簡單的把戲。列出文件中提到的唯一單詞,然後檢查每個單詞被提及了多少次 頻率 通過這種方式,您可以了解文件的主要內容。但這手動操作並不容易,所以我們需要一些自動化的過程,不是嗎?是的,自動化過程將使這一過程變得更加容...

Shell程式設計 統計乙個檔案中的詞頻

寫乙個 bash 指令碼以統計乙個文字檔案 words.txt 中每個單詞出現的頻率。為了簡單起見,你可以假設 words.txt只包括小寫字母和 每個單詞只由小寫字母組成。單詞間由乙個或多個空格字元分隔。示例 假設 words.txt 內容如下 the day is sunny the the t...

shell指令碼統計檔案中單詞的個數

一 方案 方法一 1 cat file sed s g awk end 其中file為要操作的檔案,sed中 間有乙個空格。2 sed s g file awk end 1 和 2 效果一致。方法二 1 awk beginend file 這裡 f 表明每個詞用逗號分隔 nf其實是number of...