軟工1816 第二次作業 個人專案

2022-08-15 12:42:09 字數 3073 閱讀 8420

github提交鏈結

psp**

psp2.1

personal software process stages

預估耗時(分鐘)

實際耗時(分鐘)

planning

計畫15

45· estimate

· 估計這個任務需要多少時間100

development

開發120

120· analysis

· 需求分析 (包括學習新技術)

180240

· design spec

· 生成設計文件

3020

· design review

· 設計複審

3020

· coding standard

· **規範 (為目前的開發制定合適的規範)

3010

· design

· 具體設計

6030

· coding

· 具體編碼

9060

· code review

· **複審

60120

· test

· 測試(自我測試,修改**,提交修改)

200240

reporting

報告10

10· test repor

· 測試報告

1010

· size measurement

· 計算工作量

2010

· postmortem & process improvement plan

· 事後總結, 並提出過程改進計畫

4560

|       | 	合計  |910 |995
**內容分的很細,而自己實際在做的時候腦袋都糊了,可能真正寫**的時間沒那麼長,但是邊寫邊找資料就把幾個時間都混在一起了。大部分的時間都在查部落格找資料,雖然頭都要炸了,但是也確實了解到了很多新東西。

功能實現思路歷程

int countline(char *filename)//計算行數

int countwords(char *filename)//計算總的單詞數

int countchars(char *filename)//計算總字元數

void countwf(char *filename)//計算排序輸出詞頻前十的詞

效能分析

eassy[s]++;
這句**做的事情可不少。首先eassy是乙個map容器,字串s為key值,當執行這句**時會在紅黑二叉樹中查詢是否有key值為s的結點,若有其value++,若無開闢乙個新結點key值為s,value=1。這樣腦闊就疼了,因為只有一句話,根本不知道怎麼優化,map內部執行具體機制也不知道,就去網上查「如何增快map的速度」。然後發現了unordered_map。

unordered_map

於是將map 改為unordered_map,再進行分析,結果如下:

進入main函式檢視具體消耗:

速度直接提公升了1.5倍,hash_map誠不欺我。其他地方的優化就沒有細做下去了,實在是想不到能夠怎麼優化。不過這裡丟擲乙個問題:為什麼判斷是否符合需求中單詞的樣子中,判斷az字元所用的時間比起az字元所用的時間多用了將近4倍。

演算法複雜度分析:整體只需遍歷檔案一編,複雜度為o(n),排序的複雜度為o(nlog10), unordered_map 資料結構為無序雜湊表,儲存時間複雜度僅為o(1)時間,故這個程式總的時間複雜度為o(n)+o(nlogn)

功能模組的封裝

統計字元數

統計單詞數

統計最多的10個單詞及其詞頻

統計總行數

\\dll1.h

__declspec(dllexport) int countlines(char *filename);//統計行數

__declspec(dllexport) int countchars(char *filename);//統計字元數

__declspec(dllexport) bool cmp(int a, int b);//sort函式cmp

__declspec(dllexport) void adjustdown(vector::iterator> &top, int i);//調整堆

__declspec(dllexport) void topk(unordered_map&essay, vector::iterator> &top);//計算排序詞頻前十單詞

__declspec(dllexport) void countwf(char *filename);//實現輸入文字輸出詞頻前十單詞

__declspec(dllexport) int countwords(char *filename);//統計單詞數

扎zn的單元測試

總結感悟

補充:發現bug

**中資料讀入時使用陣列接收,最大為1000字元,原本想正常的文件應該不會超過1000字元/行,但是我錯了tat,文件的輸入應該是沒有限制的。所以改用string型別接受字元,最大長度根據記憶體決定。應改動新增**如下:

fstream in ;

string ss;

int linenum=0;

while(getline(in,ss))

else

最後用一句話結束這篇部落格:
不管前方的路有多苦,只要走的方向正確,不管多麼崎嶇不平,都比站在原地更接近幸福。

軟工第二次作業 個人專案

psp table psp2.1 personal software process stages 預估耗時 分鐘 實際耗時 分鐘 planning 計畫60 80 estimate 估計這個任務需要多少時間 60 80development 開發1180 1452 analysis 需求分析 包括...

福大軟工1816 第二次作業 個人專案

一 github專案地址 二 psp psp2.1 personal software process stages 預估耗時 分鐘 實際耗時 分鐘 planning 計畫 estimate 估計這個任務需要多少時間 1515 development 開發 analysis 需求分析 包括學習新技術...

福大軟工1816 第二次作業 個人專案

psp2.1 personal software process stages 預估耗時 分鐘 實際耗時 分鐘 planning 計畫 estimate 估計這個任務需要多少時間 480605 development 開發 analysis 需求分析 包括學習新技術 140200 design sp...