04 2012 档案

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

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

字符串数组排序(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 阅读(7145) 评论(0) 推荐(1)

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 阅读(2809) 评论(0) 推荐(0)

stack and queue一些应用
该文被密码保护。

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

最小数目的硬币组合问题(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 阅读(2307) 评论(0) 推荐(0)

BSTree中查找第k小的数
只有注册用户登录后才能阅读该文。

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

导航