基本概念
算法:算法是一组完成任务的指令。任何代码片段都可以视为算法,但是我们只讨论有趣的部分。
对数:对数运算是幂运算的逆运算。
大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)
