中易网

为什么要使用数据结构和算法

答案:2  悬赏:10  
解决时间 2021-12-20 15:09
为什么要使用数据结构和算法
最佳答案
“程序设计 = 算法 + 数据结构”是瑞士计算机科学家Niklaus Wirth于1976年出版的一本书的书名,很快就成了在计算机工作者之间流传的一句名言。斗转星移,尽管新技术方法不断涌现,这句名言依然焕发着无限的生命力,它借助面向对象知识的普及,使数据结构技术更加完善和易于使用。由此,也说明了数据结构在计算机学科中的地位和不可替代的独特作用。
然而,在可视化程序设计的今天,借助于集成开发环境我们可以很方便、快捷地开发部署应用程序,程序设计似乎不再只是计算机专业的人员的专利,很多人以为,只要掌握了几种开发工具就可以成为编程高手了,其实这是一个误区。纵然,我们可以很熟练地掌握一门程序设计语言、熟练地运用各种IDE开发应用程序,但是我们写出的代码是否是优良的?我们的设计是否合理?代码执行是否是高效的?代码风格是否是有美感的?更甚的说我们所写出代码的是否是艺术?
在长达几年的时间内,我总是陷在了一个误区里面:即认为工程能力和算法能力是不相干的两回事,我们似乎可以很轻松地完成一个工程项目,至少我在做一些MIS系统的时候一直都是这么认为的,甚至觉得根本不需要所谓的算法或数据结构。当时一直想不通的是为什么Google、百度这样牛的公司却对ACMer们如此青睐,对于这种招聘的标准感到疑惑不解。为什么他们不在技术(多线程、网络编程、分布式系统等)上做要求,却偏偏只关注这么一小块的算法设计?
我曾经反复地告诉自己“程序设计 = 算法 + 数据结构”在70年代提出是受限于计算机硬件,当时的内存不足、计算能力不强,程序需要设计足够精巧细致。再看当前主流的计算机配置,比70年代的大型机运算能力还要强大,我们好像完全不用担心算法设计的问题。报着这样的想法,我向来都不太重视算法,而且工程中对算法的需求并不多。
只是有一天,我突然发现我只是片面地关注其中一个方面,硬件能力是提升了,但同时人们所面对的信息、数据、运算任务的规模也是极大的膨胀了,而且膨胀的规模比硬件本身运算能力提升的规模还要大很多。算法和数据结构不仅没有贬值,反而比之前那个时代显得更为重要。试想,在互联网迅猛发展的今天,一个中等规模的企业每天所产生的数据量能达到GB级甚至TB级。要处理这样的海量数据不是说单纯的硬件运算能力上来就解决了的,设计优良的算法和数据结构设计能够在1分钟之内完成任务,而一个糟糕的设计则可能需要1个小时的运行。
一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的,这种对数据元素间逻辑关系的描述称为数据结构。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。当然,有些情况下事情也会反过来,我们根据特定算法来选择数据结构与之适应。算法则可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤,或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。
总的来说,数据结构和算法并不是一门教你编程的课,它们可以脱离任何的计算机程序设计语言,而只需要从抽象意义上去概括描述。说的简单一点,数据结构是一门告诉你数据在计算机里如何组织的课程,而算法是一门告诉你数据在计算机里如何运算的课程,前者是结构学、后者是数学。程序设计就像盖房子,数据结构是砖、瓦,而算法则是设计图纸。你若想盖房子首先必须要有原材料(数据结构),但这些原材料并不能自动地盖起你想要的房子,你必须按照设计图纸(算法)一砖一瓦地去砌,这样你才能拥有你想要的房子。数据结构是程序设计这座大厦的基础,没有基础,无论设计有多么高明,这座大厦不可能建造起来。算法则是程序设计之灵魂,它是程序设计的思想所在,没有灵魂没有思想那不叫程序,只是一堆杂乱无章的符号而已。在程序设计中,数据结构就像物质,而算法则是意识,这在哲学上可以理解为:意识是依赖与物质而存在的,物质是由意识而发展的。双方相互依赖,缺一不可!
当然最经典的数据结构是有限的,包括线性表、栈、队列、串、数组、二叉树、树、图、查找表等,而算法则是琳琅满目的,多种多样的。就好像数据结构是人体的各种组织、器官,算法则是人的思想。你可以用自己的思想去支配你的身体各个可以运动的器官随意运动。如果你想吃苹果,你可以削皮吃,可以带皮吃,只要你愿意,甚至你可以不洗就吃。但无论如何,你的器官还是你的器官,就那么几样,目的只有一个就是吃苹果,而方式却是随心所欲的!这就是算法的灵活性、不固定性。因此可以这样说:数据结构是死的,而算法是活的。
我花了四年时间才走出这个误区,值得庆幸的是不算太晚,而我的梦想是要做一名优秀的架构师,缺乏数据结构和算法的深厚功底,很难设计出高水平的具有专业水准的架构和应用,数据结构和算法则是我实现梦想最坚实的基石。现在,也正是我需要开始沉淀的时刻!程序设计这项伟大的工程,教授于我的将不仅仅是技术这么简单,我期待它能给我以更深的思考与感悟,激发我对生命的热爱,对理想的执着,对卓越的追求!
全部回答
今天来说说为什么需要使用算法? 算法是什么?算法是:指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量 public class test {              private void originalmethod(long n) {           system.out.println("**使用原始循环算法**");           long starttime = system.currenttimemillis();           long sum = 0;           for (long i = 0; i <= n; i++) {               sum += i;           }           long endtime = system.currenttimemillis();           system.out.println("结果:" + sum);           system.out.println("用时:" + (endtime - starttime));       }              private void advancemethod(long n) {           system.out.println("**使用等差数列算法**");           long starttime = system.currenttimemillis();           long sum = 0;           long a1 = 1;           long an = n;           sum = (a1 + an) * n / 2;           long endtime = system.currenttimemillis();           system.out.println("结果:" + sum);           system.out.println("用时:" + (endtime - starttime));       }       public static void main(string[] args) throws interruptedexception {           test test = new test();           long n = 1000;           system.out.println("-------当n=" + n + "的时候------");           test.originalmethod(n);           test.advancemethod(n);           n = 1000000;           system.out.println("-------当n=" + n + "的时候------");           test.originalmethod(n);           test.advancemethod(n);           n = 1000000000l;           system.out.println("-------当n=" + n + "的时候------");           test.originalmethod(n);           test.advancemethod(n);       }   }从上面的结果可以看见,使用循环算法的所用时间不断的增加,而且达到某个数量级之后(例如10的20次方),估计我们等死也等不到结果出来,而反观使用等差数列算法,使用的实际都是0,当然,其实不是0,只不过太快了,没有显示出来而已,两个计算方式相互比较一下,算法的性能一下子就看出来了。 而且对于现今大数据来说,动不动就是几亿几十亿的数据,计算的过程比我们上面的更加复杂,所需要的时间就更多,这时候如果不使用相应的算法,解决一个问题的时间基本是不可估计的,因此,我们需要算法
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
痛經的意思是什么?痛經的释义是什么啊?
卡祖笛可以单独吹吗?
小孩子几岁会走路
滴露研珠的意思是什么啊?请解释下!
爵马的意思是什么?爵马的释义是什么啊?
ipad2微信视频不能用
b2015全网通能不能用两个电信卡
三方就业协议毁约以后如何能够尽快拿到新的就
白樊楼的意思是什么?白樊楼的释义是什么啊?
怎样激活win7产品密钥,是宏基的,
尊爱的意思是什么啊?请解释下!
足球续约中如果之前合同没到期那年薪是算之前
为什么人在失败的时候,背后总有一群野猪在那
为什么现在大学生大多都想继续考研?
苹果笔记本电脑appl找不到想要下载的怎么办软
推荐资讯
我现在在一所普通的二本院校念会计,我们学校
数字电视机顶盒IC卡是不是一定到所属区的缴费
侠盗猎车gta3好玩还是4.5好玩??
根株牵连的意思是什么啊?请解释下!
为什么男人们越来越不想追女孩了
复性的意思是什么?复性的释义是什么啊?
yz门照片
求3.3.5狂暴战士毕业装备
木星上行电影在线观看
男孩和女孩是男女朋友关系男孩发烧女孩友尽心
mysql什么情况下运算结果是NaN
果实的意思是什么啊?请解释下!
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?