java 板


LINE

各位大大好… 小弟在解usaco的時候遇到了一個問題。 他給了我一個測試檔 大概有3000行左右 我用bufferReader去讀取 程式大概是這樣 BufferedReader f = new BufferedReader(new FileReader("prefix.in")); S = f.readLine(); while (f.ready()) S += f.readLine(); 這樣的結果是正確的,遇到的問題是 這個程式要在1sec內解出來 小弟的電腦測試這個程序居然就要1.8sec... 主要架構的部份沒有問題,想請問版上大大 這個問題有辦法改良嗎? 有找過一些,但是沒有什麼頭緒^^" 謝謝 以這個程式來說,我塞test data的資料結果是正確的,時間大約2sec 讀取部份為1.8 sec..所以我才想從這邊改進 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.251.199.98 ※ 編輯: lovebluetea 來自: 111.251.199.98 (04/25 23:52)
1F:→ lovdkkkk:S 是 String 的話改用 StringBuilder/StringBuffer 試試? 04/25 23:51
2F:推 LaPass:1f正解 那速度差非常多 04/25 23:53
3F:→ lovebluetea:感謝 S是string 沒錯 我試試看 04/25 23:58
4F:→ lovebluetea:謝謝...測試已過 速度為0.4S QQ" 04/26 00:17
5F:→ lovebluetea:buffer為0.5sec 似乎較慢!? 04/26 00:22
6F:推 LaPass:那0.1秒差不多都少,比較重要的差別在於執行緒安全 04/26 00:35
7F:推 LaPass: 了多 04/26 00:37
8F:推 musie:要看看是不是瓶頸和呼喚次數才知道0.1秒的影響大不大.. 04/26 09:39
9F:→ bitlife:既然要串成字串,不如先用File得知檔案長度,new 一個byte[] 04/26 10:29
10F:→ bitlife:一次讀取,再轉成String會不會好一點?PS:推文間隔有夠長Orz 04/26 10:32
11F:→ Lordaeron:換個快一點的HD不就好了. 04/26 13:38
12F:→ mars90226:樓上,這個代價比用StringBuilder高很多啊~ 04/26 18:16
13F:→ Lordaeron:放到RAMDISK中, 這會便宜很多了吧. 絕對比builder便宜 04/26 22:04
14F:推 LaPass:java有RAMDISK這個物件嗎? 囧" 04/26 22:11
15F:推 LaPass:還是Lordaeron把StringBuilder當成硬體之類的.... 04/26 22:13
16F:→ Lordaeron:-_-" 將你的檔案丟到ramdisk 不就好了. 需要人教嗎? 04/26 23:26
17F:推 LaPass:目前我沒遇到這麼要求速度的物狀況過.... 囧" 04/27 00:13
18F:→ Lordaeron:哪你在問什麼RAMDISK 物件呢? 04/27 09:51
19F:推 LaPass:因為在討論程式碼的時候,突然有人跳到硬體方面,感覺焦點 04/27 10:38
20F:→ LaPass:根本沒對在一起.... 04/27 10:39
21F:→ LaPass:而且.... 在java中,StringBuilder是非常基礎的東西.... 04/27 10:42
22F:→ Lordaeron:StringBuilder 是哪一版的Java 才出現的? 基礎? 04/27 10:45
23F:→ LaPass:搞不懂為什麼會跳過這個解法,去換HD或是使用RAMDISK.... 04/27 10:46
24F:→ Lordaeron:因為你檔案一大,什麼都沒用Java就是慢. 04/27 10:47
25F:→ Lordaeron:開個600K 還要16s, 6MB呢?60MB? 04/27 10:48
26F:推 LaPass:嗯,焦點果然不同.... 以這個例子而言,問題出在字串相加。 04/27 10:57
27F:→ LaPass:很感謝你提供RAMDISK的方法,有用到大檔案時,我會記得的 04/27 10:59
28F:→ Lordaeron:你不用去解釋什麼不同, 不然你就拼一下不作字串相加好 04/27 10:59
29F:→ Lordaeron:了,看會快多少? 檔案處理本來就不適合Java/perl之類做 04/27 11:01
30F:→ Lordaeron:大檔更是慘. 非得要的話, 請別去想改什麼鳥算法的. 04/27 11:04
31F:推 LaPass:為什麼跟你客客氣氣的,你還這麼刺? = = 04/27 11:17
32F:→ Lordaeron:咦? 客氣? 04/27 11:20
33F:推 eieio:為什麼有人要堅持 O(n^2) 配好硬碟會比 O(n) 快呢? 04/27 13:50
34F:推 eieio:60MB 配 S += f.readLine() 應該會 garbage collection 到死 04/27 13:55
35F:→ Lordaeron:new 一個60MB 的byte array, 一口氣讀上來, 再轉字串. 04/27 14:34
36F:推 chchwy:不要笑死人了 StringBuilder是基礎中的基礎沒錯 04/27 19:37
37F:推 leosirius:真是又好氣又好笑= = 這是java版還是硬體版阿.. 04/27 21:04
38F:→ Lordaeron:咦, 是呢1.5 才有的基礎. 04/27 22:36
39F:→ mars90226:我倒覺得基不基礎不重要,重點是真的快很多 04/28 00:28
40F:推 eieio:先說「別去想改什麼鳥算法」再改口 new 60MB byte array 哈 04/28 04:59
41F:→ MonyemLi:如果換行對程式沒意義,又純英文.readline可以換掉 05/08 20:33
42F:推 tomap41017:StringBuilder真的很基本沒錯阿== 05/11 15:45







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP