也是在一次一个网友讨论过程中理解的,一直对数据结构和算法是程序的灵魂这句话不理解。
数据结构和算法那么重要,我怎么感觉不到呢?怎么想这句话,都感觉是屁话,跟没说一样。
出现这些问题原因有:
一个是因为自己平时写的程序比较低端,加减乘除,if else switch就解决问题了,根本设计不到对数据结构和算法的探究。
二个是数据结构和算法,被分开理解了。
比如,我能理解数据结构对于程序的重要性,忘了是在哪个文件里面看的了,讲数据结构就是我们对现实生活中需要用程序解决的问题的抽象。
一个班的学生,每个得了多少分,我可以用学号和分数,二维数组来表示。
学生叫什么,性别,已婚与否,分数,数据的类型多了之后,可以用结构体来表示。
我们要解决的问题的核心,就是这些从现实生活中提炼出来的抽象数据。数组、结构,可以参与进来,帮助我记录。
可是这里面,跟算法有毛关系?
顶多我查找一下,修改一下这些数据,感觉这些简单的操作称不上算法吧???
算法是什么??到底,WTF
我单独也运用过算法,比如在做12864液晶屏的时候,有个画点的算法,叫Bresenham。
通过对这个算法的理解,也知道了,嗯,这个算法确实牛啊。
画一条直线,我确定画了一个点,下个点画在哪里?愣头青的想法是,先得到起点和终点,通过得到这个直线的一次方程,来得到每个点的坐标(x,y)
但是这个算法吊啊,具体实现忘了,好早之前的东西了额。不用复杂的运算,就可以得到基于某个点,下个点的坐标。
哦,对还有学过的各种排序算法,什么bitmap算法,
总觉得算法这个事儿不是一般能用得上的,都是给特定的场合用的。
这么理解下来,这不是程序可以离开算法存在吗?
算法和数据结构可以分开吗,谁说他们必须在一起的??!啊,课本上也没有太好的解释啊
于是时间就这么一年一年过去了,我还不知道怎么肥四。
直到有一天。。。
那位网友讨论了一个颜色识别的问题。
一段程序,颜色识别,是摄像机拍下一个图片,其中的某一点取出的8*3位的颜色值,每8位代表RGB里的一种。
然后设置了标准色,与这一点的颜色值计算偏差,与哪种标准色的偏差最小,就认为是哪种颜色。
按道理讲,我觉得这个程序还行啊,能用。
但这位网友说到:
1.首先rgb色是向量,用标量来直接计算,是错误的
2.更严重的是,这个算法能跑的前提是,环境光没有任何变化,摄像头不更换,摄像头曝光率不变。
所以环境光变化,这个算法就无能为力了,这套代码太烂!
一语惊人,我一下悟到了算法是什么。
算法就是,一种思路,根据这个思路写出来的代码。
而且这个代码可以完成我们要解决的问题,通俗说就是跑得通,能得到我们想要的结果。
这个代码写起来可以很神气、很优雅,像上边提到的Bresenham啊、快速排序、冒泡排序,
也可以很简单、很乞丐,我们平时写的代码,虽然是什么if else switch,但是这也是一种解决问题的思路,而这个思路就是程序的算法!
我恍然大悟,算法不是什么高深的东西,他就是我们用程序来描述、解决问题的思路!!!与实现这个算法,写的代码复杂与否、优雅与否没有半毛钱关系!!!
当我们想出来一个思路来解决问题时,还要结合我们从现实中抽象出来的数据结构,才能得到完完整整的程序。
比如点灯。
数据结构:bit LED
算法:通过修改寄存器,产生引脚的电平变化。
(完)