這兩天,為了要加速程式的運算速度 (當然就會犧牲掉記憶體空間,這就是有一好沒兩好啊!) ,很仔細地研究了 XML 的結構和嚐試幾種不同的演算法。在嚐試的過程中,突然發現尋找最佳演算法和尋找外星人、尋找理想伴侶等等不同的事件之間「驚人」的一致性!
XML 是一種延伸性的結構語言 (左邊這段中文有講和沒講一樣!誰看得懂這是什麼鬼話?),意思就是說,你可以寫一段文章,然後在標題的地方標上<標題>我的標題</標題>,並且在內文的地方標上<內文>我的內文…</內文>,再配合一個 XML 的解析器,並在解析器裡面調整好「標題」應該用的字體、尺寸、位置…等等格式,這麼一來,整篇文章被夾在<標題>之間的東西,都會依照這個格式顯示了。
寫過要投稿文章的你,一定能體會那種「格式調來調去都不對勁兒!?」的痛苦,明明截稿在即,卻為了格式在那裡浪費生命…
所以,如果各期刊或是會議主辦單位都能提供「設定好的解析器」,那麼學者們就只要在自己的文章裡加上適當的 XML 標籤,就能弄出一致且符合規定格式的文章了!
而我這兩天在做的,就是一段 XML 資訊的解析器。本來,我是把整段文字當做「一串資訊」處理,再配合正規表示式來撈出自己要的那段資訊。但是正規表示式的運算速度其實是快不起來的。所以,我就想…那就花點時間來了解一下 XML 的解析器怎麼寫好了。讀著讀著,發現…
XML 有兩種解析的方式:
(1) 把整個 XML 檔都讀到記體裡面,接下來,你可以呼叫裡面的任何一個節點,再把這個節點打開來,讀取裡面的內容。這感覺就像是給你一張藍圖,你就先照藍圖把房子蓋好,然後可以打開任何一個房間,再告訴我房間裡有什麼東西。
(2) 只讀取指定的那個節點裡的資訊。這就像我給你藍圖,但是你不蓋整個房子,你只問我想要知道哪一間房間有什麼東西,然後就「只蓋那個房間」,再告訴我房間裡有什麼東西。
第一眼看起來,好像第二種方法比較簡單。但是要能夠「只蓋一個房間」,那麼建築師要有很好的想像力才行…萬一這個房間是一個 20 層樓的大樓的第 17 樓右邊數來第三間靠南邊的廁所。那麼我就得很仔細地設定好下面的 16 層樓大概的模樣 (因為我不要實際去建造),才有辦法找到 17 樓,甚至是那間廁所。
也就是說,這兩種方法的第二種,雖然看起來好像比較簡單,佔用的記憶體也比較少,但是實際上是比較佔用 CPU 的運算資源的。而第一種呢,雖然佔用的記憶體資源比較多,乍看之下也好像很複雜,但實際上卻是比較簡單的呢!?(感覺真的會騙人,對吧?!)
比較之下,這兩種方法,一是腳踏實地裡,把整間房子都蓋好,接下來就能按著地圖去找到自己要的資訊了。而另一個則是先開槍,再依命中的地點去設計靶紙、發射地點、子彈飛行時間…等等。
等等…等一等…
前幾天不是正有一個新聞,裡面有個經濟學老師利用「尋找外星人」的公式,算出找到「理想」伴侶的機會只有 28 萬分之一嘛?!(對,我也很納悶,為什麼要用「尋找外星人」的公式,難道他想找外星伴侶嗎?)
想到這則新聞,我想他的方法應該是接近於『我先預設有這麼一個理想伴侶的存在,然後開始設想各種可能的條件,最後把這些條件相乘起來,就變成能找到這位「特定的她」的機率了!』
嗯…很好,這其實就是 XML 解析方式的第二種。比較累人的那一種嘛!
想到這裡,我突然很想寫個信給美國國家科學院,說明為什麼「德瑞克方程式」找不到外星人。
嘿~別再把時間花在設定條件上了,若是利用第一種 XML 解析器的原理,只要開始去搜尋已知的那些天空區域,總會找到外星人的嘛!我們現在找不到外星人,是因為「我們還在設定條件,而還沒有動手去找…」
我也很想寫信給那位經濟學老師,跟他說明為什麼他找不到女朋友!
因為你把眼光放在「將來會找到」的機率上,而沒有想過,或許你「已經遇過」了哦!
也許我們不知道理想伴侶應該生得什麼模樣,但是就像找房子一樣,多看幾個地點,在經歷過幾個地點以後,讓你忘不掉的那一個,就是可以稱之為「家」的地方了吧!
16 1月 2010
訂閱:
張貼留言 (Atom)
0 意見:
張貼留言