向死而生,方得重生。

Search

2017-09-24

新生,请警惕学长传“歪经”


在同大一学生接触中,我不止一次听到或看到高年级学生不负责任地向他们传“歪经”。

新结识的一位在校某社团当头者告诉他:大学四年,学习的事不必太重视,不少人考前临时突击即可通过,但争取当学生干部、参与组织各种社团活动却是必需的。

同月,在批阅应化专业一一级一班期中试卷时,又发现相似的“歪经”,一男生写道:“从农村一路走来,到了大学,让我感到热血沸腾,起初一段时间,感觉自己很飘逸,找不着北,听到各种忽悠,在心理协会里,部长对我说他的班长平时经常外出旅游,考试突击一下,结果都很好。可是听了您说,当你四十岁之后感到了滴水穿石的意义,让我深感内疚,突击只能让自己学得不牢,学无根底。”

月底,力学专业○九级一班孙同学在一份选修课(鄙人开设)期末试卷中谈到:下学期就进入大四了,听学长说,大四是比较闲的,没什么学习任务。我问他有关毕业论文的事情,他说那些毕业论文都是比较容易搞定的,只要从网上找几篇相关的论文,然后自己再修改一下就可以了。听完之后,我觉得以前困扰我的问题一下子解决了,原来毕业论文可以如此简单的完成。

三段“歪经”都出自“经验老到”的学长之口,尤其是出自貌似混得有模有样的“学生高官”之口,故,此“经”忽悠力更强,杀伤力更大。类似“歪经”,必须引起新生高度警惕。

面对“歪经”,作为一名老大学生,作为一名当年兰大历史系(现称历史文化学院)的学生会主席,作为一名执教近三十年的教师,我觉得有资格更有责任向新入学的孩子们说出自己的心里话:

孟子说,“尽信书,不如无书。”同理,学长的话、师长的话等等,都不可尽信。要分析、要鉴别、要慎重辨析其是非,做到“择其善者而行之,其不善者而改之。”

身处如此短视、功力、浮躁的社会大环境里,投机取巧之徒、造假贩假之徒、钻营谋利之徒,甚至以钱买学历、买官(包括学生官)之徒,不乏其人。但是,这定然不是社会的常态,他们即使一时得意,也不会得到真正的尊重,更不能有尊严地生活。因为他们没做对社会有益的事情,只是害群之马。

针对高校排课、授课、考试中的乱象,上课时我对每个班的学生都郑重强调:“教师不是突击队长,学生不是突击队员,教育一定是一个润物细无声的过程。”“四十岁之后,我对滴水穿石这四个字情有独钟,滴水穿石有两大特点,一是定向积累,二是坚持不懈。”真正想在大学四年里学有所成的孩子,必须在学业上下滴水穿石的功夫。

考试临时突击,写毕业论文坦然抄袭,前者是鼠目寸光、投机取巧,后者是无知、无耻;前者是在沙滩上盖房子,后者是在挖社会道德大厦的根基。请问,突击一时者,能突击一生吗?抄袭一时者,能抄袭一世吗?如果中国的大学生都只会突击考试,只会抄袭别人的东西,国家能自立,国民能创新,社会能发展,民族能进步吗?梁启超先生早就告诫年轻人“学无根柢,最易堕落。”可叹、可悲的是,如今诸多大学生在入学后的第一学期已经开始不自觉地为日后的堕落奠基了。

至于争当学生官、参与组织各种社团活动,我的观点是,因人而异,因学习成绩而异,量趣、量力而行,不可强求一律。试想,如果自己无兴趣,如果自己无相关潜质可挖,如果自己学习成绩不理想,那又何必勉强应付。一定要明白,你上大学的第一任务是读书求学,而非求官或其他,前者是本,后者是末。如本末倒置,在学业上仅是应付考试,即使身兼多个官职,废寝忘食地组织无数次社团活动,那也是不务正业!正如工人就该好好做工,农民就该好好种地,医生就该好好治病,学生就一定应该好好求学,此乃天经地义!


原作者:姜兆儒(中国石油大学(华东)马克思主义学院 教师)
原文地址:http://blog.sina.com.cn/s/blog_6b61950f0100ra1o.html

2017-09-16

深度优先与广度优先搜索求解(以迷宫问题为例)


一、迷宫问题介绍


给定一个迷宫(以5×5为例),指明起点和终点,找出从起点出发到终点的有效可行路径,就是迷宫问题(maze problem)。

迷宫可以以二维数组来存储表示。0表示通路,1表示障碍。注意这里规定移动可以从上、下、左、右四方方向移动。坐标以行和列表示,均从0开始,给定起点(0,0)和终点(4,4),找出一条可行的线路(如果有,没有返回错误信息)。

二、求解思路



因为迷宫问题很难直接通过数学方法求解,故遍历是解决此问题的最有效方式。由数据结构的相关知识知,迷宫问题的求解可以抽象为连通图的遍历,故深度优先搜索和广度优先搜索是解决此问题的两种有效方法。

1、深度优先搜索(DFS)

其优点:无需记录前驱结点确认后退情况。

其缺点:找到的第一条可行路径不一定是最短路径。
(如果需要找到最短路径,那么需要找出所有可行路径后,再逐一比较,求出最短路径)

2、广度优先搜索(BFS)

其优点:找出的第一条路径就是最短路径。

其缺点:需要记录结点的前驱结点,来形成路径,开支较高。

三、数据结构知识补充(知晓请跳过此部分)



以下资料来自维基百科(中文版)对应词条,略做改动。


队列,即queue,是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现(在Java中可以直接将某一链表赋值给队列,我们稍后可能会在BFS算法中用到)。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。

堆栈,即stack,又称为栈或堆叠,是一种特殊的串列形式的数据结构(用一维数组或连结串列的形式来完成),其特殊之处在于只能允许在链接串列或阵列的一端(称为堆叠顶端指标,top)进行加入数据(push)和输出数据(pop)的运算;由于堆叠数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。

四、算法解释+代码实现



一、深度优先搜索(DFS)[代码由 韩宝坤 提供,感谢!]

韩宝坤先(da)生(lao)暂未给出解释说明,请大家根据代码自行理解……



二、广度优先算法(BFS)

我们从起点开始,将每一个坐标(基于Point类实例化的对象,同时记录当前位置和前步位置)排入队列中,然后在队列非空的情况下取出最上方的坐标对象(即最后一步的点)并压入堆栈并标记此位置被访问过,然后一次探索当前位置附近的四个位置以判断下一步的行走路线,若发现可行则建立新节点记录,同时排入队列,反之此路不通则放弃该路线,继续从队列中取出上一步的位置并继续探索,依次递归,直到进入迷宫出口。

出口位置通过最后一次的坐标(堆栈最顶端)的步数+1输出总步数,并从当前点坐标开始,依次取出堆栈中的元素,从而实现逆向输出此条可行路线,同时方法返回0,反之返回-1。主程序根据方法的返回值进行判断,若不为0则输出无可行路线。

以下为参考代码实现:

2017-09-08

了解一点位运算


严格来说,在团队程序开发里位运算是一个噩梦般的存在。毕竟不是每个人对这种奇特的运算感兴趣,但是总有程序员为了性能等各方面的考虑(特别是在大数据的处理方面)从而选择采用位运算。虽然位运算的写法相对晦涩难懂,但其性能提升明显也深受喜爱,故掌握和了解一点常见的位运算,为可能潜在的程序阅读和效率提升做些铺垫。

位运算基础


& 按位与:两个位都为 1 时,结果才为 1,否则返回0。

| 按位或:两个位都是 0 时,结果才为 0,否则返回1。

^ 按位异或:两个位相同时为 0,相异为 1。

~ 位取反:0 变 1,1 变 0。

<< 左移:各二进位全部左移若干位,高位丢弃,低位补 0。

>> 右移:将运算符左边的对象向右移动运算符右边指定的位数。不同编译器处理不尽相同,Java使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1。

应用


1、乘除2

左移运算等价于乘2,右移运算等价于除以2,其运算效率高于乘除法运算。

示例程序:

int a=100;
System.out.println(a<<1); //表示乘2 
System.out.println(a>>1); //表示除以2
System.out.println(a<<2); //表示乘4
System.out.println(a>>2); //表示除以4


运行结果:
200
50
400
25

2、判断奇偶数

我们通常采用偶数的数学定义(%2)来判断,由二进制原理知,二进制最后一位为0,则其转化为十进制后为偶数,若为1则十进制数为奇数,我们可以通过这个特点,与1进行按位与运算的结果判断是否为偶数。

参考实现:(本程序从键盘读入数字并进行判断)

    Scanner read;
    read = new Scanner(System.in);

    int a;
    a = read.nextInt();

    if ((a & 1) == 1) {
        System.out.println(a + "是一个奇数。");
    } else {
        System.out.println(a + "是一个偶数。");
    }




3、异或实现两个数字的交换。

先补充异或运算的两个性质,a^a=0;a^0=a。

未完待续……