说真的,我对于写软件真的是一点天赋都没有,仔细想想,现在工作有10年了,回头看看走过的路,看到不同的东西,路上也没有遇到太多名师,自己也只不过是不停查资料,到处找各种来源,现在勉勉强强可以写出软件来.
今天看了一下,发现自己对算法真的还是很笨拙,想起来当时想递归的时候,软件里面为了实际用上递归解树和装树,思考了好几天,写写画画.
说起来自己家小时候家境不好,所有的东西除了学校老师讲课,其他的就都靠自己看,然后查了.不停分析. 想想十分羡慕许多人,小时候就有好的家境,什么资源条件都有,想做什么,家里都给准备好了基础,自己要做的,也不过是学习一下技艺了.
早前想起一个表达式的写法,说起来惭愧,自己做软件这么多年,对于基础的数据结构,算法,会做的也只是边边角角,突然想起来,我好像连算式都没有写过,于是去网上查,自己想. 想来想去,自己也有个思路,一正一反,括号成对,道理推了半天,总不得要领,因为这个也是一个无限嵌套的序列,那自己怎么处理呢?如果能递归,那终止条件是什么呢?虽然想地差不多,最后也可以自圆其说,但总感觉缺少些什么,太老套的写法.
网上找了,就找到了一些,说起来这些年,虽然软件设计模式什么的那些东西都十分熟络, 23种,分种分类,各种常用情景,怎么去源码里面找,都能说地上来,因为得来的时候不易,都经过认真思考许久,但是对算法,却缺少实际的灵活使用,尤其是对一些常用数据结构的组合使用.
然后查到了一些相关资料,甚至还有一篇论文呢,上世纪90年代的, 对于表达式的使用.
看了一下,大致上对两个栈的使用,一个操作数栈,一个运算符栈,然后运算符优先级序列数组. 看到两个版本,一个是按运算符将所有单个元素分割了,然后分别入栈, 再然后另一个就是一个一个字符读取,记录位置, 现在运算符之间作为操作数入栈,两个括号开始搜索直到匹配的关闭括号出现,这样直到最内层的括号,运算完一个没有括号的算式,就把操作符栈里面出栈相关的括号和运算符,操作数栈内入栈计算的结果,一直读到整个表达式的结尾,这样做到整个表达式的计算.
说起来,这个运算也简单,可是我却没想出来,对于计算,栈和队列的运用其实也有许多窍门,只不过,其实这个是一个思考的问题,对于数据现象和算法,说起来都是想到了话题,再进一步去思索,而能运用地灵活,可能就要磨练了.
再回到话题,这个真的就是懒与不懒,还有练习方向的问题,软件方面,说起来,天赋一般人都是没有的,而练习可能才是主题吧.
算法真的是一个需要磨练的话题,所以没有天赋,就认真磨练吧,至少下一次碰到不会再陌生,经验经历, 思考出来的结果才是自己的吧,一个自圆其说的过程,自己做不了,就向旁人学习.