JS 實現 使用堆實現Top K 算法

jopen 9年前發布 | 8K 次閱讀 JavaScript 算法
  1. 使用堆算法實現Top,時間復雜度為 O(LogN)
        function top(arr,comp){
    if(arr.length == 0){return ;}
    var i = arr.length / 2 | 0 ;
    for(;i >= 0; i--){
    if(comp(arr[i], arr[i 2])){exch(arr, i, i2);}
    if(comp(arr[i], arr[i 2 + 1])) {exch(arr, i, i2 + 1);}
    }
    return arr[0];
}  


function exch(arr,i,j){  
var t = arr[i];  
arr[i] = arr[j];  
arr[j] = t;  
}  </pre> 


2. 調用K次堆實現,時間復雜度為 O(K * LogN)

    function topK(arr,n,comp){
if(!arr || arr.length == 0 || n <=0 || n > arr.length){
return -1;
}

var ret  = new Array();  
for(var i = 0;i < n; i++){  
var max = top(arr,comp);  
ret.push(max);  
arr.splice(0,1);  
}  
return ret;  
}  </pre> 


3.測試

    var ret = topK(new Array(16,22,91,0,51,44,23),3,function (a,b){return a < b;});  
    console.log(ret);  

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!