- 博客(18)
- 资源 (5)
- 收藏
- 关注
原创 编程之美发帖水王之无限拓展
假定求去最大发帖的前I个人;总贴位N;(I其算法如下;//水王发帖算法;candidate[i];ntimes[i];bool done=0;//0代表此次无结果;否则成功匹配;void Find(Type* ID,int N){int a;for(int j=0;j<N){ for(a=0;a<i;a++){ if(ntimes[a]
2009-10-19 10:58:00 731 1
原创 爱情的故事
穷男生不该有爱情一个悲哀的故事(……):穷男生不该有爱情,所以我跟她说分手吧,我配不上你,是我不够好,我不忍心让你跟我一起吃苦。我上有父母爷爷奶奶,下有弟弟妹妹还等着念书,我起码要多辛苦10年,才能让全家人过上好日子,我爱你,所以我不应该跟你在一起,我们一开始就错了,对不起,我希望你能忘记我。如果10年以后我自由了,我会先去找你,你幸福的话我绝不打扰你,你要是还没有找到合适的,那么让我再说一次我爱
2008-06-15 22:55:00 718 1
原创 boost之shared_ptr,weak_ptr计数
今天我也对boost的shared_ptr和weak_ptr作个简单的介绍; 总所周知,boost给我们提供了方便的内存管理,不需要我们手动的释放内存,shared_ptr发挥了一个重大作用。而weak_ptr作为一个观察者,却对计数不理不睬。 看源码分析, 它们都有类似的
2011-08-22 23:45:13 2358
原创 随机数生成
<br /> int* GetRandomSequence2(int total) { int* sequence = new int[total]; int* output = new int[total]; for (int i = 0; i < total; i++) { sequence[i] = i;
2011-01-17 10:38:00 487
转载 KMP算法引论
解决这类问题,通常我们的方法是枚举从A串的什么位置起开始与B匹配,然后验证是否匹配。假如A串长度为n,B串长度为m,那么这种方法的复杂度是O (mn)的。虽然很多时候复杂度达不到mn(验证时只看头一两个字母就发现不匹配了),但我们有许多“最坏情况”,比如,A= "aaaaaaaaaaaaaaaaaaaaaaaaaab",B="aaaaaaaab"。我们将介绍的是一种最坏情况下O(n)的算法(这里假设 m<=n),即传说中的KMP算法。<br /> 之所以叫做KMP,是因为这个算法是由Knu
2011-01-14 09:45:00 474
原创 矩阵
<br />今天谈到矩阵上面;OPENGL的矩阵有下面几种:投影的,模型的等等……<br />但是每种矩阵都有一个特点:那就是矩阵累计。<br />如果我们对于某种矩阵就行了某种操作,那么会遗留下来,也就是一种累加的效果,下次你可当心了。<br />所以我们有时为了不破坏当前的这种矩阵,通常压入堆栈 ,然后更改,操作完毕后弹出堆栈即可。<br />
2010-12-03 09:44:00 439
原创 昨夜幽梦
<br />昨天夜晚,做了一个梦,一个凄美的梦。梦里面我爱上了一个女孩,而她却生命将尽,我带着她去看梅花,梅花含羞,却很漂亮。<br />但是我心爱的女孩却要离我而去,她躺在我的怀里,慢慢的呼吸着……<br />醒来,我的眼泪欲出,我无法预知这代表着什么。
2010-09-15 20:20:00 466
原创 Heap Sort
<br />堆的定义: <br /> n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质):<br /> (1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤)<br /> 若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。<br /> <br /> 堆的这个性质使得可以迅速定位在
2010-08-28 21:32:00 378
转载 C++之萃取技术
<br />自从C++中引入了template后,以泛型技术为中心的设计得到了长足的进步。STL就是这个阶段杰出的产物。STL的目标就是要把数据和算法分开,分别对其进行设计,之后通过一种名为iterator的东西,把这二者再粘接到一起。设计模式中,关于iterator的描述为:一种能够顺序访问容器中每个元素的方法,使用该方法不能暴露容器内部的表达方式。可以说,类型萃取技术就是为了要解决和iterator有关的问题的,下面,我们就来看看整个故事。<br /><br /><br /> <br /> <br />
2010-08-24 10:48:00 1070
转载 绘图双缓冲
<br />显示图形如何避免闪烁,如何提高显示效率是问得比较多的问题。而且多数人认为MFC的绘图函数效率很低,总是想寻求其它的解决方案。<br />MFC的绘图效率的确不高但也不差,而且它的绘图函数使用非常简单,只要使用方法得当,再加上一些技巧,用MFC可以得到效率很高的绘图程序。<br />我想就我长期(呵呵当然也只有2年多)使用MFC绘图的经验谈谈我的一些观点。 <br />1、显示的图形为什么会闪烁?<br />我们的绘图过程大多放在OnDraw或者OnPaint函数中,OnDraw在进行屏幕显示时是
2010-08-12 10:12:00 403
原创 多线程之volatile
现在进入了多核时代;程序也要发生一系列变化;比如说现在单纯的变量已经不再安全了;比如说一个int型别的数据,我们同时开了几个线程在跑。现在有了一个线程突然改变了该int变量,我们的意图是几个线程都要把这个变量反映出来;但是往往事与愿违。让我们来分下问题所在:int a;while(a){……}程序执行到该段时,首先要从内存里面读取到寄存器里面;然后程序从寄存器里面读取。这里就有了一个漏洞了。假设我们的编译器做了优化(在while循环那段),这样一来,就会导致我们的变量的变化不能及时反映出来;我们 的软件该做
2010-07-12 21:47:00 521 6
原创 编程珠玑之大记录问题
问题是这样的:一个文件包含一个1000万级别的记录;每个记录都要大于0并且小于10的7次方;只有一个数出现了2次,要求输出排序后的序列;限制内存1M,运行时间10s; 对于这样的设计,我们可以用位图来解决;只需要1000万个,并且内存正好是1M,符合要求;从文件里面遍历,取出一个数然后对应到位图中去,检查该标志位是否为0,如果为0,表示尚未有数据对应,那么置1;为1则表示
2009-12-13 15:10:00 408
原创 归并排序之非递归算法
总所周知,递归算法是非常低效的;所以就有了非递归算法,相比而言,效率大大的提高了;#include #include void Merge(int *sr, int *di, int left, int mid, int right){ int i = left, j = mid + 1, k = left; while (i <= mid && j <= right)
2009-10-21 10:12:00 1030 5
原创 遇到了CString要转char,int等等怎么办
昨日遇到了CString类型的数据;需要转换为int,char类型,傻了两分钟;然后迅速的百度;忽然察觉大部分的转换异常的麻烦;今日总结了下了简单的方法;其实早就有了sscanf函数;以前没有注意,今日拿出来说说;比如说我们用了CString str="126";假如说这个数据是从edit控件等地方取得;那么我们需要int类型来计算;就有了int a;sscanf(str,
2009-06-14 21:49:00 5024 4
转载 主线程与子线程的问题
顺序调用DLL系统是顺序调用D L L的D l l M a i n函数的。为了理解这样做的意义,可以考虑下面这样一个环境。假设一个进程有两个线程,线程A和线程B。该进程还有一个D L L,称为S o m e D L L . d l l,它被映射到了它的地址空间中。两个线程都准备调用C r e a t e T h r e a d函数,以便再创建两个线程,即线程C和线程D。
2009-03-26 17:59:00 1745 1
原创 Csocket基本原理
我通过几个采用 CSocket 类编写并基于 Client/Server (客户端 / 服务端)的网络聊天和传输文件的程式 ,在调试这些程式的过程中,追踪深入至 CSocket 类核心源码 SockCore.cpp , 对于CSocket 类的运行机制可谓是一览无遗,并且对于阻塞和非阻塞方式下的 socket 程式的编写也是稍有体会。 阅读本文请先注意 : • 这里的阻塞和非阻塞的概念
2009-03-20 20:09:00 2321 1
原创 resetevent
多线程程序设计之线程通 线程之间通信的两个基本问题是互斥和同步。 线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。 线程互斥是指对于共享的操作系统资源(指的是广义的"资源",而不是Windows的.res文件,譬如全局变量就是一种共享资源),在各线程访问时的排它性。当有若干个线程都要使用某
2009-03-10 14:56:00 4489
转载 堆与栈
堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)
2009-03-05 13:41:00 522
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人