Link: https://informationalmind.appspot.com/2013/04/5/HoleFiller.html


简短故事版

话说,有一种培训机构,当学员达到了规定要求时,会给予某种证明。要求说起来也不多,需要写两个简版的有创新的方法的说明书,并且最后还要写一个完整版。有一个即将达到进修年限的学员,两个说明书写完了,但是说明书里的方法自己并没有去实现,为了让最后的完整版说明书有一个能演示的东西,需要搞出来一个演示用的程序。但是这时候已经离最后的期限很近了,这位学员在这么短的时间内不够完成演示程序,这位学员的指导者急了,就找来了另一位善于制造程序的新一届的学员帮忙,帮忙的学员答应了。这就是故事的开始。

帮忙者看了他的说明书,准备按照说明书上的方法去做,但是,说明书上的方法在模型上就建错了,造成了整个方法就不可行。没办法,既然都答应了指导者帮助这位学员,就只能自己想新的办法去实现说明书上要做的事情。经过了不到两周的思考与尝试,帮忙者发明并实现了一个说明书上要做的事情的程序,结果指导者说这个只是验证了输入是否可行,但并没有给出一个可行的方案,给出一个方案还是需要的。没办法,帮忙者只好继续想这个问题。但验证输入是否可行是一回事,给出一个可行的方案完全是一个更复杂的事情了,要实现这个,不仅需要那位学员的第一篇说明书里的一个方法做基础,还需要处理如何给出解决方案这个大问题。这不直接就多了两个问题了要解决了?好吧,帮忙者让那位学员自己去实现自己第一篇说明书里的方法,自己去想如何找出一个可行的方案的方法。又经过了不到两周的思考与尝试,帮忙者又发明并实现了新的方法,满足了指导者的要求,在判定了输入是否可行的基础上,又给出了一个可行的方案。

前前后后一共三周多,帮忙者重新发明并实现了两个方法去解决那位学员写的说明书里不可行的方法要解决的问题。

嗯,这么来看,帮忙者如果自己把这两个方法写成说明书,是不是就达到了这个培训机构的要求,可以获取证明了吧?那那位学员呢,算什么情况?指导者呢?

完整叙事版

(事先声明,此文为发泄文,各种表达必然各种夸张,请各位自行做降级处理。我现在已经很平静了。)

硕士毕业要发论文,还要写毕业论文。当然,论文里的方法没有说必须要实现,但是为了以后的工作,写了论文不实现实在是在挖大坑。我的一位师兄,写了两篇论文,都没有实现,该毕业了,为了方便写论文中的实验数据,也为了以后的工作,还是要把这个大坑填一下的。但是距离最后的答辩只有不到一个月的时间了。于是导师就叫我去帮忙实现一下最后那篇论文的算法,理由是怕其他学生搞不定。

于是,我就开始了帮人填坑之旅。

帮师兄实现第二篇论文,自然要先理解其算法。这篇论文大概是描述了一种自动判定单面的电路板上的连线是否可以平面化,也就是说那些连线能否不相交的在一个面上全部画出来。但是理解其算法的过程中,发现其算法看上去好像可以,但是仔细想了之后,发现其模型就建立错了,导致整个方法的不可行。没办法,只好重新发明新的方法了。经过了一个近星期的思考,想出来了个思路上还算简单,但细节很多的方法,并用cpp实现之。不过只是实现了一个是否可平面化的判定,但没有给出一个平面化的解。更是没有生成图形输出。

没有图形输出自然是没法直接用的,于是导师让继续把结果画出来。而画出来结果,不仅需要判断是否可平面化,还要给出一个平面化的解,所以我得再发明一个平面化的算法。而给出这个解,还要用到师兄的第一篇论文的一个算法作为一个函数。他的第一篇论文的算法是在电路板上把两个点连起来。听起来做的事情挺简单,但实际上去做的话,各种细节毛毛多。于是让师兄自己去实现他自己的第一篇论文,我去发明新的方法。我对这个领域完全没有接触过,也不知道有没有什么现成的算法,不过师兄说他没找到。为了帮个忙再去学习一个领域这种事情我肯定是不会去干的,所以就凭空想方法吧。一开始实在是没有思路,但导师说哪怕没方法,也要先随便画出来一个结果,哪怕有相交的线。于是就想不管是否相交,先把线都画出来。就开始动手编码了。写的过程中,我咨询了一下zzz大神,大神的一句话提醒了我,我想到了一个可行的方法了,虽然结果会比较难看,但至少是对的了。于是之前写的代码全部废掉了,重新写。

结果要画出来,并且还要用到一个判断任意多边形是否相互包含的算法,自己实现太麻烦,就像到了借用.net库里的一个现成的函数。但是新的问题又来了,原有的代码是cpp的,我实在是不想再用cs重写一遍了,所以就开始捣鼓如何用cpp的本地代码调用托管代码。而且cpp.net没有System.Drawing,只好用cs工程封装一个delegate传过去了。由于之前没接触过.net的System.Runtime.InteropServices,就想先绕开这个东西,看能不能搞成cpp.net,然后在本地代码中来调用托管代码。经过了几天的折腾,又摸熟了各种cpp.net的语法与设定,算是搞出来了个方法。当然,很傻逼的方法。师兄那边自己也没有实现自己的算法,而是去网上找了个离散点阵的寻路算法,直接改了一下就用了。也行,至少凑合着能用,就这样吧。经过最后的修改、装配和短暂的调试,搞定了,虽然还有些情况没有处理到,但是就这样吧,反正这代码以后估计也不会有人去用了,也不想再去花那么多时间去解决遗留的那个复杂度貌似为NP问题了。

就这样,前后共三周多的时间,我重新发明并实现了两个算法,部分解决了师兄搞的论文里想要解决但未遂的问题。

祝愿师兄能顺利毕业。

尾声

我已经无力吐槽了。

posted on 2013-04-11 01:51  ? ? ?  阅读(174)  评论(0编辑  收藏  举报