代码改变世界

【图论】信手拈来的Prim,Kruskal和Dijkstra

2012-05-30 23:53 by 捣乱小子, 8209 阅读, 3 推荐, 收藏, 编辑
摘要:关于三个简单的图论算法 prim,dijkstra和kruskal三个图论的算法,初学者容易将他们搞混,所以放在一起了。 prim和kruskal是最小生成树(MST)的算法,dijkstra是单源最短路径的算法。 prim 最小生成树prim算法采用了贪心策略:把点分成两个集合,A为已被处理(已经在最小生成树中)的顶点,B为待处理的顶点,(A,B)也就是一个割。若边(u,v)满足u∈A,v∈B,那么(u,v)就是通过割(A,B)的一条边。 很自然的,会有一定数量的边会通过该割,其中权重最小的边就是轻边。 什么是轻边? 左边集合和右边集合就组成一个割,其中边... 阅读全文

【图论】拓扑排序应用

2012-05-22 23:52 by 捣乱小子, 4867 阅读, 0 推荐, 收藏, 编辑
摘要:拓扑排序虽是一种排序,但是它跟平时所接触的sort或者qsort不同,排序的意义不同。拓扑排序针对有向无回路图(DAG)而言的,不应用与存在回路的有向图。【图论】广度优先搜索和深度优先搜索 有说到了BFS和DFS,拓扑排序是DFS的一个应用。有向无回路图能说明事件的发生的先后的顺序。比如穿衣服,士兵排队等。一个具体的例子,有N个物体,下面给出物体的重量比较,比如(a,b)表示a比b重等等,问已给出的条件是否会矛盾?其实就是判断用所给条件所组织的一个图中是否会存在环?在DFS中加入时间戳,完成DFS后让节点按第二时间戳排序,就得到了DAG的拓扑排序结果。【图论】有向图是否存在环 拓扑排序还可以解 阅读全文

【图论】广度优先搜索和深度优先搜索

2012-05-18 09:23 by 捣乱小子, 38216 阅读, 3 推荐, 收藏, 编辑
摘要:写在最前面的两种图的遍历算法在其他图的算法当中都有应用,并且是基本的图论算法。广度优先搜索广度优先搜索(BFS),可以被形象的描述为“浅尝辄止”,具体一点就是每个顶点只访问它的邻接节点(如果它的邻接节点没有被访问)并且记录这个邻接节点,当访问完它的邻接节点之后就结束这个顶点的访问。广度优先用到了“先进先出”队列,通过这个队列来存储第一次发现的节点,以便下一次的处理;而对于再次发现的节点,我们不予理会——不放入队列,因为再次发现的节点:无非是已经处理完的了;或者是存储在队列中尚未处理的。《算法导轮》对两种搜索都采用了很聪明的做法,用白色WHITE来标志未发现的节点,用灰色GRAY来标志第一次被发 阅读全文

背包问题(01背包,完全背包,多重背包)

2012-05-06 18:27 by 捣乱小子, 48349 阅读, 38 推荐, 收藏, 编辑
摘要:写在最前面的近日为以下琐事烦身: 差不多要向学院提交项目申请了,本来是想做个多模式的IM系统的,可是跟往届通过审核的项目比起来,缺乏创新和研究价值,所以在文档上要多做手脚,花点心思。 一大堆的作业,每每期中都是这样。 一直想读的DirectUI开源代码一直没有进展下去。 准备五月底的软件设计比赛。魔... 阅读全文

《编程珠玑,字字珠玑》读书笔记完结篇——AVL树

2012-04-26 14:34 by 捣乱小子, 12533 阅读, 6 推荐, 收藏, 编辑
摘要:写在最前面的 手贱翻开了《珠玑》的最后几章,所以这一篇更多是关于13、14、15章的内容。这篇文章的主要内容是“AVL树”,即平衡树,比红黑树低一个等次。捣乱真惹不起红黑树,情况很复杂;而AVL思路比较清晰。《编程珠玑,字字珠玑》910读书笔记——代码优化更新了,做了点关于“哨兵”的笔记。在这篇文章的末尾,笔者还加了对引用调用的“大彻大悟”。 4篇读书笔记:全在这里 AVL树 学习数据结构... 阅读全文

《编程珠玑,字字珠玑》910读书笔记——代码优化

2012-04-15 13:39 by 捣乱小子, 4900 阅读, 2 推荐, 收藏, 编辑
摘要:写在最前面的 再庞大复杂的代码编译器都能接受,编译器会变得越来越聪明,让我们原本的代码更加高效。但是代码执行的多变与不可预测性,如果编译器大肆“优化”,偶尔或者大胆的说“在大多数情况下”,会得到“聪明反被聪明误”的后果,所以编译器非常小心谨慎,一遇到不可预测后果的优化,它就会立即折返,停止这一步的优化工作,因为它不知道程序员的本意是什么,“它怕得罪你”。 程序员要编写容易优化的代码,以帮助编译器扫清障碍。关于代码优化,笔者特别喜欢《深入理解计算机系统》一书中的第五章,有兴趣的可以阅读一下。代码优化小剖代码优化的方法总结了5种。 将函数展开,即内敛函数,以优化函数的调用。 《从简单的算法初探过. 阅读全文

《编程珠玑,字字珠玑》45678读书笔记——编程技巧

2012-04-06 21:03 by 捣乱小子, 2937 阅读, 3 推荐, 收藏, 编辑
摘要:写在最前面的 就像上一篇文章说的,“编程永远是后话”!在有了可靠的问题分析过程和数据结构的选择,能正确运行的“二分搜索”代码出现之前,把其主要的思路先在草稿上实现,即伪代码。但由于伪代码执行结果的不确定性,需要有一个验证的过程。笔者非常不喜欢这个过程,因为这个过程很繁琐,而且推出的结论不一定是正确的(毕竟没有实实在在在机器上运行得到正确的结果),在笔者看来,给一个算法题,知道用什么算法,数据结构,如果能用伪代码实现,离成功已经不远了。 但后来我又反驳了自己的观点(矛盾体啊),理由:至少到目前为止,写的都是小程序、小算法题,验证过程可能已经被潜移默化解决了。实战演练:动态规划矩阵连乘... 阅读全文

《编程珠玑,字字珠玑》1234读书笔记——多路归并排序

2012-03-29 12:49 by 捣乱小子, 5194 阅读, 4 推荐, 收藏, 编辑
摘要:写在前面的2012年3月25日买下《编程珠玑》,很期待但不知道它能给我带来什么! 编程珠玑,字字珠玑。但是翻译有点拗口,有时候整句话读下来都不知道在讲什么,多少有点掩饰了珠玑的魅力,真怀疑是不是直接有道翻译了。位图数据结构法在“开篇”的里,讲述了排序的一个问题,大意就是,对一个“最多占n位的(就是n位的整数),随机的,无重复的(互异无序)”的整数序列进行排序,那么这个序列的总长度len#include#include#include#includeusingnamespacestd;#defineMAX10000//总数据量,可修改#defineMAX_ONCE2500//内存排序MAX_ON 阅读全文

关于读书的流水账

2012-03-14 22:56 by 捣乱小子, 2425 阅读, 4 推荐, 收藏, 编辑
摘要:写在前面的下面是流水账,有闲情的看看,读书感受来到;等不及的打开传送门吧。《妙趣横生的虚拟存储器》流水账 计算机要处理的数据大多会先暂存到高速缓冲区或者内存中,如果内存的容量都无法满足要求的时候,就会把额外的代码数据存储到硬盘当中(硬盘容量很大)。所以cpu是以高速缓冲区作为缓存,而高速缓存又以内存作为缓存,内存又以硬盘做为缓存,这里所说的“作为缓存”是指当层次的存储容量超额的情况下,把多余的代码数据先存放到下一级层次的存储器中,也就是当前层次以下一层次的存储器作为缓存。 比如:CPU中的最高速的存储器就是寄存器了,寄存器的数量有限吧,存储的容量也是非常有限,所以寄存器中的数据可能会... 阅读全文

妙趣横生的虚拟存储器

2012-03-12 19:42 by 捣乱小子, 6108 阅读, 2 推荐, 收藏, 编辑
摘要:写在前面的阅读这篇文章需要计算机组成原理的基础.在这里外链上一篇文章《关于读书的流水账》,有读书感受。虚拟存储器的核心思想很独到,在看了前一篇文章中提到的书中才领略到了它的魅力,硬件的东西比较多,但是也绝对可以提高你的软件功力,而且毫无疑问。这篇文章算是读书笔记。PS:发现文中有很多的英文简写,为了方便阅读在这里总结一下。------------------------------------------------------------------------中文 | 英文,英文简写 ----------------------------------------------------- 阅读全文

简单的外壳(shell)

2012-02-23 22:23 by 捣乱小子, 3942 阅读, 3 推荐, 收藏, 编辑
摘要:写在前面的很多人在csdn上分享了自己的面试经验,其中笔试值得一提。公司笔试的题目有些比较基础但是又是比较核心的概念。就比如,什么是线程,什么是多线程,什么是进程,什么是多进程,线程和进程有什么区别!!这题目一上眼,脑子中一晃就一个印象:看过很多次了,但是就是说不明白他是什么东西了。线程是进程中的一个单一控制流;一个进程可能完成很大的任务,多线程即一个进程中有多个线程,每个线程完成不同的工作,这样就提高了程序运行的速度。进程是运行中的程序,它是与线程的区别是进程有独立的代码,数据和存储空间,但是线程可以共享数据空间,而每个线程有独立的执行堆栈和程序计数器。概念是很清楚的,非得理解并记住不可,不 阅读全文

从简单的算法初探过程汇编

2012-02-08 17:44 by 捣乱小子, 3344 阅读, 8 推荐, 收藏, 编辑
摘要:不忽视汇编 较于我们日常接触的高级语言,诸如c语言,c++,java等等,汇编语言是更接近机器的语言,它的常用操作简单到把一个数值(立即数,寄存器数或者存储器数据)加载到寄存器,正是这样,所以让汇编完成一个程序任务,过程会比较晦涩;高级语言隐藏了很多的机器细节(比如过程(函数)栈帧的初始化,以及过程结束时栈帧的恢复),代码清晰易懂。 真佩服六七十年代那些大牛们,都是怎么过来的...膜拜膜拜。写一个100以内整数的和,即使有充分的汇编文档,这也足够折腾我一阵子,太恶心了。但是了解汇编的行为方式和其中的一些重要细节,有助于理解计算机软件和硬件的工作方式。我就一个简单的算法来认识一下汇编。过程汇.. 阅读全文

MFC DLEdit 设计属于自己的编辑框

2012-02-04 13:00 by 捣乱小子, 13501 阅读, 2 推荐, 收藏, 编辑
摘要:起因 无意间看到了大牛们写的自定义编辑框控件,于是找了个时间自己写了一个,加深了对MFC消息机制和一些功能的了解。分析 先来看一张QQ2011的登录窗口,发现当鼠标悬停在编辑框上的时候,会有悬停边框高亮,这样给用户一种很绚丽的视觉享受,但我相信大家每天都上q,从而都忽略了这些美丽,细心分析一下,QQ的每一个器官甚至一根毛都是经过精心设计的。当编辑框失去输入焦点,而编辑框内文本为空的时候,会有灰色提示文本,提示用户输入。 还可以有好多的自定编辑框功能,美化我们的编辑框。具体实现和细节 在之前《MFC自动隐藏》这篇文章中的技术细节有与DLEdit相似的地方,那就是鼠标悬停的判断。当鼠标悬停... 阅读全文

MFC 鼠标去留

2012-02-04 11:48 by 捣乱小子, 1504 阅读, 2 推荐, 收藏, 编辑
摘要:题目不醒目,特解 win32编程中,有两个消息比较特别,WM_MOUSEHOVER和WM_MOUSELEAVE。系统不会想应用程序发送这两个消息,MSDN中规定要用到TrackMouseEvent方法来向程序投递这两个消息。去留分析 去WM_MOUSELEAVE,留WM_MOUSEHOVER。打个比方,调用TrackMouseEvent就向在消息队列中设置了一个哨兵,当发现WM_MOUSEHOVER或者WM_MOUSELEAVE的时候,就将其放入消息队列,而此时如果这个消息是WM_MOUSELEAVE这个哨兵会消失,而如果这个消息是WM_MOUSEHOVER,这个哨兵会暂留,但是他只能检测.. 阅读全文

MFC 自定义消息

2012-01-28 15:12 by 捣乱小子, 2812 阅读, 2 推荐, 收藏, 编辑
摘要:WIN32编程回忆在MFC中,听得最多的莫过于“消息”这词,透彻理解MFC的消息机制对学习MFC大有裨益。依稀记得,在纯C的win32编程中,写的最多就是WinMain和win消息处理函数, 我当时有个模板,每每建立一个win32的工程,我就把他复制进去,大概的如下:#include<windows.h>#defineCLSNAME""#defineWNDNAME""LRESULTCALLBACKWindowProc(HWNDhwnd,UINTuMsg,WPARAMwParam,LPARAMlParam);intWINAPIWinMain(H 阅读全文