算法
文章平均质量分 66
好多鱼哦
数据挖掘、机器学习
展开
-
排序算法总结
先说结论:随机情况时:快速排序=堆排序=归并排序>希尔排序>插入排序>选择排序>冒泡排序部分有序时:希尔排序=插入排序>快速排序>堆排序=归并排序>选择排序=冒泡排序全部逆序时:快速排序=堆排序=归并排序>希尔排序>选择排序>插入排序>冒泡排序1、选择排序每次从未排序元素中寻找最(小)大元素进行交换,放在已排好序列的最后。(实际上将从未排序中找到的最大(小)值与原创 2016-05-19 21:37:03 · 295 阅读 · 0 评论 -
各聚类算法比较
聚类的目标是使同一类对象的相似度尽可能地大;不同类对象之间的相似度尽可能地小。1.基于划分:给定一个有N个元组或者纪录的数据集,分裂法将构造K个分组,每一个分组就代表一个聚类,K特点:计算量大。很适合发现中小规模的数据库中小规模的数据库中的球状簇。算法:K-MEANS算法、K-MEDOIDS算法、CLARANS算法2.基于层次:对给定的数据集进行层次似的分解,直到某种条件满原创 2016-08-09 21:57:16 · 4048 阅读 · 0 评论 -
矩阵求导公式
原创 2016-08-17 15:55:55 · 656 阅读 · 0 评论 -
堆排序算法
堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2]堆排序的思想:利用大顶堆(小顶堆)堆顶记录的是最大关键字(最小关键字)这一特性,使得每次从无序中选择最大记录(最小记录)变得简单,很适合求解top k.其基本思想为(大顶堆): 1)将初始待排序关键字序列(R1,R2....R原创 2016-08-04 10:58:54 · 202 阅读 · 0 评论 -
KMP算法小结
文本串长度为n,模式串长度为m,匹配过程的时间复杂度为O(n),计算next的O(m)时间,KMP的整体时间复杂度为O(m + n)。步骤:文本串S = “BBC ABCDAB ABCDABCDABDE”模式串P = “ABCDABD”1.寻找P的 最长公共元素表(前后缀最长序列长度)失配时,模式串向右移动的位数为:已匹配字符数 - 失配字符的上一位字符所对应的原创 2016-07-31 16:54:30 · 2243 阅读 · 0 评论 -
Hash表算法小结
Hash 表:O(1) 时间数据的插入删除和查找,无序,查找最大数据或者最小数据的时间是 O(N) 。由于存储的数据数量远远大于 hash 表存储单元的数量,所以再好的 hash 函数也可能使不同的数据得到相同的映射位置,这就造成了冲突。但是好的 hash 函数可以将这种冲突降到最低。解决冲突的办法:1.借助链表当产生冲突的时候,将两个数据都链接在同一 hash 存储单元保原创 2016-08-03 10:10:39 · 368 阅读 · 0 评论 -
两个排序算法:快排+归并
快速排序算法实现:#includeusing namespace std;void quick_sort(int s[], int l, int r) { int i = l, j = r, mid = s[l]; while(i < j) { while(s[i] < mid) ++i; while(s[j] > mid) --j; if(i <= j) { swa原创 2016-08-03 11:37:08 · 418 阅读 · 0 评论 -
机器学习实践中应避免的七种常见错误
转载 2016-06-21 00:33:54 · 258 阅读 · 0 评论 -
队列的使用—最近通话记录
手机的存储空间非常小,以至于未接来电、已接来电和已拨电话都只能各自保存最近的10条记录。未接来电、已接来电和已拨电话记录全部给出。写代码使用循环队列来实现最近记录的功能。输入格式:每条记录包含两个数字,第一个数代表记录类型,第二个数代表手机号码。 输出格式:分3列输出未接来电、已接来电、已拨电话。列之间用空格分割,后接电话 其中0代表未接来电,1原创 2016-06-16 15:38:40 · 3531 阅读 · 0 评论 -
生成式模型和判别式模型
对于输入x,类别标签y:生成式模型:估计它们的联合概率分布P(x,y),生成数据的分布。特点:寻找不同类别之间的最优分类面,反映的是异类数据之间的差异。判别式模型:判别式模型估计条件概率分布P(y|x),判别数据的输出量。特点:对后验概率建模,从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度。二者联系:由产生式模型可以得到判别式模型,但由判别式模型得不到产生式模原创 2016-06-16 10:23:35 · 2130 阅读 · 0 评论 -
动态规划——爬楼梯
爬楼梯的时候一次只能迈1级或2级台阶,假如一共有n级台阶的话,一共有多少种方法能够爬到楼梯顶部?思路:假设到达第i级楼梯共有result[i]种方法,实际上到达第i级楼梯只能由第i-1级和第i-2级到达,即result[i] = result[i-1] + result[i-2]。#include using namespace std;int result[100] = {0};i原创 2016-06-15 15:45:39 · 648 阅读 · 0 评论 -
字典序最小问题
给定长度为N的字符串S,要构造一个长度为N的字符串T。期初,T是一个空串,随后反复进行下列任意操作:从S的头部删除一个字符,加到T的尾部;从S的尾部删除一个字符,加到T的尾部。目标是要构造字典序尽可能小的字符串T。当N=6,输入S="ACDBCB"时,输出T="ABCBCD"。将S反转后的字符串定为S',比较S和S'的字典序,如果S较小则从S开头取字符加到T的末尾,反之从S末尾取字原创 2016-06-15 11:07:40 · 2907 阅读 · 0 评论 -
动态规划——数塔问题
从上到下出发,每次只能走到下面相邻的节点,寻找最一条路径使经过的数值和最大。912 1510 6 8 2 18 9 519 7 10 4 15动态规划思路:假设到第i行第j个元素为止的最优解为f[i][j],则f[i][j]实际上至于f[i-1][j]和f[i-1][j-1]有关。#include #include using namesp原创 2016-06-14 22:06:10 · 599 阅读 · 0 评论 -
动态规划——LIS问题
计蒜课是个在线学习编程的好网站,这是我作为一个编程小白总结的一点点脚印!最长上升子序列(Longest Increasing Subsquence)即LIS问题是动态规划解决的一个经典问题。例如输入序列1 5 2 3 4 输出最长上升子序列的长度:4 (子序列为1 2 3 4)动态规划思路:dp[i]为最长子序列最后一个元素为元序列第i个元素是的最大长度,只要把前面比dp[i]原创 2016-06-15 10:34:45 · 3046 阅读 · 0 评论 -
Apriori算法小结
1、Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成挖掘频繁项集。2、步骤:1).依据支持度找出所有频繁项集(频度)2).依据置信度产生关联规则(强度)3、概念对于A->B①支持度:support = P(A ∩B),既有A又有B的概率②置信度:P(B|A) = p(AB)/P(A),在A发生的事件中同时发生原创 2016-08-10 10:39:07 · 2011 阅读 · 0 评论