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