目录
算法基础知识
有穷性:不能陷入死循环
确定性:不会产生二义性
可行性:要符合实际
输入:0到多个
输出:1到多个
时间复杂度以边以循环次数表示
空间复杂度是指需要的额外存储空间
查找
顺序查找:从头到尾对元素进行比较,时间复杂度为O(n)
折半查找:要求表中关键字按照关键字递增,通过二分法查找 ,时间复杂度为O(log2n),向下取整(3.5取3)
哈希查找:通过哈希函数将元素储存在哈希表中,查找时要通过哈希函数
在哈希函数产生冲突后可以用线性探测法:按物理地址顺序取下一个空闲的存储地址
排序
稳定排序:就算是相同值排序都是固定的,不稳定排序相反
内排序:排序在内存中排序:外排序相反
直接插入排序
前提是前i-1个元素是有序的
希尔排序
根据增量序列排序适用于大数据排序,用分组的方法提高效率
简单选择排序
每次选择出最小值,将最小值放到第一位,以此类推
堆排序
先建立一个堆的序列大根堆或者小根堆,(大根堆根节点是最大值,小根堆根结点是最小值)从而输出根结点,再将剩余的数组重新调整为堆,以此类推
堆排序方法,将待排序的关键字分放到一颗完全二叉树的各个结点中,先找到完全二叉树的最后一个非子叶节点,与其孩子节点中最大的节点进行交换,以此类推
建立初始堆之后,输根节点,会将最后一个叶子节点调入根节点
冒泡排序
从最后两个元素开始比较,将较小的元素交换到前面去,依次比较
快速排序
以第一个数为基准,i指的是序列的第一位,j指的是序列的最后一位,先用j与基准比较,如果j小于基准,则调换位置,再与i比较,如果i大于基准则调换位置,以此类推,直到i=j,这算是完成一趟快速排序,排序完后会出现两个队列,再次进行快速排序
归并排序
先将无序文件两两分组、排序,再将分组两两合并、排序,以此类推
一般归并排序用于合并多个线性表,对单列数据,二路归并排序可以对元素进行两两合并
基数排序
排序算法总结
对于插入排序,基本有序的情况是最优情况,时间复杂度为O(n)
对于快速排序,基本有序的情况是最坏的情况,时间复杂度为 O(n^2),空间复杂度为O(n)
分治法
若问题容易则直接解决,否则将其分解为K个规模较小的子问题,子问题相互独立且与原问题形式相同
步骤:分解,求解,合并
凡是涉及到分解的方法都是分治法(二分查找、归并排序)
回溯法
对一个问题进行深度优先搜索,一直向下探测,当此路不通时,返回上一层探索另外的分支,重复此步骤
一般用于解决迷宫类问题
动态规划法
一个复杂的问题化为一个个子问题,列出每个子问题的最优解,以保证全局是最优解
贪心法
每一步对于当前来说是最优的,但全局不一定是最优的,速度最快
经典算法举例
0-1背包:每一个物体是整体,要么为0要么为1
一般先求出每个物体单位价值值多少钱:价值/重量
部分背包问题:每一个物体是可以拆分的,拿例题为例在放入前三个单位价值最高的物品之后,背包容量还剩2,则可以从单位价值第四高的物品中取2计算其价值
分支限界法
采用广度优先遍历
概率算法
在算法的过程中随机选择下一步
如果一个问题没有有效的确定性算法可以在一个合理的时间内给出解,但是该问题能够接收小概率错误
近似算法
放弃最优解,用近似解代替
近似算法的时间复杂度必须是多项式阶的
数据挖掘算法
主要功能是分类、回归、关联规则和聚类
智能优化算法
以数学为基础