上一页 1 2 3 4 5 6 ··· 8 下一页

2012年7月29日

第二类stirling数(n个球放m个盒子里)

该文被密码保护。 阅读全文

posted @ 2012-07-29 16:45 buptLizer 阅读(4) 评论(0) 推荐(0) 编辑

2012年5月24日

Hadoop分布式环境下的数据抽样(转)

摘要: http://dongxicheng.org/data-mining/hadoop-sampling/1. 问题由来Google曾经有一道非常经典的面试题:给你一个长度为N的链表。N很大,但你不知道N有多大。你的任务是从这N个元素中随机取出k个元素。你只能遍历这个链表一次。你的算法必须保证取出的元素恰好有k个,且它们是完全随机的(出现概率均等)?这道题的解法非常多,网上讨论也非常热烈。本文要讨论的是,这个问题是从何而来,有什么实用价值?自从有了Hadoop之后,该问题便有了新的应用载体。随着数据量的增多,很多数据挖掘算法被转移到MapReduce上实现,而数据挖掘中有个基 本的问题是怎样对数据 阅读全文

posted @ 2012-05-24 10:04 buptLizer 阅读(554) 评论(0) 推荐(0) 编辑

2012年4月15日

欧拉回路

摘要: 欧拉回路:图G,若存在一条路,经过G中每条边有且仅有一次,称这条路为欧拉路,如果存在一条回路经过G每条边有且仅有一次,称这条回路为欧拉回路。具有欧拉回路的图成为欧拉图。判断欧拉路是否存在的方法有向图:图连通,有一个顶点出度大入度1,有一个顶点入度大出度1,其余都是出度=入度。无向图:图连通,只有两个顶点是奇数度,其余都是偶数度的。判断欧拉回路是否存在的方法有向图:图连通,所有的顶点出度=入度。无向图:图连通,所有顶点都是偶数度。程序实现一般是如下过程:1.利用并查集判断图是否连通,即判断p[i] < 0的个数,如果大于1,说明不连通。2.根据出度入度个数,判断是否满足要求。3.利用dfs 阅读全文

posted @ 2012-04-15 15:54 buptLizer 阅读(16918) 评论(3) 推荐(7) 编辑

2012年4月12日

字符串数组排序(qsort参数 比较函数)

摘要: 这个问题来自一个面试题。给两个文件,其中一个文件存在一万行左右的文本,将所有数据以行为元素进行排序,输出到文件2中。拿到这个题,一看数据量大约一万行,内存应该没问题,感觉直接调用库函数qsort,写个cmp函数就很容易搞定,没想到调试程序发现了一个小问题。分析程序代码:const int MAXLINE = 100;const int MAXLEN = 256;int mycmp(const void *p1, const void *p2){char* s1 = (char *)p1;char* s2 = (char *)p2;cout<<s1<<" &qu 阅读全文

posted @ 2012-04-12 20:14 buptLizer 阅读(7097) 评论(0) 推荐(1) 编辑

2012年4月8日

Reservoir Sampling

摘要: Reservoir Sampling:从N个数中随机抽取k个元素,保证每个元素被选中的概率相等,N不知道有多大。分析:这个问题称为蓄水池抽样,经典方法:Init : a reservoir with the size: kfor(int i = k + 1; i <= N; ++i){ m = random(1, i); if(k >= m) swap the mth value with the ith value;}这个每个元素被选择的概率为k/N,证明网上很多。简单证明:假设现在从第i+1个选择下一个元素,现证明每一个元素被选中的概率为k/(i + 1)。对于第i + 1 个 阅读全文

posted @ 2012-04-08 10:57 buptLizer 阅读(2781) 评论(0) 推荐(0) 编辑

2012年4月5日

stack and queue一些应用

该文被密码保护。 阅读全文

posted @ 2012-04-05 20:44 buptLizer 阅读(25) 评论(0) 推荐(0) 编辑

2012年4月1日

最小数目的硬币组合问题(dp)

摘要: 问题:给出硬币种类,及要组合的sum,求用最少的硬币数目到达sum。例如:硬币种类1,5,8 sum为20,则最少的硬币数目为5555。分析此题,立刻想到的思路是贪心,从大的往小的搜索,最后到达sum后返回,仔细想想,这个思路是不对的。看上面的例子,正确答案为5555,可是我们用刚才的思路则得出的结论为881111,显然是不对的。想想错误原因,很简单,我们第一步选择8,剩余的12个问题的最优解不一定就是原问题的最优解,所以此题采用动态规划即算出达到当前状态的前一个状态的所有值,我们取最小的。令dp[i]表示sum为i时的最小硬币数目,则dp[i] = min{dp[i-aj] + 1, 0&l 阅读全文

posted @ 2012-04-01 17:00 buptLizer 阅读(2276) 评论(0) 推荐(0) 编辑

BSTree中查找第k小的数

只有注册用户登录后才能阅读该文。 阅读全文

posted @ 2012-04-01 10:52 buptLizer 阅读(36) 评论(0) 推荐(0) 编辑

2012年3月31日

求用1,2,5这三个数不同个数组合的和为100的组合个数

摘要: 这个题目其实很简单,直接利用dfs就出来,复杂度为O(100*50*20)可是看网上一个很好的分析,时间复杂度特别小。分析: 假设a*1 + b*2 + c*5 = 100;非常容易看出c的循环次数最小,那么枚举c开始c=0, a的取值为100,98,96,94,...,4,2,0c=1,a的取值为95,93,91,89,...,5,3,1c=2,a的取值为90,88,86,...,4,2,1c=3,a的取值为85,83,81,...,5,3,1.....c=19,a的取值为5,3,1c=20,a的取值0现在看出规律了吧,100以内的偶数+95以内的奇数+90以内的偶数+。。。+5以内的奇数+ 阅读全文

posted @ 2012-03-31 20:29 buptLizer 阅读(1926) 评论(0) 推荐(0) 编辑

查找两个已经排好序的数组的第k大的元素

摘要: 题目意思:给出两个排好序的数组 ,不妨设为a,b都按升序排列,及k的值,求出第k大的那个元素。分析这个题目,如果题目没有时间复杂度的要求,我们可以定义两个指针i,j分别指向a,b,如果a[i]<b[j]则i++否则j++,这个记录下走了多少步,如果==k步,则找到了第k大的元素,复杂度为O(k).那么如果有复杂度的要求,要求为O(log(len_a+len_b))呢,这个就得好好考虑,怎么利用二分来解决这个问题。解法一:假如第k大的数在a中,设置a[mid],那么肯定有b[k-mid-1]<=a[mid]<=b[k-mid],这是由于a中已经有mid个元素<a[mid] 阅读全文

posted @ 2012-03-31 20:19 buptLizer 阅读(4398) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 ··· 8 下一页

导航