图解算法总结

581 阅读2分钟

二分法,选择排序,快速排序实现



let arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17];
let arr2 = [1, 3, 5, 46, 548, 4561, 25, 3467, 2345, 546, 5, 7, 568, 7988, 90, 0, 9, 098, 0]
let arr3 = [1, 3, 5, 46, 548, 4561, 25, 3467, 2345, 546, 5, 7, 568, 7988, 90, 0, 9, 098, 0]


function search(arr, target) {//二分法
    count++
    let start = arr.length%2 === 0 ? arr.length/2 : (arr.length-1)/2;
    let highArr = arr.slice(start);
    let lowArr = arr.slice(0, start);
    let tmpArr;
    let value;

    if(target > arr[start]) {
        tmpArr =  highArr;
        value = search(tmpArr, target)
    }else if(target < arr[start]) {
        tmpArr = lowArr;
        value = search(tmpArr, target)
    }else {
        value = [arr[start]];
    }
    return value;
}


console.log(search(arr1, 16))


let count = 0;
function sort(arr) {//快速排序
    count++;
    let less = [];
    let greater = [];
    let base = arr[0];

    if(arr.length < 2) {
        return arr
    }else {
        for(let i = 1; i < arr.length; i++) {
            if(arr[i] < base) {
                less.push(arr[i])
            }else {
                greater.push(arr[i])
            }
        }
        return [...sort(less), base, ...sort(greater)]
    }


}


console.log(sort(arr2))


function selectionSort(arr) {//选择排序
    var len = arr.length;
    var minIndex, temp;
    for (var i = 0; i < len - 1; i++) {
        minIndex = i;
        for (var j = i + 1; j < len; j++) {
            if (arr[j] < arr[minIndex]) {     // 寻找最小的数
                minIndex = j;                 // 将最小数的索引保存
            }
        }
        temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
    return arr;
} 

广度优先搜索

广度优先搜索解决2个问题:

  1. 从A到B的是否存在一个路径
  2. 从A到B最短的路径是多少
图:
  1. 图是有节点和边组成。
  2. 拓扑是一种特殊的图。
  3. 单向的图被称为树。
数据结构
  1. 队列是先进先出的。
  2. 栈是先进后出的。

贪婪算法

局部最优推出全局最优的近似解

动态规划

  1. 动态规划适合在给定约束条件下优化某种指标。
  2. 问题可分散为离散问题时,可使用动态规划解决
  3. 每种动态规划都涉及网格
  4. 没有放之四海而皆准的动态规划方案

K最邻近算法(KNN)

  1. KNN用于分类和回归,需要考虑最近的邻居
  2. 分类就是编组
  3. 回归就是预测结果
  4. 特征抽取就是将目标对象转化为可比较的数字
  5. 挑选合适的特征事关KNN算法的成败