算法
文章平均质量分 71
surpassgood123
这个作者很懒,什么都没留下…
展开
-
非诚勿扰女嘉宾问题 回溯法
问题描述:非诚勿扰n个女嘉宾,有3套题目,要求自己和左右的女嘉宾的题目不同,有多少种分法用回溯法解决,下面给出回溯法的非递归和递归的形式的代码/*author:songzhengchaotime:2013/101/10*//*void fun(int i){ if(i>N) { for(int j=1;j<=N;j++) cout<<arr[j]<<" "原创 2013-10-10 09:33:30 · 1652 阅读 · 0 评论 -
后缀数组的应用
本文参考了 后缀数组--处理字符串的有力工具原创 2014-06-06 12:33:23 · 725 阅读 · 0 评论 -
Trie树(前缀树)的应用
问题:在百度或大型网站,你输入“中国”出现“中国制造”,“”原创 2014-04-13 17:19:06 · 941 阅读 · 0 评论 -
从N个数总随机选出M个数
来自编程珠玑问题:假设一组数0,1,2,3,.....N-1,随机选出M个不重复的数字开始0 被选择的概率为 M/N1被选择的概率为 M/N(如果0没有被选择的话) 或者 M-1/N(0被选择了)当到i 的时候被选择的概率为 剩余的数用r表示,要选择出的数用s,则其概率为 s/r开始的时候 r=N s=M if(rand()%r概率为s/r 当rand(原创 2014-03-23 16:19:24 · 1402 阅读 · 0 评论 -
编程珠玑 8.3分治法的错误 连续子向量的最大和
问题描述:问题输入是具有n个数的向量x,输出是输入向量的任何连续子向量的最大和要解决这个规模为n的问题,可递归的解决两个规模近似为n/2的子问题,然后对它们的答案进行合并以得到整个问题的答案假设数组A 【l......u】mid=(l+u)/2;A[l....mid] 最大的连续的最大值为 lmax 下标是从i_1.......j_1A[mid....u]最大的连续的最大值原创 2014-03-19 16:46:34 · 798 阅读 · 0 评论 -
枚举法的案列
题目:1~9的9个数字,每个数字只能出现一次,要求这样的一个9位的整数:其第一位能被1整除,前2位能被2整除,前3位能被3整除。。。。。。依次内推,前9位能被9整除我开始想到了全排列的代码如下:原创 2014-03-29 14:33:33 · 1065 阅读 · 0 评论 -
众数问题
令E是整数x1,x2..xn。E中x的众数是x在E中出现的次数。如果某个数z的众数大于n/2,则它就是众数问题1:已知一数列,判断是否存在众数,若存在,则求出众数问题2:对已知的某个有n个元素的列表,找出所有出现超过n/4次的元素。算法设计应该做o(n)次比较对于问题1,如果规模比较小的话,用桶式排序,时间复杂度为o(n),对于大规模不太实用了。先排序时间复杂度o(n*lgn),排序后原创 2014-02-05 22:52:25 · 1332 阅读 · 0 评论 -
序列比较
序列比较问题在生物中有很多的应用问题描述:把一个序列变成另一个序列的最少修改步数。用到动态规划令A=a1,a2,a3,....an ,B=b1,b2,.....bm是2个字符串,其中字符取自一个有限集合(如英语字母表)。我们想一一改变A的字符变把A变成B.改变有3种1)插入,把某个字符串插入到字符串2)删除,从字符串中删除某个字符3)替换,把字符串中的某个字符替换成另一字符原创 2013-12-10 12:02:31 · 934 阅读 · 0 评论 -
哈夫曼树的构造
Huffman_encoding (s,f)input:s(字符串)和f(字频数组)output:T(S的哈夫曼树)begin:insert all characters into a heap H according to their frequncywhile H is not empty do if H contains only only character原创 2013-12-06 22:03:15 · 1036 阅读 · 0 评论 -
动态规划解决N个数之和为K
问题:给定一个整数K和n个不同大小的商品,第i个物品的大小整数位ki ,寻找一个物品的子集,它们的和正好为为K ,或者确定不存在这样的子集用动态规划解决问题的时候,求出问题的一个解,而不是所有的解。如果求出所有的解,我目前想到的用回溯法解决,不过要指数之间的复杂度P(N,K)可以通过判断P(N-1,K)和P(N-1,K-kn)的解来判断,如果这两个子集都无解,则问题没有解。我们不仅要知道P原创 2013-11-27 17:13:21 · 6441 阅读 · 0 评论 -
建筑物的轮廓问题
问题描述:描述对于城市中几座建筑外形,给出这些建筑的二维轮廓。•关于输入输入的第一行是正整数 n(1接下来 n 行,每行三个正整数start end height,表示建筑的左边界、右边界和高度。•关于输出输出建筑群的轮廓,包含多行,从左到右输出建筑的边界:(U|D|R) lenU、D、R分别表示上、下、右,即建筑边界延伸的方向,len为正整数,表示边界在此方向上延伸的原创 2013-11-27 13:56:29 · 3997 阅读 · 0 评论 -
两个链表的相交和含有环的单链表
本文参考了http://www.cppblog.com/humanchao/archive/2008/04/17/47357.aspx问题1:如何判断单链表有环2:如果有环,在哪里有环的开始点3 判断两个链表是否相交问题一:设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环原创 2013-11-06 17:50:20 · 638 阅读 · 0 评论 -
多个for语句转为一个while语句
看到编程之美说,一个例子含有多个for语句,这样美吗?书上用一个while来控制的假设 有2个数组arr1[],arr2[],要打印出arr1[]和arr2[]组合的数,你肯定会用2for ,本文转为一个while,多个for也同样适用看代码如下:原创 2013-11-05 14:16:26 · 1164 阅读 · 0 评论 -
求满足条件的和
在博客http://blog.csdn.net/linyunzju/article/details/7720413中,问题:1. 快速找出一个数组中的两个数,让这两个数之和等于一个给定的值。2. 快速找出一个数组中的三个数,让这三个数之和等于一个给定的值。1. 解法:算法复杂度为O(nlogn)。先用快速排序对数组排序,让后用双指针(双索引)法对排序好的数组进行原创 2013-10-29 15:52:39 · 1159 阅读 · 0 评论 -
广度优先遍历的应用
// 广度遍历----连连看.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include using namespace std;#define UNBOUND 1234/**author:songzhengchaotime:2013/10/19funtion:连连看程序,找出从一个位置(x1,y1)到(x2,y2)原创 2013-10-19 20:52:53 · 1416 阅读 · 0 评论 -
求前k个大的数据
问题描述:有很多个无序的数,我们姑且假定它们各不相同,如何选出其中最大的若干数?可能有人会说先排序后查找下就不ok了吗?其实如果是大数据的话,内存有限,这样排序是没法运行的,还有时间复杂度也挺高的我觉得下面2个算法挺好的算法一、回忆下快速排序,快排中的每一步,假设数组下标从start---->end,选个pivot element 主元,经过一次partition ,pivot ele原创 2013-10-25 14:54:22 · 788 阅读 · 0 评论 -
机器故障检查
编程之美中P40解法三:如果A和B不同的话,那么这个异或值的二进制中某位为1,显然A和B中有且仅有一个数的相同位为1我们把所有的ID分为2类,一类在这位为1,另一类这位为0。那么对于这两类ID,每一类分别含有A和B中的一个。那么我们使用两个变量,在遍历列表时,分别计算这两类ID的异或和,即可得到A和B的值(太巧妙了)这样这两类中,每类有2份相同的数据和一个A或者B原创 2013-10-12 11:08:08 · 707 阅读 · 0 评论 -
铁路栈问题(HWoj)
本题目考察对数据结构中的栈、队列的知识的了解,我们可以把出站的顺序看做队列,进站可以看做压入站#include #include #include using namespace std;int JudgeTrainSequence (int maxNum, char *pOutSeq){ queue Q;//出站的队列 stack S; for(int i=0;i<maxNu原创 2015-04-04 19:31:26 · 1473 阅读 · 0 评论