2000/6/2 中國時報浮世繪版  數位世界說法 專欄

 

妙用無窮的「演算法」

 

趙坤茂
 

演算法就是計算機方法,是設計適合計算機執行的方法。如同神農氏遍嘗百藥的精神一般,計算機科學家針對任何疑難雜症的計算問題,總設法找出最好的解決方法,只是不必以身試毒,而是讓數位計算機代為受罪罷了。記得我唸研究所時,有一次輪到我報告,我開宗明義就說,很多計算機科學家終其一生,追求的就是“良方”(好的計算機方法)這時大家突然一陣爆笑,我在五里霧中恍然領悟到,原來我有一位學妹“趙良方”,正好也在聽眾席,害我臉紅到腳跟啊!

我大三的時候,曾在科學園區的一家電腦公司工讀,那時候,有位工作人員專門為公司寫資料處理的電腦程式。有一次,她寫了一個程式處理公司的人事資料,可是每一回她要執行該程式的時候,總會佔用電腦整天的時間。於是,我就好奇地問她,為什麼要這麼久的電腦執行時間?她告訴我說,她要將很多筆人事資料,按不同歸類由小到大排序。我再問,妳是如何排序的呢?她說,她的方法是這樣的:先從所有資料裡挑出最小的,排在第一個,再從剩餘的資料中挑出最小的,排在第二個,以此類推,直到沒有剩餘為止。

沒錯,這方法真的可以將資料由小排到大,但當資料量大的時候,它就顯得效率不夠好了。想想看,如果我們要排序的資料有1000筆,決定第一個最小的要999次的比較;決定剩餘999筆最小的需要998次的比較;,所以總共約需999+998+997+…+1次的比較,這大約和999的平方成一個比例。當筆數一多時,這種平方的成長也是頗嚇人的!

我介紹她用一個很有名的排序方法,稱為快速排序法,這方法是這樣進行的,先任挑一個資料,將比這資料小的都放在它的前面;比這資料大的放在它後面。然後,針對資料比較小及資料比較大的那兩部分,我們也都使用同樣方法來排序,以此類推。到最後,我們的資料也是由小排到大。這方法平均而言,所做的比較次數會和總筆數乘上總筆數的二基底對數成正比,這將遠低於原來方法所需的比較次數。她接受了我的建議,改寫後的電腦程式只需五分鐘,就解決了原來需要一天時間執行的任務。

在我們的數位世界裡,每一份數位資料的處理,最終都化成某種程度的計算問題,而好的演算法正是數位計算的靈魂。日益精進的數位處理器,配上精雕細琢的演算法,將是構築未來數位世界很重要的兩把刷子。