优化算法的意义,之二。
生活随笔
收集整理的這篇文章主要介紹了
优化算法的意义,之二。
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前一篇分析了求質數的兩個算法,在代碼執行效率和系統開銷兩方面進行了比較。
這在通信系統的設計和實現中,是非常重要的兩點。因為需要同時面對的是巨大的用戶群,和復雜的業務應用,通信系統的設計經常要面臨魚與熊掌間的選擇。
用最簡單和最形象的比喻,就是使用數組還是用鏈表結構來存儲和處理數據。很多時候,硬件的資源是無法提供對數組的支持的。這時候,不得不使用鏈表結構的算法,而繼續的優化算法也非常必要。
還是用求質數的算法來做說明。? ^_^
[1]這是最原始的算法,處理9000個用戶數據,需要2600ms。面對10000個用戶時,崩潰!
var stopwatch = new Date();
var PrimeArys = [2];
var count = 1;
var isss = 0;
var MaxNum = 9000;
for(var i=3 ;i<=MaxNum;i+=2)
? {
? isss = 0;
? for(var j=3;j<(i/2);j+=2)
??? {
??? if(i%j==0){
????? isss = 1;
????? break;
??? }
? }
? if(isss == 0){
????? {
????? PrimeArys[ count++ ] = i;
????? }
??? }
? }
var t=new Date()-stopwatch;?
alert("本次運行了 "+t+" 毫秒。");
[2]分析前面的算法,發現只要不能被某個已知質數整除,就必然不能被該質數的倍數整除。所以,檢查的因子就只限于已知的質數列表就可以了。這個算法,在處理9000個數據的時候,只開銷了1593ms!
var stopwatch = new Date();var PrimeArys = [2];
var count = 1;
var isss = 0;
var MaxNum = 9000;
for(var i=3 ;i<=MaxNum;i+=2)
? {
? isss = 0;
? for(var j=0;j<count;j++)
??? {
??? if(i%PrimeArys[j]==0){
????? isss = 1;
????? break;
??? }
? }
? if(isss == 0){
????? {
????? PrimeArys[ count++ ] = i;
????? }
??? }
? }
var t=new Date()-stopwatch;?
alert("本次運行了 "+t+" 毫秒。");
[3]繼續分析下去,沒有一個數字是可以被超過自己一半的數字整除的,所以,繼續優化,這樣處理9000個用戶只開銷了1312ms。算法的優化到此,已經可以支持15000個用戶了,這比起原始算法只支持9000,是一個巨大的提升!
var stopwatch = new Date();var PrimeArys = [2];
var count = 1;
var isss = 0;
var MaxNum = 15000;
for(var i=3 ;i<=MaxNum;i+=2)
? {
? isss = 0;
? for(var j=0;j<count;j++)
??? {
??? if(i%PrimeArys[j]==0){
????? isss = 1;
????? break;
??? }
? }
? if(isss == 0){
????? {
????? PrimeArys[ count++ ] = i;
????? }
??? }
? }
var t=new Date()-stopwatch;?
alert("本次運行了 "+t+" 毫秒。");
如上可見,在面對真實的應用場景時,合理的算法實現的重大意義。
轉載于:https://www.cnblogs.com/Simba-5830/archive/2013/02/06/2900660.html
總結
以上是生活随笔為你收集整理的优化算法的意义,之二。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vba将select的值直接赋给变量
- 下一篇: 解压缩命令