“程序设计=算法+数据结构”如何理解?

“程序设计=算法+数据结构”如何理解?,第1张

“算法+数据结构=程序”是一个著名的公式。程序运行的过程就是数据流的处理过程,怎么处理,那就是算法问题,数据怎么组织,那就是数据结构了。

程序设计是给出解决特定问题程序的过程,是软件构造活动中的重要组成部分。程序设计往往以某种程序设计语言为工具,给出这种语言下的程序。

扩展资料:

某种意义上,程序设计的出现甚至早于电子计算机的出现。英国著名诗人拜伦的女儿爱达·勒芙蕾丝曾设计了巴贝奇分析机上计算伯努利数的一个程序。她甚至还创建了循环和子程序的概念。由于她在程序设计上的开创性工作,爱达·勒芙蕾丝被称为世界上第一位程序员。

任何设计活动都是在各种约束条件和相互矛盾的需求之间寻求一种平衡,程序设计也不例外。在计算机技术发展的早期,由于机器资源比较昂贵,程序的时间和空间代价往往是设计关心的主要因素;

随着硬件技术的飞速发展和软件规模的日益庞大,程序的结构、可维护性、复用性、可扩展性等因素日益重要。

另一方面,在计算机技术发展的早期,软件构造活动主要就是程序设计活动。但随着软件技术的发展,软件系统越来越复杂,逐渐分化出许多专用的软件系统,如 *** 作系统、数据库系统、应用服务器,而且这些专用的软件系统愈来愈成为普遍的计算环境的一部分。

这种情况下软件构造活动的内容越来越丰富,不再只是纯粹的程序设计,还包括数据库设计、用户界面设计、接口设计、通信协议设计和复杂的系统配置过程。

数据结构:线性(Linear)、树型(Tree)、图(Graph)

算法:排序(Sort)、查找(Search)、枚举(Enum)等等...

算法解决的是数据结构中的“增删改查”,数据结构为的是让计算机理解我们需要解决的问题是什么东西。

一个问题,让计算机理解它是什么,然后我们通过‘增删改查’来达到解决问题的期望。

框架(framework)这个在2000年之前,其实计算机软件开发当中并不怎么使用这个词,那个时候我们经常会说的是库,SDK,API,例如:Win32 API,游戏开发中,我们也不叫框架,叫“引擎”,后来2000年后才逐步的开始使用这个名词。框架实际上是利用设计模式,将某类型软件开发中的常见问题,常用功能进行"封装"(框架名词与OOP关系很深)以达到更好的代码复用率(少写代码),并且让程序的设计工作以框架为主干(骨骼)进行扩展和开发,也就是给你画个框框,你的开发在这个框框中,框架决定你的开发模式、框架中提供的API决定了你编码方式(接口),所谓的框架无非是利用了所谓的23种常见“软件设计模式”中的一些模式来组织代码,然后让使用框架的人,陷入这个条条框框中,按照对方给你的API来进行软件开发。

好处就是:标准化、简单化

坏处就是:(依赖)框架的人,严格来说都是程序搬砖工而已

从开发成本的角度来看,框架可以缩短我们的开发周期,但从学习的角度来看,还不如深入的去了解数据结构与算法以及设计模式,我们可以使用框架,但不要依赖框架。

数据结构:就是让基本数据类型和复合数据类型以某种结构化的组织方式在计算机上进行数据的存储,而算法就是我们如何利用这些结构化的数据来解决实际问题方法。

计算就是一个IO设备,input ->(CPU、Memory、Storage) ->output

数据结构解决如何组织数据的输入、数据的存储、数据的输出

算法解决如何输入、如何处理数据计算、如何输出

数据结构与算法是(心法),设计模式是(内功),编程语言是(招式)

没有心法,内功等于0,招式就是假把式

有了心法,内功才有依靠,有了心法和内功,招式才能产生效果!

程序=算法+数据结构

程序就是一系列有序执行的指令集合。

第一个答案对于大多数人其实等于没有回答,因为算法这个概念可能是一个比程序更为复杂的概念。

第二个答案算是有点容易明白,但还不能让人明白程序能做什么不能做什么。

一,菜谱

材料: 五花肉半斤,尖椒一个,青蒜4-5根,(其实正宗的回锅肉还要放豆干,再放根红椒点缀,咱家没有,省略了),白糖2茶勺,生抽1汤勺,盐2克,鸡精,料酒,姜片,葱段;蒜片,郫县豆瓣酱1汤勺

做法: 预先处理:将整块五花肉放入热水中煮熟(筷子扎下去可以扎透),期间点些料酒,放两片姜,两三段葱;然后放入冷水中冷却。其中,冷水中冷却的步骤可以使肉快速收缩,帮助成型,增加嚼劲儿,是普通厨子变大厨的关键步骤,不可省略哈。

青椒切菱形段,青蒜拍一下蒜头,切寸段。蒜头和蒜叶分开放。

预先处理过的五花肉切薄片,越薄越好。俺就这刀工了,算比较厚的啊。

蒜拍碎(没拍),郫县豆瓣剁成茸(碎点儿好看也好吃)。

处理好的肉片下油锅,旺火煸炒。直至肉片打卷,变得焦黄。

将超好的肉片拨至一边,下入蒜末和郫县豆瓣,用小火炒出红油。

倒入尖椒段和青蒜蒜头,烹入糖,生抽,盐。注意:郫县豆瓣酱和生抽均有咸度,盐一定要酌情放。

待尖椒和蒜头香味出来,放入青蒜叶及鸡精兜匀。青蒜叶熟的很快,这个步骤只需要30秒或者更短,只要看到青蒜叶被油裹住就可以了。

出锅

以上是网上找的一个回锅肉的菜谱(貌似这个下酒好)。从广义的角度来说这也是一个程序,怎么说呢?

这个程序与计算机程序略微不一样,这个程序的运行者是一个可以认识上面的文字,能正确理解每句话的意义,且有能力得到材料并按步骤执行的人。而计算机程序则是计算机可以理解和执行语句。

二,为什么要有编程语言

就像上面的菜谱一样,我们只要识得汉字基本都可以照着来执行。为什么要有让人看起怎么都不能一下就接受的编程语言呢?

自然语言有歧义

男老师发现一女生上课睡觉,气愤的说:我在上面累的要死,你在下面一动不动!不配合也就罢了,连点反应都没有,将来要是肚子里没东西,可别怪老师不行!

中国足球队谁也打不赢。中国乒乓球队谁也打不赢。

冬天太冷,出门时衣服能穿多少就穿多少。夏天太热,出门时衣服能穿多少就穿多少。

地铁里听到一个女孩大概是给男朋友打电话,“我已经到西直门了,你快出来往地铁站走。如果你到了,我还没到,你就等着吧。如果我到了,你还没到,你就等着吧。”

老婆给当程序员的老公打电话:下班顺路买一斤包子带回来,如果看到卖西瓜的,买一个。当晚,程序员老公手捧一个包子进了家门…老婆怒道:你怎么就买了一个包子?!老公答曰:因为看到了卖西瓜的。

这是几则最典型的汉语歧义,其它语种中一样有很多这样的歧义。看最后程序员这则,那么就是老婆下了一系列指令但是执行者按照另一种意义去执行了。当然这例子还有不恰当的地方,我们也可以将指令改为:“下班顺路买一斤包子带回来,另外如果看到卖西瓜的,买一个西瓜。”。但是麻烦就在汉语本身并未限制我们必须如此,另外其它例子中的用法那就更加不容易确定意义了,还牵扯到语境。所以到今天为止计算机在处理自然语言上都还很糟糕。

自然语言不稳定

666, 虾米, 酱紫, 沙发, 粉丝

以上这些词语在有了网络后就多了一层意思,不上网的人可能根本不知道这多出一层意思。当然不稳定本质上还是带来歧义。

因为这些原因才有数学语言(其实一样有歧义,不然就不会产生数理逻辑这个分支了)、编程语言来规避歧义。

三,程序是什么

这真是一个不好下定义的词,比较可靠的回答都要涉及数理逻辑。无论是递归函数论、图灵机模型、lambda演算都不是那么容易掌握的。这些远比学一门编程语言及掌握写程序更难。所以在这里我们先只给出一个形象的比喻,程序就是一段编译器或解释器(这东西可能比任何人都要听你的话,只要你能用它懂的语言来指挥)能听懂的指令。

打开微信我们可以指挥微信,我们可以给好友发信息,可以加好友,可以发朋友圈,我们下什么指令它就做什么,我们下指令是通过点击屏幕。而编译器与解释器也是类似的东西,不过这东西它只接受它认识的指令,它接受指令都是文字(主要是英文,数字,标点)。

四,计算、同构、模拟

对于同一件事比如我们要计算3+5,那么我们可以有:

扳着手指头左手3个,右手5个放在一起是8个手指头

先拿出3个小球,再拿出5个小球放在一起是8个小球

我们在计算器输入3+5得出8

这三个方法都可以计算出3+5的值,他们用了不同方法的形式但在对于计算3+5这个核心上是计算等价的。也就是同构的概念。

有了同构我们就可以模拟了,比如你有小球,拿它做了一次加法运算。但是我没有小球我可以用手指头或者石子来代替小球模拟你用小球做加法运算,并且得出和你一样的结果。

我们是怎么用程序来事的呢?主要就是用计算机中的数据来模拟现实中的东西。

比如摄像头中的你脑袋往左移了一下,那么本质上计算机中代表脑袋的那些数据的x坐标减去了一定的值,最终再输出到显示器上。

比如你在纸上解了一个方程,那么在计算机也有一个模拟你每一步的计算的过程来得出和你一样的值。只是你用纸和笔来进行,而计算机用它的方式来进行。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11226048.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存