在畢業面試上,口試委員問了我一句:你這些方法都是heuristic的嗎?
我猶豫了許久...因為我並不知道這個英文字的意思是什麼...
某一個學長幫我回答了,他說...是的,我們的方法都是。
但因為其他的問題更切中我的題目和主題,所以我就把這題給忘了。
雖然我事後有查過字典,它是"啟發式"的意思,但什麼是啟發式演算法...我還是沒去了解。
今天偶然又想起而google了, heuristic algorithm。
我終於在wiki裡面找到,我可以理解的答案了。
"電腦科學的兩大基礎目標,就是發現可證明其執行效率良好且可得最佳解或次佳解的演算法。而啟發式演算法則試圖一次提供一個或全部目標。 例如它常能發現很不錯的解,但也沒辦法證明它不會得到較壞的解;它通常可在合理時間解出答案,但也沒辦法知道它是否每次都可以這樣的速度求解。"
雖然底下還有一連串的說明和演算法的式子但是這樣的說明其實就已經蠻夠的了。
另外一個特色是,這種方式的演算,不一定能找到最佳解,而且還有可能找到不存在或是更差的解。這要端看是什麼樣的資料結構和設計。不過再一般的real data上通常可以在合理的時間內找到不錯的解。萬用啟發式演算法 (metaheuristic),通常使用亂數搜尋技巧。他們可以應用在非常廣泛的問題上,但不能保證解的效率。
總之,小小的發現又解決了一個問題。其實在電腦演算上,data mining不算是真正的演算法開發,反而比較接近解決真實問題所需要的技術。畢業後到現在,對於所接觸到的不同領域的人對data mining的看法,感覺就像真的是heuristic algorithm。總是不能給出最佳解,問題不一定能解成,倒是產生了更多讓專家們疑惑的假設與規則。
或許當成是一個問題的解對data mining來講太嚴苛,還不如把他當成是一個發掘可能解的好工具會比較貼切點。 ^_^
reference:
WIKI "啟發式搜索"