自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

在水一方

河图洛书

  • 博客(69)
  • 资源 (9)
  • 收藏
  • 关注

原创 动态规划

最优化原理   1951年美国数学家R.Bellman等人,根据一类多阶段问题的特点,把多阶段决策问题变换为一系列互相联系的单阶段问题,然后逐个加以解决。一些静态模型,只要人为地引进“时间”因素,分成时段,就可以转化成多阶段的动态模型,用动态规划方法去处理。与此同时,他提出了解决这类问题的“最优化原理”(Principle of optimality):    “一个过程的最优决策具有这样的性质:即无论其初始状态和初始决策如何,其今后诸策略对以第一个决策所形成的状态作为初始状态的过程而言,必须构成最优策略”

2011-05-22 20:37:00 2093 1

原创 算法题41 超大数据量遍历查找

1、一个文件,内含一千万行字符串,每个字符串在1K以内,要求找出所有相反的串对,如abc和cba  2、有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。请用5分钟时间,找出重复出现最多的前10条。 算法:建一个红黑树,比如STL中的map1,key为短信的hash值如MD5值,value为该短信出现的次数。同时维护一个另一个只有10个节点的map2,ke

2011-05-22 11:41:00 4636

原创 算法题40 在字符串中删除特定的字符。

题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。分析:这是一道微软面试题。在微软的常见面试题中,与字符串相关的题目占了很大的一部分,因为写程序操作字符串能很好的反映我们的编程基本功。

2011-05-22 04:23:00 1713

原创 算法题39 最长公共子串--动态规划

题目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串。注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中。请编写一个函数,输入两个字符串,求它们的最长公共子串,并打印出最长公共子串。例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它们的最长公共子串,则输出它们的长度4,并打印任意一个子串。分析:求最长公共子串(Longest Common Subsequence, LCS)是一道非常经典的动态规划题,因此一些重视算

2011-05-22 04:21:00 1397

原创 算法题38 寻找丑数

题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。分析:这是一道在网络上广为流传的面试题,据说google曾经采用过这道题。

2011-05-22 04:19:00 2551

原创 算法题37 把数组排成最小的数

题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32,  321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。

2011-05-22 04:18:00 2022 1

原创 算法题36 对称子字符串的最大长度

题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。

2011-05-22 04:16:00 1659

原创 算法题35 复杂链表的复制

题目:有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任一结点或者NULL。其结点的C++定义如下: struct ComplexNode{    int m_nValue;    ComplexNode* m_pNext;    ComplexNode* m_pSibling;};                              请完成函数ComplexNode* Clone(ComplexNode* pHead),以复制一个复杂链表。

2011-05-22 04:15:00 2667 1

原创 算法题34 构造随机发生器

已知一随机发生器,产生0的概率是p,产生1的概率是1-p,现在要你构造一个发生器,使得它构造0和1的概率均为1/2;构造一个发生器,使得它构造1、2、3的概率均为1/3;...,构造一个发生器,使得它构造1、2、3、...n的概率均为1/n,要求复杂度最低。

2011-05-22 04:13:00 1754 3

原创 算法题33 从一个序列中选出所有前面的数大于后面的数的组合

<br /> <br />多人排成一个队列,我们认为从低到高是正确的序列,但是总有部分人不遵守秩序。<br />如果说,前面的人比后面的人高(两人身高一样认为是合适的),<br />那么我们就认为这两个人是一对“捣乱分子”,比如说,现在存在一个序列:<br />176, 178, 180, 170, 171<br />这些捣乱分子对为<br /><176, 170>, <176, 171>, <178, 170>, <178, 171>, <180, 170>, <180, 171>, <br />那么,现

2011-05-22 04:11:00 1518 1

原创 算法题32 从随机数数组中选取长度不小于3的最长等差数列

题目:求随机数构成的数组中找到长度大于=3的最长的等差数列输出等差数列由小到大:  如果没有符合条件的就输出[0,0].格式:输入[1,3,0,5,-1,6]输出[-1,1,3,5]要求时间复杂度,空间复杂度尽量小 算法分析:1)对于a1,a2,a3为等差数列,那么a3,a2,a1也为等差数列。2)如果一个有n个元素的等差数列首元素为a1,公差为d,那么a1+i

2011-05-22 04:10:00 4182 5

原创 算法题31 输出1到N位的十进制数,N可能很大。

题目:输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999。分析:这是一道很有意思的题目。看起来很简单,其实里面却有不少的玄机。N很大,这就促使我们考虑是否字符数组的形式了。而且字符数组的每个元素均是‘0’~‘9’.void Print1toNDigits(int n){ char* number = new char[n+1]; memset(number, 0, n+1); // n乃位数,逢十进1 int i = 0; whi

2011-05-22 03:02:00 1705

原创 算法题30 颠倒栈

题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。分析:就是把栈顶元素依次压入到n, n-1,n-2, ..., 2处。// 递归法颠倒栈#include templatevoid ReverseStack(std::stack& s){ int count = s.size(); while(count >= 0) { T data = s.top(); s.pop(); //

2011-05-22 01:58:00 1831

转载 素数生成算法

质数的定义一个数,如果只有1和它本身两个因数,这样的数叫做质数,又称素数。 试除判断法算法描述:从上述定义可知,素数不能被1和它本身之外的数整除,所以,判断一个数x是否素数只要看它是否能被2~sqrt(x)间的数整除即可;而求N内所有素数则是循环重复上述过程。优化:判断一个数x是否素数只要看它是否能被2~sqrt(x)间的素数整除即可。#include #include // 试除法求maxNum内的所有素数,返回个数unsigned int PrimeNum_1(unsigned int ma

2011-05-21 16:28:00 2921

原创 算法题29 从一个取值范围为1~N的不重复数列中找出所有满足两数和为N+1的数对

<br />题目:一个整数数列,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于N+1。复杂度最好是O(n),如果是O(n2)则不得分。<br /> <br />算法:建立一个map<数列元素值, 对应索引>. 对每个元素i,如果N+1-i不在map中,插入i,否则输出(i, map[i]).复杂度O(n).<br /> <br />#include <map>// ar为不重复的数列,输出ar中所有两

2011-05-21 13:09:00 4294 1

原创 毒酒问题---1000桶酒,其中1桶有毒。而一旦吃了,毒性会在1周后发作。问最少需要多少只老鼠可在一周内找出毒酒

如题。

2011-05-21 03:14:00 43564 2

原创 算法题28 配对比较---有一堆1万个石头和1万个木头,对于每个石头都有1个木头和它重量一样,把配对的石头和木头找出来

题目1:有一堆1万个石头和1万个木头,对于每个石头都有1个木头和它重量一样,把配对的石头和木头找出来 题目2:有一堆螺栓和螺母,每一个螺栓只可能配一个螺母,螺栓与螺栓之间不能比较,螺母与螺母之间也不可以比较,只有螺栓与螺母之间可以比较,配对所有的螺栓和螺母。 解题思路:此题就是需找两个可比较数列的问题。如果直接比较的话,那就是O(n^2)的复杂度。 设a[1...n],b[

2011-05-21 03:11:00 8119 1

原创 算法题27 在一个int数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数。

算法:考虑使用首尾双指针p1, p2,建立存放从头遍历过程中的最大值max,以及从尾遍历过程中的最小值min。首指针从前往后遍历,尾指针从后往前遍历,(不能完全使二者同时滑动)。遍历结束时p1 == p2当p1 当p2 > min时,使p2--当p1>max且p2 p2时,需要修正,使p1 = p2.此种算法时间复杂度为O(n), 空间复杂度为常数。bool FindValue(int data[], int n, int& find){ int maxTemp = data[0], minTemp

2011-05-21 02:55:00 2889 4

转载 并查集

<br />并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。<br /> <br /> 主要操作<br />需要注意的是,一开始我们假设元素都是分别属于一个独立的集合里的。<br />

2011-05-20 23:18:00 927

原创 算法题26 从两个排序数列中找到两个数列组合起来中间大的数

题目:已经两个已经排好序的数组,找出两个数组合起来的中间大的数字。要求算法复杂度尽可能低。如:x数组:1,7,9,10,30    y数组:3,5,8,11    则中间大数为:8 双指针同时有序遍历。时间复杂度O((m+n)/2)int GetMaxValue(int a[], int m, int b[], int n){ int maxValue = a[0]; int i = 0, j = 0; int midIndex = (m+n)/2; while(i b[j])

2011-05-20 19:14:00 2040

原创 算法题25 数据置换

输入,如何在O(n)的时间,用O(1)的空间,将这个序列顺序改为a1,b1,...,an,bn

2011-05-20 01:07:00 1097

原创 目标:第100个球

<br />题目:假设排列着100个乒乓球,由两个人轮流拿球装入口袋,能拿到第100个乒乓球的人为胜利者。条件是:每次拿球者至少要拿1个,但最多不能超过5个,问:如果你是最先拿球的人,你该拿几个?以后怎么拿就能保证你能得到第100个乒乓球?<br /> <br />解题方法:本题关键就是对条件“每次拿球者至少要拿1个,但最多不能超过5个”的演变。<br /> <br />设每次拿n个,这 1<=n<=5. 则 1<=6-n<=5.<br />因此,第二个人拿的数量为n,只要第一个人拿6-n,即可控制整个流程

2011-05-19 23:28:00 1158

原创 三个女儿的年龄

<br />题目:一个经理有三个女儿,三个女儿的年龄加起来等于13,三个女儿的年龄乘起来等于经理自己的年龄,有一个下属已知道经理的年龄,但仍不能确定经理三个女儿的年龄,这时经理说只有,一个女儿的头发是黑的,然后这个下属就知道了经理三个女儿的年龄。请问三个女儿的年龄分别是多少?为什么?<br /> <br />解题思路:穷举法<br /> <br />由于下属在知道经理的年龄的前提下扔不确定三女儿的年龄,说明有多种组合满足条件。<br /> <br />一共有以下组合:<br /> <br /><br />小

2011-05-19 22:51:00 1698

原创 猴子分桃,带作弊均分

<br />题目:有5只猴子在海边发现一堆桃子,决定第二天来平分.第二天清晨,第一只猴子最早来到,它左分右分分不开,就朝海里扔了一只,恰好可以分成5份,它拿上自己的一份走了.第 2,3,4,5只猴子也遇到同样的问题,采用了同样的方法,都是扔掉一只后,恰好可以分成5份.问这堆桃子至少有多少只? <br /> <br />解题:如果每次平分不扔一个,那么最后一次平分后每份b = 4/5*4/5*4/5*4/5*4/5*a.<br /> <br />因此,a = 5^n + c;其中n为平分的次数,c为常量。这就

2011-05-19 20:29:00 1460

转载 海盗分金

<br />题目:5名海盗抢得了窖藏的100块金子,并打算瓜分这些战利品。这是一些讲民主的海盗(当然是他们自己特有的民主),他们的习惯 <br />是按下面的方式进行分配:最厉害的一名海盗提出分配方案,然后所有的海盗(包 <br />括提出方案者本人)就此方案进行表决。如果50%或更多的海盗赞同此方案,此方 <br />案就获得通过并据此分配战利品。否则提出方案的海盗将被扔到海里,然后下一名 <br />最厉害的海盗又重复上述过程。 所有的海盗都乐于看到他们的一位同伙被扔进海里,不过,如果让他们选择的 <b

2011-05-19 20:07:00 970

转载 称球问题

<br />问题1: 有12只球,编号1--12,它们外形相同,除其中1只略轻(称作坏球)外,其余重量相等.要求用一架天平称量3次,找出这只坏球. <br /> <br />解法:<br />第一次称量<br />第二次称量<br />第三次称量<br />结论 : 坏球为<br />1,2,3,4<5,6,7,8<br />1,2<3,4<br />1<2<br />1<br />1>2<br />2<br />1,2>3,4<br />3<4<br />3<br />3>4<br />4<br />1,

2011-05-19 17:05:00 937

原创 一次称量检验

题目1:共有三类药,分别重1g,2g,3g,放到若干个瓶子中,现在能确定每个瓶子中只有其中一种药,且每瓶中的药片足够多,能只称一次就知道各个瓶子中都是盛的哪类药吗?如果有4类药呢?5类呢?N类呢(N可数)?如果是共有m个瓶子盛着n类药呢(m,n为正整数,药的质量各不相同但各种药的质量已知)?你能只称一次就知道每瓶的药是什么吗?注:当然是有代价的,称过的药我们就不用了解题思路: 未知第一个瓶子拿出一片,第二个瓶子拿出四片,第三个拿出十六片,……第m个拿出n+1的m-1次方片。把所有这些药片放在一起称重量。题目

2011-05-19 16:57:00 2188 1

转载 逻辑推理的一般解法思想

<br /><br />进行逻辑推理时,需要遵循以下三大基本规律:<br />一、矛盾律。在逻辑推理过程中,对同一结论的推理不能自相矛盾。即对同一对象的两个互相矛盾的判断,至少有一个是错误的。<br />二、排中律。在逻辑推理过程中,一个思想或为真或为假,不能既为真又为假,也不能既不真又不假。即对同一对象的两个恰好相反的判断,必有一个是对的,一个是错误的。<br />三、同一律。在逻辑推理过程中,同一对象的内涵必须是确定的,在进行判断和推理的过程中,每一概念都必须在同一意义下使用,不许偷换。即每个概念的含义

2011-05-19 11:23:00 2235

原创 超复杂逻辑分析

题目:前提:1 有五栋五种颜色的房子2 每一位房子的主人国籍都不同3 这五个人每人只喝一种饮料,只抽一种牌子的香烟,只养一种宠物4 没有人有相同的宠物,抽相同牌子的香烟,喝相同的饮料提示:1  英国人住在红房子里2  瑞典人养了一条狗3  丹麦人喝茶4  绿房子在白房子左边5  绿房子主人喝咖啡6  抽PALL MALL烟的人养了一只鸟7  黄房子主人抽DUNHILL烟8  住在中间那间房子的人喝牛奶9  挪威人住第一间房子10 抽混合烟的人住在养猫人的旁边11 养马人住在抽DUNHILL烟

2011-05-19 01:29:00 5173 2

原创 动态规划---运动员得分

<br />题目;有一种体育竞赛共含M个项目,有运动员A,B,C参加,在每一项目中,第一,第二,第三名分别的X,Y,Z分,其中X,Y,Z为正整数且X>Y>Z。最后A得22分,B与C均得9分,B在百米赛中取得第一。求M的值,并问在跳高中谁得第二名。 <br /> <br />解析:<br />1)所有项目得分之和为22+9+9 = 40. x+y+z >= 6 并且M*(x+y+z) = 40.<br />M和(x+y+z)均为正整数,可得M = 4或5,x+y+z = 10或8. <br />2)知x> 3

2011-05-19 01:22:00 1495

原创 卡塔兰数---电影院排队

<br />题目:有2n个人排队进电影院,票价是50美分。在这2n个人当中,其中n个人只有50美分,另外n个人有1美元(纸票子)。愚蠢的电影院开始卖票时1分钱也没有。<br />问: 有多少种排队方法 使得 每当一个拥有1美元买票时,电影院都有50美分找钱<br />注: <br />1美元=100美分<br />拥有1美元的人,拥有的是纸币,没法破成2个50美分<br /> <br />题解:如果不考虑电影院能否找钱,那么一共有(2n)!/[n!n!]种排队方法(即从2n个人中取出n个人的组合数)

2011-05-19 00:13:00 4764 1

原创 100匹马驮100块石头

<br />现在共有100匹马跟100块石头,马分3种,大型马;中型马跟小型马。其中一匹大马一次可以驮3块石头,中型马可以驮2块,而小型马2头可以驮一块石头。问需要多少匹大马,中型马跟小型马?(问题的关键是刚好必须是用完100匹马)<br /> <br />设有X匹大马,Y匹中马,Z匹小马<br />由题意可知:<br />公式1:X+Y+Z=100<br />公式2:6x+4y+z=200<br /><br /><br />公式2减公式1得:<br />5X+3Y=100<br />X=20-3Y/5<b

2011-05-18 23:40:00 4082 1

原创 沙漠运水赚钱

<br />题目:有一人有240公斤水,他想运往干旱地区赚钱。他每次最多携带60公斤,并且每前进一公里须耗水1公斤(均匀耗水)。假设水的价格在出发地为0,以后,与运输路程成正比,(即在10公里处为10元/公斤,在20公里处为20元/公斤......),又假设他必须安全返回,请问,他最多可赚多少钱? <br /> <br />解题思路:本题和穿越沙漠问题很像,都属于动态规划问题。<br />1)要求安全返回,则必须在每个临时点储备足够的回程所需。并且继续往干旱深处运水。<br />2)要保证利益最大,消耗最小

2011-05-18 21:40:00 2707

原创 三人猜数

<br />题目1:一个教授逻辑学的教授,有三个学生,而且三个学生均非常聪明!一天教授给他们出了一个题, 教授在每个人脑门上贴了一张纸条并告诉他们,每个人的纸条上都写了一个正整数,且某两个数的和等于第三个! (每个人可以看见另两个数,但看不见自己的 )教授问第一个学生: 你能猜出自己的数吗?回答:不能,问第二个,不能,第三个,不能,再问第一个,不能,第二个,不能,第三个:我猜出来了,是 144!教授很满意的笑了。请问您能猜出另外两个人的数吗?<br /> <br />解题思路:1、如果这三个数之间毫无规律,

2011-05-18 20:09:00 2807

原创 二人猜牌问题

题目:S 先生、P先生、Q先生他们知道桌子的抽屉里有16张扑克牌:红桃A、Q、4 黑桃J、8、4、2、7、3 草花K、Q、5、4、6 方块A、5。约翰教授从这16张牌中挑出一张牌来,并把这张牌的点数告诉 P先生,把这张牌的花色告诉Q先生。这时,约翰教授问P先生和Q 先生:你们能从已知的点数或花色中推知这张牌是什么牌吗? 于是,S先生听到如下的对话:P先生:我不知道这张牌。 Q先生:我知道你不知道这张牌。 P先生:现在我知道这张牌了。 Q先生:我也知道了。听罢以上的对话,S先生想了一想之后,就正确地推出这张牌

2011-05-18 18:00:00 3564

原创 重叠硬币覆盖桌面问题

<br />题目:在一张长方形的桌面上放了n个一样大小的圆形硬币。这些硬币中可能有一些不完全在桌面内,也可能有一些彼此重叠;当再多放一个硬币而它的圆心在桌面内时,新放的硬币便必定与原先某些硬币重叠。请证明整个桌面可以用4n个硬币完全覆盖。<br /> <br />证明:因为当第n+1个硬币时,新放的硬币便必定与原先某些硬币重叠。因此,设硬币直径为D,桌面上任一点距离最近的硬币的圆心的距离不大于2D。<br />所以,如果硬币的直径为2D,那么n个直径为2D的硬币就可以覆盖整个桌面。<br />对整个桌面长宽

2011-05-18 17:10:00 4353 1

原创 心理问题---三人分汤

题目:<br />一间囚房里关押着两个犯人。每天监狱都会为这间囚房提供一罐汤,让这两个犯人自己来分。起初,这两个人经常会发生争执,因为他们总是有人认为对方的汤比自己的多。后来他们找到了一个两全其美的办法:一个人分汤,让另一个人先选。于是争端就这么解决了。可是,现在这间囚房里又加进来一个新犯人,现在是三个人来分汤。必须寻找一个新的方法来维持他们之间的和平。该怎么办呢?<br /> <br />分析:<br />1、如何使分的人做到公平?<br /> <br />分的人后选。<br /> <br />2、如何防

2011-05-18 16:37:00 3551 2

转载 二叉树的遍历

遍历概念     所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。     遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。遍历方案1.遍历方案     从二叉

2011-05-18 11:21:00 1249

原创 算法题24 根据上排给出十个数,在其下排填出对应的十个数

给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数   要求下排每个数都是先前上排那十个数在下排出现的次数。   上排的十个数如下:   【0,1,2,3,4,5,6,7,8,9】举一个例子,   数值: 0,1,2,3,4,5,6,7,8,9

2011-05-18 00:13:00 12503 12

原创 算法题23 在二元树中找出和为某一值的所有路径

题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如 输入整数22和如下二元树  10     / /     5 12     / /     4 7则打印出两条路径:10, 12和10, 5, 7。

2011-05-18 00:12:00 2702 6

批量将VC工程相关文件转换为UTF-8编码格式

选择VC工程目录,转换文件格式到UTF-8格式。

2012-06-07

AMR音频文件播放器

AMR语音播放器,包含解码器。 基于Waveout* API实现。 还包含了一个基于MCI实现的播放器。 实现了播放、暂停、继续、停止、以及循环播放功能。 采用多线程技术,没有解码延时。 包含详细代码注释。

2012-03-22

WTL4MFC6_demo

WTL学习。 http://blog.csdn.net/wcyoot/article/details/6692316

2011-08-17

WTL4MFC5_demo

WTL学习 http://blog.csdn.net/wcyoot/article/details/6688356

2011-08-16

WTL4MFC4_demo

WTL学习。http://blog.csdn.net/wcyoot/article/details/6674808

2011-08-16

WTL4MFC3_demo

WTL学习:http://blog.csdn.net/wcyoot/article/details/6645176

2011-08-16

WTL4MFC2_demo

WTL学习代码,与博客文章对应 http://blog.csdn.net/wcyoot/article/details/6644863

2011-08-16

WTL4MFC1_demo

WTL学习相关,与博客文章相对应 http://blog.csdn.net/wcyoot/article/details/6641613

2011-08-16

WTL 学习源代码2

~~~~~~~~~~~~~~~~~~~~WTL学习代码。

2011-07-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除