个人项目【 完成总结】
?
一、針對(duì)《寫在前面》的補(bǔ)充
隨著對(duì)需求的深入了解,最后拋棄了使用trie樹,一是這個(gè)數(shù)據(jù)結(jié)構(gòu)不利于處理大小寫敏感的問題,二是最后的排序首先是由出現(xiàn)的次數(shù)排的,需要對(duì)此樹進(jìn)行遍歷也不方便編碼,遂棄之。
二、時(shí)間
完成文件讀取:20分鐘
正則匹配:1個(gè)小時(shí)
頻率分析:4個(gè)小時(shí)
模式二三:2個(gè)小時(shí)
調(diào)試與優(yōu)化:1個(gè)小時(shí)
三、代碼部分解析
1.文件讀取
在網(wǎng)上搜到了c#語法中的一個(gè)方法,能夠?qū)⒛硞€(gè)目錄下所有的文件建立一個(gè)字符串?dāng)?shù)組,如果在加上linq的使用,可以免去寫遞歸算法,只需要用一個(gè)語句就能把目錄中滿足要求的文件全部找到,由于是第一次寫c#的程序,對(duì)linq相關(guān)的用法還需要多學(xué)習(xí),這里就不賣弄了。
2.正則匹配
這個(gè)我是參考班上同學(xué)的匹配寫的,也是我第一次在字符串處理中使用正則表達(dá)式,記得上學(xué)期面向?qū)ο髮慗ava的時(shí)候,對(duì)命令要求都是嵌套很多if去寫的,過去的天真亦不敢想= =
3.頻率分析
決定不用trie樹以后,自然想用到c#的hashtable或者dictionary,http://blog.163.com/jeson_lwj/blog/static/13576108320101187546107/ 參考此文后選擇了dictionary(也就是說,并沒有實(shí)現(xiàn)多線程),還有一個(gè)sorted dictionary,我留在優(yōu)化的時(shí)候來說這個(gè)問題。
dictionary由<key,value>這個(gè)二元組完成每一項(xiàng)的構(gòu)建,從本次作業(yè)的需求來講,對(duì)于每一個(gè)單詞需要存儲(chǔ)的不僅僅是它出現(xiàn)的次數(shù),還有其已經(jīng)出現(xiàn)過的ascii碼最靠前的形式,剛開始的時(shí)候我是用兩個(gè)dictionary實(shí)現(xiàn)的,完成創(chuàng)建以后首先對(duì)存有次數(shù)的dictionary進(jìn)行排序,之后在對(duì)應(yīng)的第二個(gè)dictionary中找到正確的形式,后來發(fā)現(xiàn)定義中的value是個(gè)object,想到能否用一個(gè)class的對(duì)象作為value,就只需要一個(gè)dictionary了。代碼便是如此實(shí)現(xiàn)的。排序仍然是用的c#的新語法,這都是本次項(xiàng)目完后我需要重點(diǎn)詳細(xì)學(xué)習(xí)的部分。
4.模式二三
主要思路就是將詞組當(dāng)成一個(gè)匹配模式進(jìn)行匹配,下一次匹配在當(dāng)前匹配的index基礎(chǔ)上加上空格出現(xiàn)的地方,以兩個(gè)單詞的為例:對(duì)于how are you這三個(gè)詞,首先得到how are這個(gè)正確的匹配,將其加入dictionary,使匹配的起始位置從a開始繼續(xù)匹配,這時(shí)可以找到are you這個(gè)匹配,這應(yīng)該就是模式二三比模式一需要多做的事情了。這一段代碼需要對(duì)正則regex的方法很熟捻,感謝高哥的幫助。
5.調(diào)試與優(yōu)化
a.剛才提到了sorted dictionary,開始想到有一個(gè)按字典序輸出的要求,就用了對(duì)key自然有序的sorted dictionary,但是程序跑得非常慢,還是用了簡(jiǎn)單的dictionary,排序就在后面用代碼實(shí)現(xiàn)了,其實(shí)也就是一行代碼。
b.講一個(gè)細(xì)節(jié),在一個(gè)if循環(huán)里面,會(huì)交替用到一個(gè)單詞的原型和它的小寫形式,我在最開始寫的時(shí)候每次用小寫就會(huì)調(diào)用一次ToLower()方法,優(yōu)化的時(shí)候用一個(gè)新的String先把小寫存起來,不再頻繁調(diào)用方法,直觀來看,在模式一下,程序快了3秒(針對(duì)一個(gè)36MB大小的測(cè)試用例)
?
四、test cases
分別對(duì)空文件、空目錄,各邊界值進(jìn)行了測(cè)試,測(cè)試用例都很簡(jiǎn)單,因此不再詳細(xì)地貼出測(cè)試用例了,值得說明的是在測(cè)試時(shí)發(fā)現(xiàn)了下劃線的問題,這還是應(yīng)歸到正則表達(dá)式的學(xué)習(xí)上,也不再贅述了。
五、性能分析:
測(cè)試用例大小是一個(gè)36MB的txt文件夾(多個(gè)txt文件)
轉(zhuǎn)載于:https://www.cnblogs.com/code-dog-liou/p/3991718.html
總結(jié)
以上是生活随笔為你收集整理的个人项目【 完成总结】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: svn安装的几种方法
- 下一篇: placeholder在IE8中兼容性问