從分配補給的問題說起,由喬治‧丹齊格發展出單純形法(Simplex Algorithmus)試著解決這個問題。
這個解法也是解決線性規劃式以及離散程式的重要基石。而這也是演算法的一小部分而已。
演算法是由許多許多的簡單步驟所組成,而剛好電腦又擅長處理許多許多的簡單步驟。因此演算法能夠在電腦的運算下發揮它最大的威力。
由於電腦的處理能力有其發展極限所在,那演算法呢?
有個簡單的實驗:
1990有兩個團隊來解決同一個離散程式問題。
假設1990年代電腦使用1990年最佳演算法來解決問題速度為1的話:
A團隊經由時光旅行帶來2014年的最佳電腦,並使用1990的最佳演算法來解決問題
B團隊經由時光旅行帶來2014年的最佳演算法,並使用1990的最佳電腦來解決問題。
A團隊最後比原來的速度快了6500倍解決了問題,大致符合摩爾定律
B團隊則是比原來的速度快了87萬倍解決問題,可見得,演算法進步的幅度比電腦運算進步的速度快了數百倍。
這樣說來,演算法帶來的性能提升,是從無到有的,而這點可以成立的原因,是因為我們找出了更簡單省事的方法。
在現代網路連結與完善度的需求,也讓演算式解法持續成長。全球網路彼此連結的趨勢下,很快的我們發現,在小規模狀況能夠自然運作的事情,放大規模可能完全失效(量變造成質變);而完善度的需求(系統的資源必須要最佳的運用),這些都是讓演算法改良的動力。
當然,就像我們知道化學與機械的界線在哪邊一樣,演算法也有它的界線。
演算法的界線:
1. 演算法需要一個連結體幫它連結現實,這個連結體就是資訊的輸入,或稱為一個範例模式或是一個對於現實的了解。每個演算法的品質都會受限於其連接體(資訊輸入)的品質,了解這一點才能夠有意義的去使用演算法
2. 演算法的[決定],和社會科學所論述的決定並不相同,因為社會科學的決定著重的是其中的過程,而並非是結果,而演算法最終則是一個結果。因此演算法可以就細節來做出決定,藉此來協助一個社會大方向的決定成為現實。
3. 演算法的最重要界線,則是演算法思考的[核心構成要件]。硬體的發展會受到物理極限的限制,因此從[計算複雜性理論]來決定每種演算法對於特定問題花費的時間與功夫,直到這個問題被演算法解決所花的時間沒辦法再更進一步為止(沒有辦法更簡單了!)。
[計算複雜性理論]可以說是演算法星球中的萬有引力,演算法的改進可以讓人們跳得更高,但是引力仍然在那邊,它是個界限,可以被推移,但始終不會消失。
電腦中,負責處理CPU工作時間的演算法稱為Multilevel Feedback Queue,它的主要工作就是分派CPU的工作時間去處理不同的演算工作,隨著硬體進步,從單核心CPU進步到多核心CPU,這個演算法需要更進一步去分派CPU的工作時間,並且決定要讓哪個CPU去處理演算法工作。
生活上的例子來說,我們最熟悉的就是傳統電話簿的搜尋,在翻傳統電話簿時,翻到某一頁時,對於需要搜尋的號碼,有兩種選擇,向左翻或是向右找。而這個也是所謂決策樹在生活上的應用。而這個搜尋電話簿的例子也提示了一件事,對數是演算法中的營養肥料,當搜尋的數量每多增一倍時,我們的搜尋次數只需要多增加一次就可以了。
但這個例子中,電話簿是一個已經經過處理排序過的資料,那如果是處理一堆書本的排序呢?
譬如500本未經過排序的書,需要按書名排序上架,最本能的方式就是一本本去比較,那最多需要500*500= 25萬次的比較(Bubble sort)。
但如果分層比較呢?
將500本書分成一半到下一層比較,下一層在分成一半去比較,當分派了9層之後,就可以把所有書分成兩本兩本一組,最多需要500*9=4500次的比較動作(Merge Sort)。
這個解法也是解決線性規劃式以及離散程式的重要基石。而這也是演算法的一小部分而已。
演算法是由許多許多的簡單步驟所組成,而剛好電腦又擅長處理許多許多的簡單步驟。因此演算法能夠在電腦的運算下發揮它最大的威力。
由於電腦的處理能力有其發展極限所在,那演算法呢?
有個簡單的實驗:
1990有兩個團隊來解決同一個離散程式問題。
假設1990年代電腦使用1990年最佳演算法來解決問題速度為1的話:
A團隊經由時光旅行帶來2014年的最佳電腦,並使用1990的最佳演算法來解決問題
B團隊經由時光旅行帶來2014年的最佳演算法,並使用1990的最佳電腦來解決問題。
A團隊最後比原來的速度快了6500倍解決了問題,大致符合摩爾定律
B團隊則是比原來的速度快了87萬倍解決問題,可見得,演算法進步的幅度比電腦運算進步的速度快了數百倍。
這樣說來,演算法帶來的性能提升,是從無到有的,而這點可以成立的原因,是因為我們找出了更簡單省事的方法。
在現代網路連結與完善度的需求,也讓演算式解法持續成長。全球網路彼此連結的趨勢下,很快的我們發現,在小規模狀況能夠自然運作的事情,放大規模可能完全失效(量變造成質變);而完善度的需求(系統的資源必須要最佳的運用),這些都是讓演算法改良的動力。
當然,就像我們知道化學與機械的界線在哪邊一樣,演算法也有它的界線。
演算法的界線:
1. 演算法需要一個連結體幫它連結現實,這個連結體就是資訊的輸入,或稱為一個範例模式或是一個對於現實的了解。每個演算法的品質都會受限於其連接體(資訊輸入)的品質,了解這一點才能夠有意義的去使用演算法
2. 演算法的[決定],和社會科學所論述的決定並不相同,因為社會科學的決定著重的是其中的過程,而並非是結果,而演算法最終則是一個結果。因此演算法可以就細節來做出決定,藉此來協助一個社會大方向的決定成為現實。
3. 演算法的最重要界線,則是演算法思考的[核心構成要件]。硬體的發展會受到物理極限的限制,因此從[計算複雜性理論]來決定每種演算法對於特定問題花費的時間與功夫,直到這個問題被演算法解決所花的時間沒辦法再更進一步為止(沒有辦法更簡單了!)。
[計算複雜性理論]可以說是演算法星球中的萬有引力,演算法的改進可以讓人們跳得更高,但是引力仍然在那邊,它是個界限,可以被推移,但始終不會消失。
電腦中,負責處理CPU工作時間的演算法稱為Multilevel Feedback Queue,它的主要工作就是分派CPU的工作時間去處理不同的演算工作,隨著硬體進步,從單核心CPU進步到多核心CPU,這個演算法需要更進一步去分派CPU的工作時間,並且決定要讓哪個CPU去處理演算法工作。
生活上的例子來說,我們最熟悉的就是傳統電話簿的搜尋,在翻傳統電話簿時,翻到某一頁時,對於需要搜尋的號碼,有兩種選擇,向左翻或是向右找。而這個也是所謂決策樹在生活上的應用。而這個搜尋電話簿的例子也提示了一件事,對數是演算法中的營養肥料,當搜尋的數量每多增一倍時,我們的搜尋次數只需要多增加一次就可以了。
但這個例子中,電話簿是一個已經經過處理排序過的資料,那如果是處理一堆書本的排序呢?
譬如500本未經過排序的書,需要按書名排序上架,最本能的方式就是一本本去比較,那最多需要500*500= 25萬次的比較(Bubble sort)。
但如果分層比較呢?
將500本書分成一半到下一層比較,下一層在分成一半去比較,當分派了9層之後,就可以把所有書分成兩本兩本一組,最多需要500*9=4500次的比較動作(Merge Sort)。
留言