- 博客(64)
- 收藏
- 关注
原创 我对KM算法的理解
一般对KM算法的描述,基本上可以概括成以下几个步骤:(1) 初始化可行标杆(2) 用匈牙利算法寻找完备匹配(3) 若未找到完备匹配则修改可行标杆(4) 重复(2)(3)直到找到相等子图的完备匹配关于该算法的流程及实施,网上有很多介绍,基本上都是围绕可行标杆如何修改而进行的讨论,至于原理并没有给出深入的探讨。KM算法是用于寻找带权二分图最佳匹配的算法。二分图是...
2012-12-26 15:47:46
2500
原创 一个小题目(单词统计)
今天休息的时候看到一个关于单词统计的小题目:[b]统计一段由字符和和空格组成的字符串中有多少个单词[/b]题目一看觉得很简单,无非是遍历字符串,然后根据字母是不是空格之类的来统计单词的个数。博主用了一个状态机来做这件事,我觉得颇有新意,所以就记下心来了。后面的留言有人觉得博主这是把简单问题复杂化,其实我觉得不然。最近在看《设计模式精解》,开篇作者提出的观点我就觉得非常好:需求总是在...
2012-08-14 23:12:18
245
数独人工解法的一些技巧及其python实现
这段日子实现了十几种数独的解题技巧,说实话,花费的时间比我想象的要长得多。本来说了要看论文的,结果心里痒痒,看着论文,心里想着实现这些解法的基础数据结构等等,于是忍不住小试了一下,一发不可收拾,就这样做了两个星期。中间生了一场病,在宿舍里躺了几天,顺便看了几本书,从《万寿寺》到《红拂夜奔》到《寻找无双》,也不知道是感冒药吃多了比较敏感,还是真的感触太大,有一天晚上看完《红拂夜奔》后,竟失声痛哭起来...
2012-06-13 16:31:41
663
Eva'Sudoku-0.1新鲜出炉啦~~
呵呵,经过将近一个星期的对pygame的了解与熟悉,我终于磕磕绊绊地把数独的基础界面做出来啦。当然啦,完全不出意思的是,很丑,所有的东西都是自己一笔一画画出来的,没有对话框,没有菜单栏,更别提什么精美的画面了。不过我却因此更了解界面编程的实质了。再复杂的界面,底层应该也是这样子画出来的吧?就跟android里面的canvas那样。同时也了解到了一个概念,叫FPS,frame per second,...
2012-05-27 21:06:52
195
产生数独迷题
随着数独解题算法DLX的完成,产生一个数独迷题的任务就顺理成章地完成了。当然,基本的思想还是先生成终盘,然后对填好的数独题进行挖洞,每挖一个洞,就要考虑一下挖去这个洞会不会导致迷题将有多个解。假如会,这个洞就是不能挖的。事实上当一个洞被证实挖去之后会导致多解后,这个洞就注定不能被挖了。也就是说,这个算法的复杂度应该是81*O(f(n)),其中f(n)是用于解一个数独的时间复杂度。《编程之美...
2012-05-24 18:13:59
260
解数独——dancing link X
折腾了一个星期,发现自己的大脑真的是短路了,智力水平下降到历史最低点,竟然折腾了那么久才理解了dancing link。所幸经过几天的反思,终于列出了接下来应该做的几件事:1. 产生数独题:1.1 实现解数独的算法dlx1.2 从数独终盘中随机选择一个cell,判断该cell是否可以挖掉而不会造成解不唯一2. 用pygame实现基本界面今天完成了1.1的编码,借此总结一下。...
2012-05-21 22:59:59
1058
1
总共有多少个数独?
憋屈地看了一个星期的论文,实在是没一点意思。为了娱乐一下自己,兼受同学启发,我决定用python写一个数独游戏。从大二开始装了个ubuntu系统后,就发现了这个有趣的游戏。之后每次进入这个系统,非得先来几局数独;再到后来,为了玩数独,特意进了这个系统。喜欢这个自带的游戏的特点,界面简单,只做必要的错误提示,可以回溯,是我用过的最理想的数独游戏了,呵呵。至于我自己打算做一个数独游戏,纯粹是为了现学现...
2012-05-12 15:31:01
539
原创 《算法引论》之算法分析
上次写博客,已经是半个月之前了。我也不知道我这段日子在干嘛了,没有具体的目标与计划,比较随性,看了几本原本束之高阁的书,包括那本室友推荐,买来后一直搁在床头,不少著名的书里提到的《怎样解题》,以及那本曾经感觉不能理解的《孤独及其所创造的》,还看了一部《中国近代史》,因为还未买到港版,至今还在看小小的手机屏幕。昨夜清风习习,凉意袭人,没有负担,没有烦恼,可以看书看到自然睡,睡觉睡到自然醒,何其的幸福...
2012-04-26 14:01:43
151
编程之美续
看完编程之美后看很多题,都会发现原来只是里面一些题目的变种(也大概因为看的是微软的笔试题吧。。),把原先的算法稍微一改,就变成了题目的解法,还是挺带劲的。[b]1. 反转单向链表:给出单向链表的头指针,要求把链表反转过来。[/b][code="cpp"]struct ListItem{ int value; struct ListItem* next;};L...
2012-04-06 15:37:48
186
编程之美
前段日子又看了编程之美,后来闲着无聊学python去了,想着书将要送人,还是先总结一下,不然怕又要忘了,呵呵。主要看的章节是第二、第三章,因为对数独有特别的感情,所以还顺带看了一四章关于数独的那两节。[b]1. 对于一个字节的无符号整形变量,求其二进制表示中“1”的个数。[/b]最简单的莫过于用/跟%一个位一个位地测试:[code="cpp"]int count( un...
2012-04-02 16:54:09
149
原创 stl中的几个精美算法
关于STL中的算法,我印象比较深刻的主要有用于list的sort、power以及用于random_access_iterator的qsort,list是一种bidirectional_iterator,因此设计了自己的一个sort算法,主要思想是mergesort。首先看一下list中的sort:[code="cpp"]templatevoid list::sort(){...
2012-03-17 18:35:49
208
STL和内存管理技术
前段日子读了STL的源码,大师级的作品真是精致到让人喟叹。当然,有时候你在网上还是可以看到很多对STL的批评,例如,对编译器要求很高,很多时候出错了的话,打印出来的错误信息总是让人摸不着头脑的。这确实是比较头疼的一个问题,因为模板编程,编译的过程总是分为两个部分的,是先要找到相应的模板,然后才对模板进行具现化,有时候单纯从模板来看,似乎很完整,没有什么问题呀,可是一旦投入使用了,才发现找不到合适的...
2012-03-17 16:46:25
260
原创 effective c++ -- 定制new和delete
这一章讲述了C++中的new和delete背后的一些机制,以及重写new和delete需要遵守的一些规则,以及什么时候适合重写new和delete以提高效率。[b]Item 49: 了解new-handler的行为[/b]当operator new无法满足某一内存分配需求时,它会调用一个客户指定的错误处理函数,及new-handler,new-handler可能会为operator n...
2012-02-17 15:23:48
251
原创 effective c++ -- 模板与泛型编程
面向对象提供了运行期的多态,而模板则提供了编译期的多态。模板的编译期多态机制使得函数匹配机制相对于非模板的函数匹配发生了一些变化,也影响了继承体系下的一些声明与设计。本章讲解了模板的编译期多态对我们原先所熟悉的没有模板的世界的一些区别,最后介绍了traits class以及template元编程。[b]Item 41: 了解隐式接口和编译期多态[/b]通常显式接口由函数的签名式(函数名...
2012-02-16 16:21:22
162
原创 effective c++ -- 继承与面向对象设计
继承与面向对象设计中,涉及了继承方式,即public、private及protected继承方式,继承体系中的屏蔽问题,成员函数virtual、non-virtual的选择以及多重继承等。[b]Item 32: 确定你的public继承塑模出is-a关系[/b]以C++进行面向对象编程,最重要的一个规则是:public inheritance意味is-a的关系,于是,基类对象B可以派上...
2012-02-15 18:01:12
230
原创 effective c++ -- 实现
这一章叙述了实现过程中应该考虑的一些问题,例如,太快定义变量可能造成效率上的拖延;过度使用转型可能导致代码变慢又难维护,又招来微妙难解的错误;返回对象“对象内部数据之handle”可能会封装并留给用户虚吊handle;未考虑异常带来的冲击则可能导致资源泄露和数据败坏;过度热心地inlining可能引起代码膨胀;过度耦合则可能导致让人不满意的冗长建置时间。[b]Item 26: 尽可能延后变...
2012-02-14 20:31:36
181
原创 effective c++ -- 设计与声明
本章对良好C++接口的设计与声明提出了一些建议,提供了错误接口可能带来的后患的一些例子。总的来说,良好的设计就是“让接口容易被使用,不容易被误用”。 Item 18: 让接口容易被使用,不容易被误用要做到这一点,首先必须考虑客户(即使用该接口的人)可能做出什么样的错误。例如一个日期class的构造函数:class Date{ public: Date( int mont...
2012-02-13 19:19:56
115
原创 effective c++ -- 资源管理
所谓资源就是,一旦用了它,将来必须还给系统。最常见的资源是动态分配内存,另外常见的资源还有:文件描述器、互斥锁、图形界面中的字形和笔刷、数据库连接、以及网络socket. Item 13: 以对象管理资源该条款背后的思想在于:把资源放进对象内,我们被可以倚赖C++的“析构函数自动调用机制”确保资源被释放。假设如下类及函数:class Investment { ... }; //继承体系...
2012-02-11 18:26:08
135
原创 effective c++ -- 构造/析构/赋值运算
第二章的内容比较简单,基本没有太多深意,从其标题就能想到其内容的那种,所以就只稍微做一下总结吧。 Item 5: 了解C++默认编写并调用哪些函数编译器暗自为class创建的函数(如果用户没有自己声明)包括:default构造函数,copy构造函数,copy assignment操作符以及析构函数。自动生成的default构造函数、析构函数做的事情包括调用base classes和non-...
2012-02-11 16:47:33
135
原创 effective C++ -- 让自己习惯C++
这段时间看了一遍<Effective C++>,从中了解了很多C++特性,以及少量设计模式的基础知识,增加了我阅读C++对象模型及设计模式这两本书的欲望,这确实是一本关于C++的非常好的书。不过正如云风所讲,“总觉得书里讲的太细,太多观点本是好的,只是局限在了 C++ 语言中。明明是 C++ 的缺陷,却让人绞尽心力的回避那些问题,或是以 C++ 独特的方式回避。在别的语言中不该存在的问...
2012-02-11 14:59:49
153
原创 数据结构——2-3树
年前实现了一个2-3树,后来就玩儿去了,再后来看书去了,所以就耽搁了。基本上网上找不到什么2-3树的实现,大概是因为这东西基本真正被用过吧。基于它的思想而发明的B树,B+树才是真正的大头,不过2-3树的模型比较简单,对我们理解B树和B+树的实现有很大的帮助,所以最终我还是通过自己的努力,实现了一个2-3树。下面是2-3树的基本介绍:2-3树不是一种二叉树,但他的形状满足以下性质:(1)一个...
2012-02-10 14:25:30
335
原创 数据结构 -- 二叉树(BST, AVLTree, RBTree, SplayTree)
在《基于树的索引结构介绍》(http://philoscience.iteye.com/admin/blogs/1112759)中提到了二分查找树及其改进版本AVL树(平衡二叉树)。二分查找树比较简单,但是很容易产生不平衡的问题而丧失了二分查找树的优势,AVL树规定了左右孩子树的高度差超过1则为不平衡,为了维持平衡,在插入和删除子节点后,必须进行相应的旋转。还有一种著名的红黑树,红黑树放宽了平衡的...
2012-01-17 21:31:34
432
1
原创 编程珠玑--关于查找(二分法、自组织链、哈希)
查找是我们现实生活中经常需要做的事情。例如用字典查一个英文单词的释意,首先我们会定位到这个单词所在的页,然后再看与该单词关联的解释。这个过程中,单词是key,而单词+单词的释意则是一个record。信息的组织方式很大程度上影响了查找的方法,《编程珠玑》和《数据结构与算法分析》一样,介绍了针对两种信息组织方式的不同的查找方法。首先是链表/数组的线性组织方式。在这种情况下,如果数据是排序的,那么二...
2011-12-31 19:36:11
264
原创 编程珠玑 -- 关于堆
堆是这样一种数据结构,它首先是一棵二叉树,而且还是一棵完全二叉树;其次,对于最小堆,父节点的值小于子节点。有两种特殊要求的二叉树,一种是完全二叉树,一种是满二叉树。完全二叉树添加叶子节点的时候,要求从左到右添加,所以如果左子树没有被填满,就不会把叶子结点添加到右子树上。满二叉树则要求一个节点要么有两个孩子,要么就没有孩子。他们的形状如下: 完全二叉树的性质使我们可以使用一个数组来表达一...
2011-12-28 15:31:25
202
原创 编程珠玑 -- 关于排序
《编程珠玑》主要提到的排序方法是快排,并通过对基本算法思想的微调,以提高效率及保证最坏情况下的性能。我又回过头去看了Clifford A. Shaffer的《数据结构与算法分析》,总结了几种内排序(internal sorting)算法。(所谓的内排序,就是把所有的数据都加载到内存中后再进行排序) 首先是插入排序。插入排序就跟我们平时在排放扑克牌的算法一样。每进来一张排,就从尾到前找,为它找到...
2011-12-27 20:12:39
172
原创 编程珠玑 -- 数据结构?
又开始看《编程珠玑》,发现之前看的也许不是很认真吧,再看一遍的时候竟没有什么似曾相识的感觉。于是便开始做后面的习题了,也许这样能让我对这一章的内容印象更深刻些。第三章介绍了几个案例,说明了数据的组织是如何影响程序的结构的,说到底,就是要设计好的数据结构,以减少编程的量。这一章的内容相对简单,我做了后面两道题:3.7的第1题和第4题,贴在这里了:第一题:double getTax( in...
2011-12-21 21:15:09
138
原创 <tcp/ip详解卷一>阅读笔记(4)——TCP
最后终于来到了大块头TCP协议,为了给应用层提供可靠的传输服务,tcp协议设计了各种机制以实现丢包、重发、乱序、链路传输错误等传输过程中可能出现的错误。 1. TCP协议概述我们首先来看一下TCP协议的首部,它将给收发两端提供怎样的信息:与UDP一样,TCP报头的前8个字节也是源和目的端的端口号。<源ip地址,源端口号,目的ip地址,目的端口号>(即一个socket pai...
2011-12-05 15:21:56
139
原创 <tcp/ip详解卷一>阅读笔记(3)——IP层的分用(UDP和IGMP)
这一次将总结IP层的分用中的UDP与IGMP。UDP是一个简单的面向数据报的运输层协议,它提供不可靠服务:它把应用程序的数据加上UDP头部之后就传递给IP层发送出去,但是并不能保证它们能到达目的地。应用程序必须关心IP数据报的长度,如果它超过网络的MTU,那么就要对IP数据报进行分片。如果需要,源端到目的端之间的每个网络都要进行分片,并不只是发送端主机连接第一个网络才这样做。IGMP是一种支持主机...
2011-12-04 17:57:24
220
原创 <tcp/ip详解卷一>阅读笔记(2)——IP层的分用(ICMP)
这一次将从ip首部中的“协议”字段的分用说开来。前面的图中我们可以看到,所有的TCP、UDP、ICMP及IGMP数据都以ip数据报格式传输。TCP段、UDP数据报文将交付到上一层即应用层,而ICMP及IGMP报文则由tcp/ip协议模块处理,不会支付到用户应用层。1. ICMP:Internet控制报文协议ICMP报文是在ip数据报内部被传输的,除去ip首部,其基本格式如下:有些icm...
2011-12-04 15:23:27
172
原创 <tcp/ip详解卷一>阅读笔记(1)— 以太网帧及其分用
这段日子看了《Tcp/ip详解》的卷一, 这本书最大的特点在于通过使用tcpdump程序捕获各种网络包,从而让我们确切的了解网络各个层中的协议以及算法。下图是这本书中讲讨论到的协议以及其所在的层次。1. tcp/ip协议网络层次结构 上图左侧是数据包在各个网络层的状态,右侧是数据包在各个网络层的传递。其中,以太网口通过以太网地址来决定丢弃还是交付通过以太网口的数据包(此时称为以太网帧);以...
2011-12-02 11:38:24
337
原创 算法引论——数学归纳法
原来我已经有两个月没有更新博客了。这段时间写了篇论文,做了个app,其间还生了一场病。现在论文还没发表,app的界面也还在等着老弟继续支援,不过应该下个月就能发布了。原本很有冲劲的,突然间感觉累了,所以还是看书了。 忘了是哪个牛人推荐的《算法引论》(Introduction to Algorithm, A creative approach)了,两个月前借的书,续借了一次,到现在才终于有幸...
2011-10-29 12:09:01
322
原创 C++ premier -- 内存管理与RTTI
第18章对于没有多少项目经验的我来说有些东西还真的是不知道实际应该如何应用,这些都涉及设计吧我想。看完这一篇,体会比较深的是内存管理和运行时类型识别,其他的包括类成员指针、嵌套类、局部类、联合等,看完只能说,知道了有这么回事,呵呵。创建对象一般涉及两个过程,一是分配内存,然后构造对象,这两者相互纠缠在一起,就像对象析构和回收内存一样。构造对象指的是运行构造函数,包括对数据成员进行赋值;析构对象...
2011-09-08 17:07:36
141
原创 C++ premier -- 异常、命名空间以及多重继承
放了两个星期的暑假,回来久久不能进入状态。也或许是这一章对编程经验的要求远高于我目前的水平,很难静下心来看下去。总结也可能会因此做得很不到位。Anyway,有些东西就先记在这里吧。第17章起就是高级主题了,主要涉及大型程序中使用的工具,包括异常的使用、命名空间以及多重继承。 1.异常通过异常我们可以将问题的检测和问题的解决分享,这样程序的问题检测部分可以不必了解如何处理问题。1.1...
2011-09-06 19:45:26
219
原创 C++ premier -- 模板与泛型编程
所谓泛型编程就是以独立于任何特定类型的方式编写代码,使用泛型程序时,我们需要提供具体程序实例所操作的类型或值。泛型编程与面向对象编程一样,都依赖于某种形式的多态性。模板是泛型编程的基础,模板是创建类或函数的蓝图或公式。例如标准库定义了一个类模板,该模板定义了vector的含义,vector是用于装载同种类型的元素的容器,装载的对象是多态的,vector<int>装有很多int元素,ve...
2011-08-11 16:06:16
237
原创 c++ premier -- 面向对象编程
显然,我从前对面向对象编程的理解是有失偏颇的。我以前常常觉得,面向对象编程无非就是从整体的角度出发,定义一些对象,以及对象的操作,通过它们的协力合作完成一件事情。可是,这中间忽略了面向对象编程的一个关键思想,即——多态性。通过折腾了他最后提供的一个实例,算是对这一章节的东西有了些了解。但是在设计层面上,我觉得自己还没有办法想到那里去。 与多态性紧密相关的两个概念,一个是继承,一个是动态绑定。一、继...
2011-08-09 20:45:09
209
原创 c++ premier -- 复制控制与重载操作符
第十三、十四章主要讲了复制控制与操作符重载的相关内容。同时也提供了一些例子说明在某些情况下必须使用以及如何使用自定义的复制控制。复制构造函数是一种特殊的构造函数,它接受该类类型的引用作为其形参。当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式使用复制构造函数,当将该类型的对象传递给函数或从函数返回该类型的对象时,将隐式使用复制构造函数。析构函数是构造函数的互补,当对象超出作用域...
2011-08-09 15:48:45
126
原创 C++ premier -- 类
自认为学过c++的我,看过《c++ premier》的第十二章“类”后,不禁感到汗颜,很多关于类的特性我几乎都一无所知,还常常跟java混为一谈。折腾了一天,修改了多次,才算最终把一些问题搞清楚了。呵呵,现在我还不好意思说自己搞清楚了,谁知道还有多少我不知道的呢!所以真的是要stay foolish, stay hungry啊,很多问题并不是我们以为的那么显而易见的。 1. 类的声明与定义...
2011-08-05 19:42:39
536
原创 C++ STL 学习总结
看完《C++ premier》的第二部分,容器和算法,算是对C++中的STL有了一定的了解。总结起来,这里面涉及的主要概念有:容器、迭代器、适配器以及算法。一、容器容器容纳特定类型的对象的集合,例如一组整数,一组自定义类SalesItem。有些容器元素按照插入的顺序存放,读取元素时,可以利用存放顺序查找到它,这总容器称为顺序容器;有些容器元素在插入到容器中时,会给一个便于索引的键值,读取元...
2011-08-04 16:01:17
129
原创 c++ premier -- 容器
呵呵,两个星期没有更新博客了。这两个星期基本一心一意都在做实验室的事,现在终于把算法写完了,测试效果也不错,总算有了自己原创的算法出来。不负我两个星期望着c++ premier却不敢翻开来看。今天早上把容器这两章给看了,我想整理一下,然后自己把它后面的综合应用给实现了。看完这一part就开始进入类方面的设计了,其实看这本书的目的就是要看类,然后实现一些数据结构。只剩两个星期了,希望能把这个目标完...
2011-08-01 15:38:59
255
原创 c++ premier -- 标准IO库
C++的输入输出由标准库提供。标准库定义了一族类型,支持对文件和控制窗口等设备的读写,还定义了其他一些类型,使string对象能够像文件一样操作,从而使我们无须IO就能实现数据与字符之间的转换。IO类型在三个独立的头文件中定义,iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,而sstream所定义的类型则用于读写存储在内存中的stream对象。首先看一下各个类之间的...
2011-07-18 10:33:39
276
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人