随笔分类 - 编程思想
编程不只是写代码,更是一种精神。一种态度。你对待代码的态度,决定你未来能达到的高度。你对编程的理解,决定你的代码的质量。
摘要:chain33 诞生记 很多年没有写博客了,应该说,自从2013年开始玩比特币,就没有写过了。这5年来,做了很多事情,也见了很多以前做梦都没有想到过都事情。我做的最开心的事情,也是觉得最有意义的事情,就是负责开发了一个区块链开发框架 chain33 ,目前这个框架已经在 github 上开源,开源地
阅读全文
摘要:如果你有过装修,或者家里造房子的经历,你会发现,大多数“技术工人”都是半瓶水,让你满意的人实在是凤毛麟角。就算你要找一个很有责任感的,不需要你去监督,做事情精益求精的人都基本上没有。 你或许在装修,并正在抱怨那样的技术工人。但是,你的老板或许也同样的在抱怨你:只有半瓶水,还吹牛吹的不行。当,没有人监督,没有项目任务的时候,你就开小差,偷懒,做事情,也都是在赶进度,凑合,蒙混过关就行。 我想,这或许就是技术工人吧,我们的工作实际上没有什么创造性, 所以,当我们工作很多年,也就不再有激情了,变成江湖小混混了。你可以学会N种编程语言,学会怎么更好的组织代码,学会如何在unix上写代码,只要...
阅读全文
摘要:字符串,我现在正在写的就是一个字符串。我们的源代码就是一个字符串,计算机科学里面,一大部分问题都是字符串处理的问题。比如,编译器,就是一个字符串处理程序。还有,搜索引擎,也在处理一个字符串问题。数据库,最难处理的还是字符串部分。索引,一般是一种预处理的中间程序。在我们写代码的时候,往往需要对一个对象进行预处理。这个预处理时间可能比较长,但是,处理完了以后,就能很快的多次的在上面进行查询。比如,你要在一组数里面进行查找,可能先要进行排序,这样速度就会快一些, 排序可以看做是建立索引的一个过程。 字符串的全文索引,怎么样才能非常的省空间,查找速度也还可以,我这里介绍一种数据结构,叫做后缀数组。 .
阅读全文
摘要:今天有个人问我如何判断一棵树是完全二叉树。我一下子想不出怎么解决这个问题,按照定义,严蔚敏那本教材上的说法:一个深度为k,节点个数为 2^k - 1 的二叉树为满二叉树。这个概念很好理解,就是一棵树,深度为k,并且没有空位。首先对满二叉树按照广度优先遍历(从左到右)的顺序进行编号。一颗深度为k二叉树,有n个节点,然后,也对这棵树进行编号,如果所有的编号都和满二叉树对应,那么这棵树是完全二叉树。 概...
阅读全文
摘要: .NET程序员,大多数时候是不需要数学的。因为,有了.NET, 数据结构和算法的重要性被弱化了,操作系统接口相关的东西被强化了。程序员只要求管理好代码,而不是设计好算法。 计算机,我只学会了技术,所以很多问题我都感觉似是而非,感觉是在学习一个API,而不是在学一门科学。 最近要实现一个哈希表,...
阅读全文
摘要:注意:每个层次的知识都是渐增的,位于层次n,也蕴涵了你需了解所有低于层次n的知识。 计算机科学 Computer Science 2n (Level 0) n2 (Level 1) n (Level 2) log(n) (Level 3) Comments 数据结构 不知道数组和链表的差异 能够解释和使用数组,链表,字典等,并且能够用于实际的编程任务。 了解基本数据结构时间和空间的折中,比如数组v...
阅读全文
摘要:软件表示的是一种现实的关系,关系往往错综复杂,但是,有时内涵却是一样的。万事万物虽然形态各异,但是,宏观机械运动都符合牛顿运动定律。这种事物深层的内在联系有时候是不容易被发现的。而且,在你的软件中,很有可能没有这样统一的定律。所以,构建一个代码的世界,更像是建筑师构筑一个大厦,而不是科学家发现定律。但,就像建筑师需要力学知识 和美学知识,学习软件的人,也需要一些基本的定律和原则构建这样的大厦。建筑...
阅读全文
摘要:前几天看博客的时候,发现有人发了一个解决爱因斯坦的谜题的文章。http://www.cnblogs.com/yefanqiu/archive/2009/09/27/1575326.html我也很感兴趣,就去查了一下相关的英文资料。大多数的解法是这样的:用一个表格列出五个空房间,然后,在这五个空房间里面依次填入条件的内容,如下:House 1 2 3 4 5 Colour ? Blue ? ? ? ...
阅读全文
摘要:今天在博客园看了 一个开源的分词 软件 “盘古分词”。下载下来后,发现是vs 2008 版本的,花了点时间转换成 2005格式的版本。编译了以后,跟踪了一下代码,代码应该是高手写的,非常的清晰。只是因为没有文档,时间有限,不能深入研究它的算法。基本的算法是这样的:比如句子:“盘古分词 简介: 盘古分词 是由eaglet 开发的一款基于字典的中英文分词组件R...
阅读全文
摘要:Tiobe 公布的 编程语言流行度排行榜出来了。 PHP 的流行度 首次 超过 了 C++。这个流行度的计算方法是 根据美国 主要使用某种编程语言的工程师数量,以及学校的课程数目,外包公司提供某种语言服务的数量。还有就是 Google, MSN, Yahoo!, Wikipedia and YouTube 这五个网站的 相关关键字的请求数目。在开发要求非常高效的程序时,一般选择纯C 而不是C++。...
阅读全文
摘要:写软件,很多时候都让我感觉很矛盾,经常顾此失彼。写的太灵活了,项目时间不够,写的不灵活,客户一反馈,改的又很惨。以前想看看什么设计模式的,可是,看不太懂,感觉懂了,也不知道怎么用。复习复习了什么软件工程,什么瀑布模型,简直就不太搭边。最近写了一个中文分词系统,里面我懂了不少东西,希望和大家分享。 这个分词系统,和普通的分词系统差不多。就是一篇文章,用一定的算法把词切开了,还有可能要计算关键字,词频...
阅读全文
摘要:根据2元统计语言模型,最优可能的一种划分s1,s2,..sn 满足下面的值最大:P(s) = max(p(s1) * p(s2|s1)* ... * p(sn|sn-1);一般两边取对数 lnp(s) = max(ln(p(s1)) + ln(p(s2|s1)) + ... + ln(p(sn|sn-1)))那么一条路径的长度为:wi = ln(p(si|si-1))但是,在中科院分词系统的源代码...
阅读全文
摘要:隐性马尔可夫链我是学理科出身的程序员,一直做web,复杂的算法基本上很少用到。最近做了一个自然语言处理相关的项目,我把我的一些理解和大家分享一下。1. 首先来说一下马尔科夫链。一个事件序列发生的概率可以用下面的概率论里面的乘法公式展开P(w1,w2,…wn) = P(w1)P(w2|w1)P(w3| w1 w2)…P(wn|w1 w2…wn-1)乘法公式的证明非...
阅读全文
摘要:在这个世界中,复杂的问题都要转换为简单的东西来解决。因为很显然,我们的思维只能理解最简单的东西,而复杂的思维实际上只是简单的步骤的叠加。这一点,在数学种最明显,无论怎么复杂的证明,都可以归结为一个简单的逻辑,而困难在于把这些简单的东西窜连起来。
阅读全文
摘要:这段时间,我一直在思考如何学习更加的有效。
以前的时候,我几乎是这样的,对自己感兴趣的东西,我会走马观花的看很多相关的东西,也许知道很多东西,但是没有掌握本质。一个东西的基本原理还是不知道,或者不能深入的理解这些最基本的东西。
阅读全文
摘要:对于一个非计算机科学专业出身的人来说,对计算机这门科学的总体感觉就是不成熟。我是物理学出身的,物理学是一门经过几千年发展出来的一门科学,每个理论都有一个严格的证明,同时有很多实验来验证这个理论。这个理论一旦成为一个物理学的理论,那几乎是可以在任何地方应用的。用计算机的术语来说,它的重用性很高。
阅读全文
摘要:最近空闲的时间学了一下游戏编程,感觉还是很有意思。看了很多代码后才发现很多东西的不变的:
1. 对操作系统的了解:不了解操作系统也可以编程序,但是,也许在效率上也许会有点的偏差。
同时对线程的理解也是编好游戏的关键。
阅读全文
摘要: 在大学里面,计算机专业的人都学过c语言版本的数据结构,本来数据结构的事项与算法都是很简单的几句话,当时用c写出来就会一大堆,特别是边界条件,特殊情况考虑的比较全的时候,我们会发现c的表达能力其实不是很好。
阅读全文