算法


算法好坏
	时间复杂度:运行时间长短		大O表示法:只保留时间函数中的最高阶项且去掉系数
	空间复杂度:占用内存大小
	
算法稳定性
	稳定:	如果a原本在b前面,而a=b,排序之后a仍然在b的前面
	不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面
	
常见算法:
	字符串:暴力匹配、BM、KMP、Trie等。
	查找:二分查找、遍历查找等。
	排序:冒泡排序、快排、计数排序、堆排序等。
	搜索:TFIDF、PageRank等。
	聚类分析:期望最大化、k-meanings、k-数位等。
	深度学习:深度信念网络、深度卷积神经网络、生成式对抗等。
	异常检测:k最近邻、局部异常因子等。
	
常见数据结构:
	数组:	有限个相同类型的变量所组成的有序集合
	链表:	在物理上非连续、非顺序的数据结构,由若干个节点组成
	栈:  	后进先出
	队列:	后进后出
	哈希表:本质上是一个数组,通过哈希函数,我们可以把字符串或其他类型的key,转化成数组的下标index
		哈希冲突:不同的key通过哈希函数获得的下标有可能是相同的,例如002936这个key对应的数组下标是2,002947对应的数组下标也是2,这种情况就是哈希冲突。
		如何解决哈希冲突:开放寻址法:例子Threadlocal;链表法:例子Hashmap。
	树:
		深度优先:前序(根节点、左子树、右子树),中序(左子树、根节点、右子树),后序(左子树、右子树、根节点)
		广度优先:一层一层遍历
			
	二叉树:(树的每个节点最多有俩个孩子节点)
		满二叉树:每个非叶子结点都有俩个孩子节点
		完全二叉树:按广度优先和同样深度的满二叉树节点相同位置编号相同
		
	二叉查找树:(所有节点:左<根<右)
		如果左子树不为空,则左子树上所有节点的值均小于根节点的值
		如果右子树不为空,则右子树上所有节点的值均大于根节点的值
		备注:二叉查找树就是二叉树的中序遍历
		作用:查找==》二分查找;排序==》中序遍历
		
	二叉堆:(特殊的二叉树)
		最大堆的任何一个父节点的值,都大于或等于它左、右孩子节点的值
		最小堆的任何一个父节点的值,都小于或等于它左、右孩子节点的值
		最小堆的插入:插入最末,节点上浮
		最小堆的删除:删除头节点,尾节点放到头部,再下沉
		二叉树构建二叉堆:所有非叶子节点依次下沉
		
常见排序:
	插入	稳定
	希尔
	选择
	堆
	冒泡	稳定	比较相邻的元素。如果第一个比第二个大,就交换它们两个,每一轮从左到右依次
	快速			俩个游标
	归并	稳定	先拆再合
	计数	稳定
	桶		稳定	创建桶,区间跨度=(最大值-最小值)/(桶的数量-1),遍历数列,对号入座,每个桶内进行排序,可选择快排等,遍历所有的桶,输出所有元素
	基数	稳定
		

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值