随笔分类 -  算法与思路

摘要:interface IState { string Name { get; set; } //后件处理 IList Nexts { get; set; } Func Selector { get; set; } } class State : IState { pu... 阅读全文
posted @ 2017-02-02 20:45 诺贝尔 阅读(1428) 评论(0) 推荐(0) 编辑
摘要:有很多人有个盲点,就是只看到结果,没有看到过程,更没有看到前提。要完整的看问题,就要细心的把前提条件给写出来。这个很重要。如快速排序的效率是 n* log2(n),前提条件是什么,是这个排序的内容是不限定的,平凡的。而现实中我们遇到很多问题,都是特殊的,因而可以有优化的余地。 阅读全文
posted @ 2015-10-19 15:43 诺贝尔 阅读(528) 评论(0) 推荐(0) 编辑
摘要:看到很多人喜欢写注释,当然也有很多人不喜欢写。很多人喜欢写复杂的文档,甚至做了漂亮的图片来说明问题,花了相当大的精力去文档上面。为什么?写文档又不能运行,对不?写文档的作用我想主要是用来整理思路。人类的智力有限,尤其是记忆力有限,因此需要很多外部存储体来帮助我们缓冲“中间数据”。那些精心制作的文档,看上去好像没啥作用,纯浪费精力,但是如果没有这些精美清晰的文档,你的思路会一团糟,结果花了更多时间在debug之上。做文档的人都是聪明人,任何时候,写文档都比写程序要容易得多,因为文档可以容错,格式可以自由。文档也有一个要求,那就是你对编码要有信心,如果你写得文档和编码能力差太远,根本无法实现文档描 阅读全文
posted @ 2013-04-13 10:16 诺贝尔 阅读(972) 评论(0) 推荐(1) 编辑
摘要:lambda是匿名函数,因为没有名字,也没有关键字引用自身,因此递归的编码就成了问题。一、最简单有效的方案是:Func<int,int> f =null; //变量须先赋值才能使用f = n=> n==0?1:n*f(n-1);f(11); //==39916800有人担心f会被恶意修改,因为就是一个委托变量,而且认为f是委托,而不是匿名函数自身,所以不算匿名函数递归。我觉得,虽然是委托,但是引用的就是匿名函数,函数指针调用的函数难道不是函数自身吗?二、要避免变量被恶意修改,方案是:Func<int,int> f = null;f = n =>{Func&l 阅读全文
posted @ 2013-04-10 23:58 诺贝尔 阅读(2098) 评论(2) 推荐(1) 编辑
摘要:映射是一个很简单很实用的数学技巧,用得好经常能达到清晰明了的效果。其中,映射到整数是经常用到的。映射简单的离散量比较平凡,如果映射能结合序列可以做到很不一般的效果。比如最近做过的一道题目:1000瓶水,其中一瓶有毒,小白鼠喝了一个星期死亡,要多少只小白鼠才能在一个星期内找到这瓶水?思路一、1000瓶水映射到小白鼠,大概就要1000个吧,死哪个老鼠,自然知道是哪一瓶水。思路二、以上映射做得很基础,得到的答案虽然是对的,但答案比题目要求的要多很多信息。题目要求知道那一瓶水有毒,需要知道的是一瓶的情况,而不是1000瓶的状态是有毒还是没毒的。这里面没有充分利用“只有一瓶有毒”这个信息。要知道哪一瓶有 阅读全文
posted @ 2013-04-08 00:26 诺贝尔 阅读(625) 评论(0) 推荐(0) 编辑
摘要:人类的智慧有时候并不高,很容易被误导。 对于一些数学问题,往往搞错了对象,没有抓住关系作用的主体是什么。这并非是数学问题,而是语文问题。 其实计算,公式都是很简单的数学,错误的关键是搞错了主体,想当然的乱套对象,结果当然是错的。 比如:小明是小红的两倍高,小红50厘米,小军身高多少?很多小学生就50*2. 或者:小红是小明的两倍高,小红50厘米,小明升高多少?很多小学生也是50*2. 没... 阅读全文
posted @ 2013-02-17 22:55 诺贝尔 阅读(545) 评论(0) 推荐(0) 编辑
摘要:以前,我老想弄一个计数法的智能指针管理内存对象,但是无论无何都无法解决引用循环的问题。最近有一个思路和大家分享:对象的过程是:创建、使用、释放。自动内存管理的思路基于:当无(外部)引用的时候,自动释放对象(或对象环)。也就是着眼于创建和释放这两点。而事实上,对象释放的时机并非是没有引用,而是不再使用的时候。当一个对象有n个引用,但是已经不再使用了,那么它一样应该释放,而不是等这些持有引用的对象自然消亡。为何要自动管理内存,是为了防止程序员忘掉释放。虽然当无引用的时候确实符合释放的条件,但是不是严格的条件。如果能够找到不再使用的点去释放,这样就无需关注是否还有引用。我的想法是做一个关联表。某个对 阅读全文
posted @ 2013-01-25 14:03 诺贝尔 阅读(229) 评论(0) 推荐(0) 编辑
摘要:算法是问题的分步骤解决的方法。分而治之的思想是:有很多问题,可以划分为多个小问题,而小问题本身是易于解决的,那么就通过找到”划分方法“,得到小问题后,最终解决原问题。一、是否所有问题都能划分成小问题?比如1+1=?可以划分么?不行。因此并不是所有问题都能够划分。二、怎样的问题能够划分?和规模n相关的,可以划分成每一个节点,或者某一小段,形成可以直观解决的小问题。就如一条长的线段,分成若干定长的小段,进而解决所有问题。如,一个平面,可以划分为若干小区域,也是一样的道理。只要具备规模性,不是原子性的问题,都能够划分成小的问题。三、划分的方式有什么分别?我觉得有三种划分问题的方法,第一种,是根据问题 阅读全文
posted @ 2012-11-29 14:17 诺贝尔 阅读(3187) 评论(0) 推荐(0) 编辑
摘要:比起知识,我们更要重视思维本身。1.抽象抽象是人类最擅长的一种思维方法,具体的做法是把一件事复杂的细节过滤掉,留下有意义的部分。世界上有不同的事情,可以说每一件事都有不同之处,如果什么我们都要经历过,学会解决,那么我们什么都解决不了。因此,人类之所以那么聪明,最关键的一点是我们懂得过滤掉事情的细节,而剩下的部分和我们以往所经历的是相同的,所以我们可以依赖以往的经验去解决这件事情。抽象的方法很简单,重点在于你是如何去抽象的,如何去过滤掉细节,也就是那些是细节,那些是本质,这依赖于知识和经验。2.类比和映射两件不同的事情,通过抽象之后,就会得出比较类似的结构,有时候是刚好一样,所以我们可以直接用其 阅读全文
posted @ 2012-01-14 20:29 诺贝尔 阅读(1042) 评论(0) 推荐(0) 编辑
摘要:本文探讨资本的多少对胜率有无影响。猜AB面游戏,A概率1/2,B的概率也是1/2. 研究100块钱和200块钱的胜率是否一致。基础:一、在任何一轮赌A或B概率都是一致的。研究一(只猜B):第一轮:A :1/2第二轮:AA:1/4第三轮:AAA:1/8假设我三轮都投入10块钱,那么三盘都输,也就是输30块的概率是1/8.输10块是3/8。假设我第一轮投入5块,第二轮10块,第三轮15块,输30块的概率是1/8,AAB平的概率是1/8.ABA输10块概率是1/8,BAA输20概率是1/8.研究结果不同赌钱方式无法改变整体概率,但是可以把事件多样化。研究二:先投入一个基本数,假如不中就加倍投入,假如 阅读全文
posted @ 2011-06-29 00:15 诺贝尔 阅读(341) 评论(0) 推荐(0) 编辑
摘要:我在想,算法那么多,是否存在一种共同的性质。比如贪心算法,就是整体中找出一个部分,这个部分的最优解将组成整体的最优解。比如1 到 100的和,我们抽取1到10为一部分,他的和也是最终和的一部分。不知道这算不是贪心算法?找1.。。100中能被3整除的数,也符合这个。找1.。。100中有多少组和等于100的数。这个就不能随便分割了。如果随机抽取两个数来判断,这样会产生非常庞大的组合。这是最低效的算法。第二种方法,可以通过代数式100-a=b这个方法,顺序抽取一个数,判断另一个数是否在集合中。第三种方法,通过数学公式(100-1)/2取整。可以看出:对数据假设的不同有很大的不同。如果是排序的,并且是 阅读全文
posted @ 2011-06-07 13:52 诺贝尔 阅读(711) 评论(0) 推荐(0) 编辑
摘要:数据结构是什么?数据和结构有什么关系?数据结构首先要定义两个东西,一个是数据,一个是结构.数据是一组有意义的信息.把数据作为信息单元.结构,就是信息单元和信息单元之间的构成关系.构成关系以最抽象的形式表达:对应关系: 一对一,一对多,多对多.顺序关系: A –> B, B->A数据结构就是把信息单元组成结构的一种方法论.常见的数据结构有:一对一,(队列): 1,2,3,4,5...按照内容有序性,可分为有序队列还是无序队列.按照顺序可以分为单向和双向.按照不同的映射方法,可以分为位置映射,指针映射,函数映射.一对多(树型结构): 1->(2,3)->((4,5),(6, 阅读全文
posted @ 2011-04-30 18:17 诺贝尔 阅读(1011) 评论(0) 推荐(0) 编辑
摘要:我是一个学过一点c++语言的人。在c++中,没有自动内存管理,却有很多可以值得借鉴的思路。我认为一个内存,申请了,却不用,然后,不用了,却不释放,都是一种资源浪费,而不是说,程序最终都会在某一个时刻回收释放就叫防止内存泄漏了。就算有一小部分内存我是永远都用不上,泄露了,而相对有大部分内存不能好好利用上,那个更加不合理?因此,内存泄露是很广义的,程序应该协调好,提高内存利用才是正道。.net框架的内存管理问题,在于对释放点的不确定,宏观的管理有时候是好的,但是程序往往有局部性,对细颗粒的控制往往是稳定性和性能的关键。至于如何提高这些内存的利用率,我觉得还是c++那套实在,什么时候用,什么时候申请 阅读全文
posted @ 2010-02-08 13:27 诺贝尔 阅读(281) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示