
算法&数据结构
_Yucen
这个作者很懒,什么都没留下…
展开
-
洗牌算法
算法描述:类似于我们平时玩扑克牌的洗牌过程,将一副未拆封的扑克牌(大小为n的有序数组),通过洗牌打乱排序(变成无重复的随机排列数组)。主要有全局洗牌以及局部洗牌两种思路。全局洗牌:循环n次,每次循环将第i张牌与牌库中的随机一张牌调换位置。局部洗牌:循环n次,每次循环将第i张牌与牌库中未洗到的随机一张牌(即牌库中除去前i-1张的剩余牌)调换位置。保证之前已经洗好的牌不会被再次洗到。Python环境下...原创 2018-05-17 20:02:14 · 781 阅读 · 0 评论 -
Hash算法(含python实现)
1. 简介哈希(hash)也翻译作散列。Hash算法,是将一个不定长的输入,通过散列函数变换成一个定长的输出,即散列值。这种散列变换是一种单向运算,具有不可逆性即不能根据散列值还原出输入信息,因此严格意义上讲Hash算法是一种消息摘要算法,不是一种加密算法。常见的hash算法有:SM3、MD5、SHA-1等 。2. 应用Hash主要应用在数据结构以及密码学领域。在不同的应用场景...原创 2018-07-17 17:39:54 · 29440 阅读 · 2 评论 -
Top K算法
1、查找最大的k个元素1、排序,快速排序。我们知道,快速排序平均所费时间为n*logn,从小到大排序这n个数,然后再遍历序列中后k个元素输出,即可,总的时间复杂度为O(n*logn+k)=O(n*logn)。2、排序,选择排序。用选择或交换排序,即遍历n个数,先把最先遍历到得k个数存入大小为k的数组之中,对这k个数,利用选择或交换排序,找到k个数中的最小数kmin(kmin设为k个元素的数...转载 2019-03-07 14:31:00 · 427 阅读 · 0 评论 -
满二叉树和完全二叉树
满二叉树一棵深度为k,且有2^k-1个节点的树是满二叉树。另一种定义:除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。这两种定义是等价的。从树的外形来看,满二叉树是严格三角形的,大家记住下面的图,它就是满二叉树的标准形态:所有内部节点都有两个子节点,最底一层是叶子节点。性质:1)如果一颗树深度为h,最大层数为k,且深度与最大层数相同...转载 2019-04-01 15:43:20 · 1496 阅读 · 0 评论 -
随机森林和GBDT的区别
随机森林和GBDT的区别随机森林采用的bagging思想,而GBDT采用的boosting思想。这两种方法都是Bootstrap思想的应用,Bootstrap是一种有放回的抽样方法思想。虽然都是有放回的抽样,但二者的区别在于:Bagging采用有放回的均匀取样,而Boosting根据错误率来取样(Boosting初始化时对每一个训练样例赋相等的权重1/n,然后用该算法对训练集训练t轮,每次训练...转载 2019-03-28 20:23:26 · 4729 阅读 · 0 评论 -
动态规划问题 —— 最长公共子序列
题目描述链接:https://www.nowcoder.com/questionTerminal/c996bbb77dd447d681ec6907ccfb488a时间限制:3秒;空间限制:32768K对于两个字符串,请设计一个高效算法,求他们的最长公共子序列的长度,这里的最长公共子序列定义为有两个序列U1,U2,U3...Un和V1,V2,V3...Vn,其中Ui<Ui+1...原创 2019-04-15 20:44:09 · 302 阅读 · 0 评论 -
动态规划问题 —— 最长递增子序列
题目描述链接:https://www.nowcoder.com/questionTerminal/585d46a1447b4064b749f08c2ab9ce66对于一个数字序列,请设计一个复杂度为O(nlogn)的算法,返回该序列的最长上升子序列的长度,这里的子序列定义为这样一个序列U1,U2...,其中Ui < Ui+1,且A[Ui] < A[Ui+1]。给定一个数字序...原创 2019-04-14 21:54:37 · 375 阅读 · 0 评论 -
动态规划问题 —— 最长公共子串
题目描述链接:https://www.nowcoder.com/questionTerminal/02e7cc263f8a49e8b1e1dc9c116f7602时间限制:3秒;空间限制:32768K对于两个字符串,请设计一个时间复杂度为O(m*n)的算法(这里的m和n为两串的长度),求出两串的最长公共子串的长度。这里的最长公共子串的定义为两个序列U1,U2,..Un和V1,V2,.....原创 2019-04-18 16:45:05 · 556 阅读 · 0 评论 -
排序算法总结
常见排序算法评估时间复杂度O(n2):冒泡排序、选择排序、插入排序O(nlogn):归并排序、快速排序、堆排序、希尔排序O(n):计数排序、基数排序 不是基于比较的排序算法,思想来于桶排序空间复杂度O(1):插入排序、选择排序、冒泡排序、堆排序(用递归实现是O(logn))、希尔排序O(logn~n):快速排序O(n):归并排序O(m):计数排序,基数排序(...原创 2019-07-07 22:38:43 · 213 阅读 · 0 评论