数据结构、算法,个人理解

也是在一次一个网友讨论过程中理解的,一直对数据结构和算法是程序的灵魂这句话不理解。

数据结构和算法那么重要,我怎么感觉不到呢?怎么想这句话,都感觉是屁话,跟没说一样。

 

 出现这些问题原因有:

一个是因为自己平时写的程序比较低端,加减乘除,if else switch就解决问题了,根本设计不到对数据结构和算法的探究。

二个是数据结构和算法,被分开理解了。

比如,我能理解数据结构对于程序的重要性,忘了是在哪个文件里面看的了,讲数据结构就是我们对现实生活中需要用程序解决的问题的抽象。

一个班的学生,每个得了多少分,我可以用学号和分数,二维数组来表示。

学生叫什么,性别,已婚与否,分数,数据的类型多了之后,可以用结构体来表示。

我们要解决的问题的核心,就是这些从现实生活中提炼出来的抽象数据。数组、结构,可以参与进来,帮助我记录。

可是这里面,跟算法有毛关系?

顶多我查找一下,修改一下这些数据,感觉这些简单的操作称不上算法吧???

算法是什么??到底,WTF

 

 

我单独也运用过算法,比如在做12864液晶屏的时候,有个画点的算法,叫Bresenham。

通过对这个算法的理解,也知道了,嗯,这个算法确实牛啊。

画一条直线,我确定画了一个点,下个点画在哪里?愣头青的想法是,先得到起点和终点,通过得到这个直线的一次方程,来得到每个点的坐标(x,y)

但是这个算法吊啊,具体实现忘了,好早之前的东西了额。不用复杂的运算,就可以得到基于某个点,下个点的坐标。

 哦,对还有学过的各种排序算法,什么bitmap算法,

总觉得算法这个事儿不是一般能用得上的,都是给特定的场合用的。

 

这么理解下来,这不是程序可以离开算法存在吗?

算法和数据结构可以分开吗,谁说他们必须在一起的??!啊,课本上也没有太好的解释啊

 

 

 

于是时间就这么一年一年过去了,我还不知道怎么肥四。

直到有一天。。。

那位网友讨论了一个颜色识别的问题。

一段程序,颜色识别,是摄像机拍下一个图片,其中的某一点取出的8*3位的颜色值,每8位代表RGB里的一种。

然后设置了标准色,与这一点的颜色值计算偏差,与哪种标准色的偏差最小,就认为是哪种颜色。

按道理讲,我觉得这个程序还行啊,能用。

 

但这位网友说到:

1.首先rgb色是向量,用标量来直接计算,是错误的

2.更严重的是,这个算法能跑的前提是,环境光没有任何变化,摄像头不更换,摄像头曝光率不变。

所以环境光变化,这个算法就无能为力了,这套代码太烂!

 

一语惊人,我一下悟到了算法是什么。

算法就是,一种思路,根据这个思路写出来的代码。

而且这个代码可以完成我们要解决的问题,通俗说就是跑得通,能得到我们想要的结果。

这个代码写起来可以很神气、很优雅,像上边提到的Bresenham啊、快速排序、冒泡排序,

也可以很简单、很乞丐,我们平时写的代码,虽然是什么if else switch,但是这也是一种解决问题的思路,而这个思路就是程序的算法!

 

我恍然大悟,算法不是什么高深的东西,他就是我们用程序来描述、解决问题的思路!!!与实现这个算法,写的代码复杂与否、优雅与否没有半毛钱关系!!!

 

 

 

当我们想出来一个思路来解决问题时,还要结合我们从现实中抽象出来的数据结构,才能得到完完整整的程序。

 

比如点灯。

数据结构:bit LED

算法:通过修改寄存器,产生引脚的电平变化。

 

(完)

 

posted @ 2017-10-19 00:27  为民除害  阅读(253)  评论(0编辑  收藏  举报