数据结构与算法的JavaScript描述——检索算法
说明:以下部分均为《数据结构与算法的JavaScript描述》学习内容及笔记。
1、使用自组织数据
知识点:
对于未排序的数据集来说,当被查找的数据位于数据集的起始位置时,查找是最快,最成功的。
通过将频繁查找的元素置于数据集的起始位置,来最小化查找次数。
2-8原则:
(帕累托分布)指对某一数据执行的80%的查找操作都是对其中20%的数据元素进行查找。自组织的方式最终会把这20%的数据置于数据集的起始位置,这样便可以通过一个简单的顺序快速查找到它们。
function seqSearch(arr, data){
for(var i=0;i<arr.length;i++){
//判断是否在前20%;
if(arr[i]==data&&i>(arr.length*0.2)){
swap(arr,i,0);
return true;
}else if(arr[i]==data){
return true;
}
}
return false;
}
2、二分法查找算法
function binSearch(arr,data){
var upperBound=arr.length-1;
var lowerBound=0;
while(lowerBound<=upperBound){
//每次都在可能的区域取随机值;
var mid=Math.floor((upperBound+lowerBound)/2);
if(arr[mid]<data){
lowerBound=mid+1;
}else if(arr[mid]>data){
upperBound=mid-1;
}else{
return mid;
}
}
return -1;
}