基本概念
算法:算法是一组完成任务的指令。任何代码片段都可以视为算法,但是我们只讨论有趣的部分。
对数:对数运算是幂运算的逆运算。
大O表示法:
1.指出算法的速度有多快。
2.指最糟情况下的运行时间。
3.算法的运行时间以不同速度增加,大O表示法可以比较操作数,指出了算法运行时间的增速。
二分查找
原理:随便想1~100的数字,从50开始猜,小了则猜75,以此类推直到找到。
function binary_search(arr, key) {
let low = 0,
high = arr.length - 1;
while(low <= high){
let mid = parseInt((high + low) / 2);
if(key == arr[mid]){
return mid;
}else if(key > arr[mid]){
low = mid + 1;
}else if(key < arr[mid]){
high = mid -1;
}else{
return -1;
}
}
};
let arr = [1,2,3,4,5,6,7,8,9,10,11,23,44,86];
let result = binary_search(arr,10);
console.log(result); // 9 返回目标元素的索引值
使用场景:
查找字典中的一个单词,该字典包含240’000个单词。
如果查找单子位于字典末尾,使用简单查找需要240’000步,使用二分查找只需要17步。
简查查找 O(n)
二分查找 O(log n) = O(log2 n)