`
lovnet
  • 浏览: 6710234 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

广义的数据结构与算法

 
阅读更多

狭义的数据结构与算法

以前在学校读书时老师一个劲的强调学习编程最重要的是要学数据结构与算法,当然啥操作系统原理,计算机组成原理那些也一样重要.很多人毕业工作后发现编程时几乎没用过啥数据结构与算法,于是觉得那些老师是不是都坑爹的啊?

数据结构

一般说到数据结构大家想到的是数组(Array),栈(Stack),队列(Queue),链表(linked list),树(tree),图(graph),堆(heap),散列表(Hash).在学校时我们花了很多工夫去学怎么自己实现这些数据结构.而工作中很多编程语言都有类库帮你实现了,你直接拿来用就行,就大概了解下各种数据结构的原理和用法就行.可能我们用的最多的还是数组了.

算法

数据结构可能还偶尔用用,但算法就真的几乎没几个用过的了.一想到算法大家马上想到各种排序算法,啥冒泡,选择,插入,归并排序啊.然后还有查找算法.

可能偏向底层的开发用到数据结构和算法的机会会多点.但大多数应用软件基本上很少直接用到,而且中国的软件行业大部分是搞应用软件开发.啥数据结构直接调用下类库里面的就行,排序算法就更简单,可能调用一个Sort函数排下就行.如果是啥海量数据都整到数据库里面去了,直接用SQL去搞定,更不用你去关心啥数据结构和算法了.而应用软件开发的过程中可能更重要的是你对业务流程的熟悉,对编程语言一些语法细节的熟练使用.像C#这样的语言还要你熟练使用各种控件.

所以狭义的数据结构对一些利用高级编程语言搞应用软件开发的人来说用处真的不是太大.但对开发操作系统,数据库,编译器,搜索引擎这样的东东可能就特别有用.

广义的数据结构与算法

编程语言中体现的数据结构与算法

广义数据结构

一般在数据结构中我们把整形,浮点型,字符型这样的结构类型叫作基本类型,然后通过一些逻辑把这些基本类型组合到一起变成数组,树,图这样的常用的数据结构了.实际上我们也可以把机器能识别的01当作基本类型,那么整形,浮点型,字符型都可以看成一种数据结构了.而把基本类型组合到一起变成结构体(struct),基本类型和函数组合到一起变成类(class).struct各class也都可以看成一种数据结构.

我们都知道现在是所谓的信息社会,而数据就是信息的载体.所以我们一个软件系统的作用就是处理信息,处理数据.把数据分类,保存,运算,传送.数据库就不用说了,就是专门组织,保存数据.整个互联网的作用就是传输数据了,为了数据保密就有啥加密解密技术,为了数据解析的统一规范就有种种TPC/IP各种协议.所有的网站都是传送数据给你,文字,图片,视频所以的一切在计算机上统统是数据.以前毕达哥拉斯认是世界是数组成的,万物皆数.那在计算机世界中就真正实现了万物皆数啊,各种各样的数据.当然有时还要把数字转换成声音图像那样的模拟信号.

在整个计算机中所有的一切都是围绕着数据打转转,那程序语言就更是如此了.就拿面向过程语言中的C语言来举例吧.首先是要定义整形,浮点型,字符型,结构体,枚举,数组这样的数据结构来保存数据,当然数据在运行过程中自然要在内存中占一块地方.如果是在stack中就由系统去管理,你不用太担心.如果为了灵活利用内存你把数据保存在heap中的话就得熟练的运用指针去指来指去的.这些都可以理解为广义的数据结构了.

广义算法

有了数据就要去操作它,先是用加减乘除这样的算术表达式,然后就是啥大于小于,且或这样的逻辑表达式,另外少不了各种赋值.这些表达式组合起来再加上啥for,while,switch,if,else就组成一个个的句子,语句块.我们一般用一个个函数把它们封装到一起.所有的表达式,语句,函数这些对数据的操作组合,我们都可以看成广义的算法.实际上很多复杂的算法用编程语言写出来就那么几个简单的基本数据类型,然后加一串让你头大的for,while,if,else组合了.而有时为了操作数据方便,正确,又用到了啥宏啊,const,函数指针啊.使用宏的登峰造极境界估计是MFC的设计了,那里面一堆堆的宏真够吓人的.

所以在C语音中基本上就是定义些数据类型(数据结构),然后用各种函数(算法)去操作.说白了就是广义的数据结构加算法了.

面向对象语言,比如C++,基本差别不大,最重要的是出现了类这样的概念.我们可以把类看成一种特殊的数据结构了.里面包含了数据和函数.可能光从语言层面讲面向对象语言最难的就是怎么设计好一个个的class了.这怎么设计好一个个的类就是个艺术活了啊,看你怎么把现实业务做数学建模了啊.围绕类有啥封装,继承,多态.封装一来是变更简便,隐藏了一些对类用户无关的信息,改起来也不容易对其他类产生影响.二来嘛减少犯错的可能,很多数据不给你操作.而继承主要是充分利用已有的数据,不去重复构造数据.多态就是让你操作数据时更灵活方便.C++还有个泛型编程的概念,实际上也可以看成一种特殊的多态.在编写某个函数时为了对所有数据类型通用,为了避免关注具体的某个类型就出现了泛型的概念.它就像做好的一个模板,等你调用时传一个真正的类型进去OK了.泛型编程也是C# 2.0中最重要的概念.在C# 3.0中最重要的概念就是Linq了,它也是为了方便操作数据,可以像使用SQL那么简单去操作xml,数据库,数组等所有数据集合.

所有面向对象语言仍然还是围绕着定义数据,然后用函数去处理.说到底还是广义的数据结构加算法.只不过不像面向过程中把数据和函数分得那么明显.在面向对象数据和函数结合的更紧密,数据和函数组合到一起成为一个类,然后类又可以看成一个数据,继续跟某些函数还可以再组合某个类.

应用程序中的数据结构与算法

当我们紧盯着数据和函数时,那是偏向于计算机那个角度去思考问题.我们知道人很厉害的一个本事就是会抽象,把一些复杂的东西内部实现细节隐藏起来,里面的具体实现由其他人负责去,我们只要知道接口就行了.像我们使用汽车,手机,电视,洗衣机等等,内部怎么制造我们不管.只要会用就行.操作系统把硬件很多细节抽象隐藏了.所以大部分人都会用计算机,只要用鼠标点点图形界面就行了.那自然我们可以把程序语言中数据,函数,类更进一步的封装.比如像微软的share point ,随便点几下就能整个网站出来,不过我是没用过share point,只是听说过,不知道好用不.还有New Type公司也有这样类似的产品.这个我是玩过一把,挺有趣的,玩熟了几个小时可以整个复杂的网站出来.在C#中是弄些控件给你拖一拖,它这里就是控件再封装成一个个的网站页面了,你一拖就是一个页面或几个组合一起的页面,你只要设置些参数就行.只不过这样太不灵活了,可维护性也差,如果哪出问题了你没法去调试,很难找到哪出问题了. 所以这时数据结构就不是一个个简单的数据或类了,而是一个个页面了,而算法嘛就是你怎么一步步的去设置参数了啊.

其实算法嘛,要广义的说起来所有一系列行动和做法都能算算法了啊.差不多可以包括人类所以一节活动了.开头我说了很多人工作中觉得熟悉业务流程比较重要.其实我们可以把一系统业务流程当成一个个的算法.

另外我们可能只认为开发人员会与数据结构与算法打交道,实际上用户也会用它们打交道的.我们使用数据结构和算法是为了让计算机给我们做事,按我们的要求去一步步做点啥.而用户使用某个应用程序时,也是希望程序帮他做点啥事,此事用户看到的只有应用程序,程序把计算机的操作给封装了,隐藏了.此时数据结构与算法更简单.比如你玩QQ,可能你一个个好友就像一个数据结构一样,而算法嘛就是鼠标点来点去.复杂点的嘛像ERP系统,里面的一个个表就像数据结构一样,比如啥订单表,销售表,资金流量表,资产负债表啊.而算法就是按现实中业务流程去操作.

其实软件只是个工具,如果你能把这个工具做好,能给用户提供很大方便就会赚大钱,而不一定说用到了多少厉害的技术才叫厉害的软件.最赚钱的软件可能就是操作系统,数据库,ERP这样的软件了.像微软的windows很多人说它不好,可能从技术层面讲还不如Unix,Linux.但是它用起来方便,使一般人很容易的操作电脑,所以大家都愿意花钱就买.还有office,技术 含量不一定有多高,但给很多人的工作带来了极大的方便,所以也卖钱.windows和office是微软最赚钱的两个产品了.数据库的话像Oralce,那钱赚了也让不少人眼红啊.因为现代是信息社会嘛,而数据就是信息的载体,所以所行行业都需要管理数据,自然得用到数据库.

ERP

另外ERP也赚钱,Oralce也做ERP,但是在ERP这一块还有个比它更厉害的德国公司SAP,它一套大的ERP系统再加服务卖出去就可以几千万上亿啊.ERP为啥重要呢,因为它想着法子把所有行业所有的业务都搬到计算机上去.这样最明显的好处一来是它不是根据你的业务来完全订做.ERP它是根据那一行的一些优秀的管理方案和流程去做,然后你用的话就相当于采用一套先进的管理手段一样.当然自然也要兼容一些你之前的业务才行,不能完全改变你自己业务.由于ERP有很高的配置性,所以它可以灵活应用到各行各业.啥叫配置性很高啊.举个简单的例子.比如你可以在里面创建你的公司架构,比如上面是一个集团,集团下面很多公司,每个公司有采购,销售,财务等一些部门,可能还有些部门是可以横跨几个公司.配置好了后,后续很多操作都会根据这些配置来的.这就像C++中的模板一样,泛型编程一样,你使用时传一些具体类型进去.而ERP的配置信息就相当于是传一些具体类型进去.所以同样的ERP系统能通用于各行各业,只要做些不同的配置.我们可以把这看成泛型编程的更高层的应用.当然系统一复杂还是会缺少灵活性的,所以如果你不自己再整些各种各样的系统和ERP配合使用的话就会应验那句话,不上ERP是等死,上了ERP是找死.另外SAP还专门整了个编程语言ABAP去给它的ERP做二次开发.这可以看成做更大的配置改动.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics