随笔分类 - 算法
摘要:#题目概要:Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.For example,Given the following matrix: ...
阅读全文
摘要:#题目描述:Given a sorted array of integers, find the starting and ending position of a given target value.Your algorithm's runtime complexity must be in t...
阅读全文
摘要:协同过滤(collaborative filtering)推荐系统:百度百科的定义是:它是利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程主要有有以下几种推荐的方式:基于内容的推荐协同过滤关联推荐混合推荐协同过滤这里我们主要考虑的是协同过滤,这...
阅读全文
摘要:SVD(Singular Value Decomposition,奇异值分解)算法优缺点:优点:简化数据,去除噪声,提高算法结果缺点:数据的转换可能难于理解适用数据类型:数值型数据算法思想:很多情况下,数据的一小部分包含了数据的绝大部分信息,线性代数中有很多矩阵的分解技术可以将矩阵表示成新的易于处理...
阅读全文
摘要:FP-growth算法优缺点:优点:一般快于Apriori缺点:实现比较困难,在某些数据上性能下降适用数据类型:标称型数据算法思想:FP-growth算法是用来解决频繁项集发现问题的,这个问题再前面我们可以通过Apriori算法来解决,但是虽然利用Apriori原理加快了速度,仍旧是效率比较低的。F...
阅读全文
摘要:一、题目来源: 这个题目的由来是周围有人讨论到去面试(某8)的时候遇到了这个问题。另外正好HIT有个视频也有这个内容,故记录一下:二、题目描述: 该人面试的时候问的是:如何从二进制文件中等概率取整数? 这个题目说的有点不清楚实际上是:一个二进制文件中有好多好多整数,你要随机取出一个。三、题目分析 这...
阅读全文
摘要:朴素贝叶斯算法优缺点优点:在数据较少的情况下依然有效,可以处理多类别问题缺点:对输入数据的准备方式敏感适用数据类型:标称型数据算法思想:朴素贝叶斯比如我们想判断一个邮件是不是垃圾邮件,那么我们知道的是这个邮件中的词的分布,那么我们还要知道:垃圾邮件中某些词的出现是多少,就可以利用贝叶斯定理得到。朴素...
阅读全文
摘要:决策树算法优缺点:优点:计算复杂度不高,输出结果易于理解,对中间值缺失不敏感,可以处理不相关的特征数据缺点:可能会产生过度匹配的问题适用数据类型:数值型和标称型算法思想:1.决策树构造的整体思想:决策树说白了就好像是if-else结构一样,它的结果就是你要生成这个一个可以从根开始不断判断选择到叶子节...
阅读全文
摘要:kNN算法算法优缺点:优点:精度高、对异常值不敏感、无输入数据假定缺点:时间复杂度和空间复杂度都很高适用数据范围:数值型和标称型算法的思路:KNN算法(全称K最近邻算法),算法的思想很简单,简单的说就是物以类聚,也就是说我们从一堆已知的训练集中找出k个与目标最靠近的,然后看他们中最多的分类是哪个,就...
阅读全文
摘要:题目描述:一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积)输入:每个案例第一行三个正整数N,M 5 #include 6 #include 7 using namespace std; 8 int main() 9 {10 //freopen...
阅读全文
摘要:题目描述:给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。输入:两个整数n(2 2 #include 3 #include 4 using namespace std; 5 int su[168] = {2,3,5,7,11,13,17,19,23,29,31,37,41,4...
阅读全文
摘要:题目描述:给定一个数字N,打印从1到最大的N位数。看起来像是很简单的问题(虽然实际也不是很难。。。)我们很容易写出这样的代码: 1 #include 2 #include 3 4 int a[]={9,99,999,9999,99999}; 5 using namespace std; 6 int main() 7 { 8 int N; 9 cin>>N;10 for(int i=1;i 2 #include 3 #include 4 long long a[]={9,99,999,9999,99999,999999,9999999}; 5 char c[100];...
阅读全文
摘要:一、用途 矩阵的一个重要的用途是进行递归是的计算,最明显的就是快速求数列的某一项的值。本文也是主要讲解这种算法的。二、样例 这方面最简单的就是斐波那契问题了,这个相信是每一位程序员都熟知的,这里就不介绍了。三、快速幂 既然是快速计算那肯定是不能去一步一步慢慢求,这里我们要用到二分的思想。求快速...
阅读全文
摘要:描述:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路一:直接写个函数挨个判断一下那个数是不是丑数,然后就可以得到第几个丑数是什么了。这种方式比较简单就不上代码了。思路二:空间换时间,再加上一点技巧,个人感觉有点动态规划的意思:首先我们分析一下这个面试题的描述,既然所有的数的因子都只有2,3,5,那么我们可以得到每个数必然是前面的数乘2,3,5的最小数,也就是说找到那么一个数是的他是已有的丑数集合中乘以2,3,5的最小数,这个数也就是下一个丑数。但是我们知道不能真
阅读全文
摘要:杨辉三角的输出是个很简单的问题,但是这次看到一维数组的实现倒确实是难住我了一会,所以特此记录一下: 1 #include 2 #include 3 #include 4 using namespace std; 5 int main() 6 { 7 int n; 8 while(scanf("%d",&n)==1) 9 {10 int a[35];11 memset(a,0,sizeof(a));12 for(int i = 1; i 1; j--)16 {17 a...
阅读全文
摘要:所谓的出入栈问题有两种比较常见的描述:1、现在有若干个数,进行出入栈操作。要求不能进行非法的栈操作(也就是说栈为空的时候不能进行弹栈),现在给你一个总次数(当然我们知道这个必须是偶数),要求判断有多少种可能的序列。2、现有若干个数目相等的+1和-1,现在要求进行操作,也就是选择不同的顺序将他们加起来,但是要保证没一个时刻式子的值都大于零,问有多少种可能的排列顺序。 看到第二个问题我们很容易会想到这是一个数学问题,而且还肯能就是个排列组合,但是试一下我们会发现不能找到这样的公式(至少我现在还没见过)。其实这个问题是一个非常简单的动态规划问题。 首先我们可以看到,没选择下一步的时候都是使式子(第一
阅读全文
摘要:看到这个问题我们的第一反应就是根据二进制的位直接统计,这也是我已开始想到的,于是有了如下代码这份代码的逻辑很清晰,就是将这个数慢慢的移,每一位都进行判断最终得出结果,乍一看没什么错误。并且进行测试会发现对于正整数它运行的非常好,没有什么错误,但是我们尝试一下负整数就会发现他有巨大的问题。这里首先要提一下,计算机对负数的存储是按照其正数的补码表示的,所以进行这种简单的移位判断就不可避免的会出现错误。这里我们就要提到第二中解法,这种方法不金额以解决负数的问题,而且可以提高算法的效率。先看代码:这种解法的精髓就在这个操作上面,我们首先要考虑x和x-1的二进制的差别在哪,我们列出几个从这些例子我们不难
阅读全文
摘要:虽然说我不怎么会用java写一些东西,但是java里的biginteger我还是很喜欢的。这个类解决了,我们在其他很多语言中遇到的问题:大数。比如在C++中我们要计算一个大小超过long long的数就必须采取很多的代码来解决。简单一点的课余采取用几个数来存数,复杂的我们就要用到字符串的处理通过,通过字符串我们能够处理任意大的数(理论上,实际由于内存之类的原因还是不行的)。 但是使用字符串的形式实现的方式是十分复杂的。我们就最简单的加法为例说明一下,并展望一下乘法甚至是除法的处理方式。字符串处理大数的本质就是“手工计算”,这里的手工当然不是让你离开电脑去自己算,而是说让电脑按照我们手算的...
阅读全文
摘要:一、最长公共子序列 经典的动态规划问题,大概的陈述如下: 给定两个序列a1,a2,a3,a4,a5,a6......和b1,b2,b3,b4,b5,b6.......,要求这样的序列使得c同时是这两个序列中的部分(不要求连续),这个就叫做公共子序列,然后最长公共子序列自然就是所有的子序列中最长的啦。 既然是动态规划,难点肯定是在转移方程那了。首先我们用一张网上流传的图: 我个人觉得这张图最好的阐述了这个问题的解法。下面说一下我的理解:首先我们要考虑怎么表示LCS中的各个状态,这个知道的可能觉得很简单,但是不知道的可能想很久也想不到,我就是在看到这张图才真正理解为什么要采用二维数组表示这...
阅读全文
摘要:所谓错排公式就是说给你一个序列,这个序列有n个数,然后要求这个序列的排列中有几个满足每个元素都不在原来的位置。这个是直接有一个地推关系的:f[n]=(n-1)*(f[n-1]+f[n-2])。证明如下: 首先我们知道f[1]=0,f[2]=1.然后当n大于等于三的时候我们考虑他们之间的关系。将各个元素标号为1到n。那么我们考虑第n个元素,它的能力在于是将自己与前面的一个换位置,也就是说它的前面可以是已经完成的错排或者是有一个元素没有错排。那么有两种情况:1、前面有一个元素在本身的位置,这时最后一个元素必须选择同他交换。没装错的可能是任意的一个,也就是有(n-1)*f[n-2]种2、前面的...
阅读全文

浙公网安备 33010602011771号