日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

个人项目【 完成总结】

發布時間:2025/7/14 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 个人项目【 完成总结】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

一、針對《寫在前面》的補充

隨著對需求的深入了解,最后拋棄了使用trie樹,一是這個數據結構不利于處理大小寫敏感的問題,二是最后的排序首先是由出現的次數排的,需要對此樹進行遍歷也不方便編碼,遂棄之。

二、時間

完成文件讀取:20分鐘

正則匹配:1個小時

頻率分析:4個小時

模式二三:2個小時

調試與優化:1個小時

三、代碼部分解析

1.文件讀取

在網上搜到了c#語法中的一個方法,能夠將某個目錄下所有的文件建立一個字符串數組,如果在加上linq的使用,可以免去寫遞歸算法,只需要用一個語句就能把目錄中滿足要求的文件全部找到,由于是第一次寫c#的程序,對linq相關的用法還需要多學習,這里就不賣弄了。

2.正則匹配

這個我是參考班上同學的匹配寫的,也是我第一次在字符串處理中使用正則表達式,記得上學期面向對象寫Java的時候,對命令要求都是嵌套很多if去寫的,過去的天真亦不敢想= =

3.頻率分析

決定不用trie樹以后,自然想用到c#的hashtable或者dictionary,http://blog.163.com/jeson_lwj/blog/static/13576108320101187546107/ 參考此文后選擇了dictionary(也就是說,并沒有實現多線程),還有一個sorted dictionary,我留在優化的時候來說這個問題。

dictionary由<key,value>這個二元組完成每一項的構建,從本次作業的需求來講,對于每一個單詞需要存儲的不僅僅是它出現的次數,還有其已經出現過的ascii碼最靠前的形式,剛開始的時候我是用兩個dictionary實現的,完成創建以后首先對存有次數的dictionary進行排序,之后在對應的第二個dictionary中找到正確的形式,后來發現定義中的value是個object,想到能否用一個class的對象作為value,就只需要一個dictionary了。代碼便是如此實現的。排序仍然是用的c#的新語法,這都是本次項目完后我需要重點詳細學習的部分。

4.模式二三

主要思路就是將詞組當成一個匹配模式進行匹配,下一次匹配在當前匹配的index基礎上加上空格出現的地方,以兩個單詞的為例:對于how are you這三個詞,首先得到how are這個正確的匹配,將其加入dictionary,使匹配的起始位置從a開始繼續匹配,這時可以找到are you這個匹配,這應該就是模式二三比模式一需要多做的事情了。這一段代碼需要對正則regex的方法很熟捻,感謝高哥的幫助。

5.調試與優化

a.剛才提到了sorted dictionary,開始想到有一個按字典序輸出的要求,就用了對key自然有序的sorted dictionary,但是程序跑得非常慢,還是用了簡單的dictionary,排序就在后面用代碼實現了,其實也就是一行代碼。

b.講一個細節,在一個if循環里面,會交替用到一個單詞的原型和它的小寫形式,我在最開始寫的時候每次用小寫就會調用一次ToLower()方法,優化的時候用一個新的String先把小寫存起來,不再頻繁調用方法,直觀來看,在模式一下,程序快了3秒(針對一個36MB大小的測試用例)

?

四、test cases

分別對空文件、空目錄,各邊界值進行了測試,測試用例都很簡單,因此不再詳細地貼出測試用例了,值得說明的是在測試時發現了下劃線的問題,這還是應歸到正則表達式的學習上,也不再贅述了。

五、性能分析:

測試用例大小是一個36MB的txt文件夾(多個txt文件)

轉載于:https://www.cnblogs.com/code-dog-liou/p/3991718.html

總結

以上是生活随笔為你收集整理的个人项目【 完成总结】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。