庖丁解羊----划分

原创 2001年08月24日 09:02:00

庖丁解羊<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

                            ----闲谈编程思想

作者:HolyFire

经过多年的编程,我发现编程的思想对一个程序员是至关重要的,以前拿到一个问题,马上就开始考虑如何来一点一点把他用代码来实现,于是啃啊啃啊于愁眉笼罩千辛万苦下每完成了一点就欣喜若狂。编着编着发现这里不足,那里没考虑到于是东补补西凑凑,异常蹩脚的完成了一个小程序,当时的感觉就像我完成了全世界,或许那个时代是我最开心的。

完成了四五个程序的我,开始发现我做了很多重复的劳动,于是乎开始做我的程序库,编写功能型模块。想到了这些模块只要写一遍就可以受用无穷不禁得意洋洋,或许那个时代我是聪明。

当我写了五六千行代码的时候,我发现我写的功能模块已经记不清什么是干什么的了,而我已经习惯使用别人写的比我好的模块时,我开始迷茫,我做的一切究竟是为了什么。这时我开始研究别人的代码,开始懂得什么是优化,什么是数据结构,什么是数学建模,我开始研究应用数学和软件工程。这时我开始使用C++用类来写程序,或许那个年代我是明智的。

当我写了四五十个*.h*.cpp后,开始发现我写的类一点都不通用,无法再利用。我开始深入学习类以及面向对象,明白了继承和封装,这时的我才开始深深思考什么是重要的,于是我开始分析问题而不是一上手就开始编代码。或许以前的我是个傻瓜^_^

我足足花了三年多的时间来浪费我的青春做了别人仅需一年的事情(当然着三年中我积累的经验不可能是一年能做到的,但是对于编程上的修养,我浪费的时间已太多),如果你们没有意识到这点,或许也会浪费很多时间。

分析能力对一个程序员来说是一个重要的属性,它直接关系到你对事物的理解能力和组织能力,程序员做的工作就是将一个事物分解成数学元素然后重新组织在计算机里重现,所以如何处理事物是个要点。

我们了解一个事物并进行描述的时候,往往是先处理它的一部分,接着处理另一部分,然后等所有的部分都处理完的时候,具体的事物就重现了。比如给一个不知道山羊的人介绍山羊,如果你对他说山羊就是山羊,他是无论如何都不会明白的。如果你说山羊是一种有四只脚的脑袋上有两只角,还有短短的尾巴,那他模模糊糊会有些形象在脑海里了,如果加上有绒绒的毛,可笑的胡子,咩咩的叫的食草动物,至少他不会和牛混淆起来,如果你能描述的更详细更好,那他有九成知道山羊是什么样子了,当他看见山羊的时候就会立刻明白。对于什么都不懂得计算机你不用说明什么,但是要是别人或者几年以后的你自己能看明白你的文档,详细的说明是必须的。而从上面的过程看来,将事物分成小块来处理是个好办法,我们把这个过程叫做划分。当然划分是可以继续下去,将划分的小块继续划分直到不能划分为止。当然要对一只山羊划分需要一个对山羊有着全面了解的人,所以划分你的问题的时候要对问题有全面的了解。看上去这对一个还没有了解这个问题的人是一个矛盾,划分一个事物有助于了解这个事物而要很好的划分却需要对事物充分的了解。于是我们要有所改变,要改变的是我们的做法。我们先粗略的了解问题,然后粗略的划分一下,将划分的模块再粗略的了解一下,然后将它粗略的划分,等到都成为不可划分的小块时,我们再来组织它。而且这个时候,我们对问题已经有全面的了解了,这时候我们将小块的重复部分扔掉(一般一定会有重复的部分),然后将这些小块重新将问题组合起来,想一下将一只大卸八块的山羊组合起来,哈哈,一定是活不过来了,不过有羊肉吃也不错。如果你很顺利的组合起来了,表示你很好的划分了这个问题而且了解的很透彻,以后的事将会一帆风顺,你这时脑袋里一定充满了解决这个问题的方案,已经跃跃欲试了。不要急,聪明的人会仔细的将划分的过程多看几遍,重组的方法多试几种,这不但对以后和编程有好处,也是更好解决方案的起点。

现在我们来解剖一只山羊,如果你愿意还可以细分,动物爱好者请回避。

山羊

-> 脑袋

-> 躯体

-> 四肢

-> 尾部

脑袋

躯体

四肢

尾部

-> 五官

->  

-> 两只前肢

-> 尾巴

-> 胡子

->  

-> 两只后肢

-> 绒毛

-> 绒毛

->  

 

-> 骨架

-> 骨架

-> 内脏

 

 

 

-> 绒毛

 

 

 

-> 骨架

 

 

五官

-> 耳朵

-> 眼睛

-> 鼻子

-> 嘴巴

内脏

->

->

->

->

->

->

->

前肢

后肢

->  

->  

-> 绒毛

-> 绒毛

-> 骨架

-> 骨架

最后我们得到的是:

山羊 脑袋 躯体 四肢 尾部 脑袋 五官 胡子 绒毛 骨架 躯体 内脏 绒毛 骨架 四肢 两只前肢 两只后肢 尾部 尾巴 绒毛 骨架 五官 耳朵 眼睛 鼻子 嘴巴 内脏 前肢 绒毛 骨架 后肢 绒毛 骨架

去掉重复的部分:

山羊 脑袋 躯体 四肢 尾部 五官 胡子 绒毛 骨架 内脏 两只前肢 两只后肢 尾巴 耳朵 眼睛 鼻子 嘴巴

最终的不可划分的子模块:

胡子 绒毛 骨架 尾巴 耳朵 眼睛 鼻子 嘴巴

现在我们将它重新组合一下,是不是很简单的就完成了。而且我们需要处理的东西并不多。现在我们来用数学元素来描述一下

胡子: 数量不多的多种形状的轮廓,有各种颜色

绒毛: 非常多的多种形状的轮廓,有各种颜色

骨架: 多种形状的轮廓,有一种颜色

胸:     某形状的轮廓,有一种颜色

腹:     某形状的轮廓,有各种颜色

背:     某形状的轮廓,有各种颜色

尾巴: 某形状的轮廓,有各种颜色

耳朵: 最多两个的某形状的轮廓,有各种颜色

眼睛: 最多两个的某形状的轮廓,有各种颜色

鼻子: 最多一个的某形状的轮廓,有各种颜色

嘴巴: 某形状的轮廓,有各种颜色

心:     某形状的轮廓,有一种颜色

脾:     某形状的轮廓,有一种颜色

肝:     某形状的轮廓,有一种颜色

肺:     某形状的轮廓,有一种颜色

胃:     某形状的轮廓,有一种颜色

肠:     多种形状的轮廓,有一种颜色

脚:     多种形状的轮廓,有各种颜色

现在我们又得出了数量、轮廓和颜色这个三个元素,他们是所有元素都有的共性,我们找到了组合山羊的最小划分,虽然在科学上这不是正确答案,但粗略地表达一只山羊这已足够。好,虽然历时不多,我们在脑海里已经解决了这个问题。

2001/8/05

丁宁

 

详解庖丁解牛中文分词器工具的使用

今天在网上看了一篇关于中文分词的文章,有一类是关于基于字符串匹配的中文分词,里面谈到了一个“庖丁解牛分词器”,于是本人就想尝试跑跑这个分词工具。下面是具体的使用步骤: 1.  从网上下载了一个庖丁解...
  • u013709332
  • u013709332
  • 2015年02月02日 10:08
  • 2819

利用庖丁解牛工具进行中文分词

关于如何使用庖丁解牛分词工具可参考:http://www.letiantian.me/2014-11-26-word-segmentation-paoding-analysis/ 该工具可实现自定...
  • fjx1173865548
  • fjx1173865548
  • 2016年11月01日 22:35
  • 1065

例程实作----庖丁解羊(下)

例程实作                        ----庖丁解羊(下)#include #include  using namespace std; class Part{public:   ...
  • Apollo_HolyFire
  • Apollo_HolyFire
  • 2001年09月28日 17:01
  • 875

例程实作----庖丁解羊(上)

 例程实作                        ----庖丁解羊(上)作者:HolyFire 在《庖丁解羊----划分》我们曾经将一只可爱的小羊拆成了零件,不知道是否还能否记得那道全羊谱。呵...
  • Apollo_HolyFire
  • Apollo_HolyFire
  • 2001年10月08日 08:40
  • 1088

解决问题的步骤-庖丁解羊

经过多年的编程,吾发现编程的思想对一个程序员是至关重要的,以前拿到一个问题,马上就开始考虑如何来一点一点把他用代码来实现,于是啃啊啃啊于愁眉笼罩千辛万苦下每完成了一点就欣喜若狂。编着编着发现这里不足,...
  • zky1347888
  • zky1347888
  • 2014年11月24日 22:18
  • 1007

IKAnalyzer和庖丁分词性能对比

  paoding和IK分词效果差不多,IK分词多些但速度差些。原文: http://www.zgkw.cn/FORUMS/blogs/dyx/archive/2008/02/18/59776.asp...
  • kellerdu
  • kellerdu
  • 2008年02月18日 12:35
  • 1653

庖丁解“学生信息管理系统”

学生信息管理系统已经敲完,历时半个多月,总觉得自己的收获就不能几个字草草了之,因此再写篇关于学生信息管理系统的博客,“庖丁解‘牛’”,再次剖析一下学生信息管理系统,总结一下收获。 一、学生信息管理系统...
  • zhangzijiejiayou
  • zhangzijiejiayou
  • 2013年08月18日 17:00
  • 3132

庖丁中文分词入门(一) 效果体验

下载地址:zip download:http://code.google.com/p/paoding/downloads/listsvn: http://paoding.googlecode.com/...
  • lengyuhong
  • lengyuhong
  • 2010年11月07日 15:46
  • 7522

基于hadoop的分布式分词程序(庖丁分词)

一、使用的分词包——庖丁分词器介绍 1.1、简介: 庖丁系统是个完全基于lucene的中文分词系统,它就是重新建了一个analyzer,叫做PaodingAnalyzer,这个anal...
  • gywtzh0889
  • gywtzh0889
  • 2016年12月01日 16:12
  • 559

paoding(庖丁)分词器配置安装

1.首先从网上下载庖丁分词器的包:http://code.google.com/p/paoding/downloads/list 2.解压到本地磁盘,例如我的存放路径:C:\lucene\paodi...
  • zhangt85
  • zhangt85
  • 2012年10月13日 16:22
  • 1971
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:庖丁解羊----划分
举报原因:
原因补充:

(最多只允许输入30个字)