不是大神,只是想写一下自己的心得。
思维是存在的,不可否认。我们常说做事需要逻辑,需要有条有序。作为理工科教师,在教学中或许有所体会。
同一个知识点,不同的老师教授,学生的理解层次不一样,同一个老师讲授,不同的学生理解层次不一样。有人说这不是废话嘛,的确,每个人的认知不同,思维理解能力不同。但是有些人理解事物更快,接受新知识更容易,这便是思维的作用。甚至有些东西,思维不到,理解起来很困难,比如高数的定理和deep learning里面的算法。
思维是一个很奇妙的东西,就像道一样,道可道,非常道。但是我还是想表达一下自己的想法。通过我的文字,说一下对逻辑思维的心得。
先从数学与算法说起,有些数学题目或许让你有些很虚的感觉。这些题目,不像是纯粹的数学问题了,比如,把一段木头据成3段,需要几次? 2次就行了(3次的没有用脑子);一辆长60m的列车过一个长3600m的桥洞,以60m/s行驶,通过桥洞需要多长时间? 7s [(桥洞长+列车长)/速度]; 2个人绕圆形跑道跑步的追击问题,怎么才能追上,求跑道长?(这个可以判断链表是否有环,设二个指针,一个以p->next; 循环移动,一个以**p->next->next; **循环移动...)。
还有数列求和的问题,我们或许都曾计算过1+2+3+.......100的和,第一次接触时是不是感觉很难?只能傻傻的一个个累加计算,然而聪明的同学,比如高斯却是通过1+99=100,2+98=100,....49+51=100, 一共50*100+50=5050.求解 [不过这问题让计算机解决倒是很简单,循环求和,但是算法的时间复杂度就很差,采用数列求和可以快n倍。]
说到此,或许你乙有所感觉,数学问题是最看重人的思维深度,问题的求解,就是思维的理解,当你理解了问题,数学题目也会迎刃而解。但是思维却不好描述,比如有些数学很不错的同学,让他给你讲一讲解题过程,他自己懂却讲不清楚。因为思维很抽象,虚无缥缈般,道可道,非常道。
干提高了算法,算法是解题方案的准确而完整的描述,很大一部分可以看做对逻辑思维的描述。数学和cs都有算法的知识点。
先看2个变量交换算法,如果a=2,b=3,怎么交换a,b的值?[a=b,b=a明显错误了],如果a=b,那么a 的值就被覆盖了,在b=a,其实是b=b,结果是a=b,b=b.正确的做法是,应该用一个中间变量c,先把a的值储层起来,c=a,a=b,b=c,这样就可以了。
这个问题可以类比生活中的一个问题就好理解了,如果二个杯子各装了一杯水,想交换2个杯子中的水,应该怎么办?当然找一个空杯子,作为媒介。
类似的还有排序算法,体育课的时候,老师让大家按照从矮到高的顺序排队.
1.0 我们可以采用选择排序,选择第一矮的排在第一位,在选择第二矮的排在第二位,依次类推,直到整过队伍有序.
2.0 我们可以采用冒泡排序,比较第一个和第二个高矮,让矮的在前高的在后,在比较第2个和第3个的高矮,矮的在前高的在后,直到比较到第n-1个人和第n个人,这样最高的站在最后了,然后重复比较n-1次,队伍就全部有序了.
3.0 我们可以采用插入排序,先选择第一个人为第1组,剩下的n-1个为第2组,1个人的第一组是有序的.在选择第2组的第一个人插入到第一组的合适位置,在让第一组有序,重复进行直到第2组没有人了,整个队伍就有序了.
前面的排序算法好想到,但是效率不高(时间复杂度为n*n).看看更快的方法.其效率为n*lon2n
4.0 我们可以采用快速排序.首先选择队伍的第一个人作为参考物,让比其高的战在它后边,比其矮的战它前边,这样参考物的位置就确定了,在递归重复的进行,直到队伍有序.
5.0 我们可以采用归并排序,首先队伍一分为2,在一分为4,直到每一队人数为1,那么它是有序的,在合并其中2队让它有序,循环进行直到整个队伍有序,这看起来很麻烦,其实不然,因为分成的小队是有序的,合并起来就简单许多.
6.0 我们可以采用shell排序,前面讲过插入排序,插入排序的增量是1,而shell排序是其变形版本,让增量依次取n/2,n/4,n/8......1直到队伍有序.
一个队伍的排序就有这么多方法(其实还有堆排序,桶排序等等不在一一说明),可以看出思维的理解不同,解决的问题方式也不一样.思维强,想出的办法则更好。别小看了排序的思维,这是无数数学家和计算机科学家提出来的,计算机中运用最广泛的算法。
未完待续
网友评论