浅谈面向企业应用的“算法设计与分析”课程建设改革探索

来源:岁月联盟 作者: 时间:2014-06-01
                           作者:高丽萍 彭敦陆 邓桂英 陈庆奎

  论文关键词:企业导向 算法设计与分析 创新型 
  论文摘要:“算法设计与分析”是计算机科学与技术专业的一门核心课程,是一门理论性与实践性相结合的课程。学生在这门课程的学习过程中过分注重基础理论的学习,动手能力差,不具备算法创新的思想,无法适应世界著名的IT公司大对软件人才的要求。文章讨论了企业用户对员工算法分析与设计能力的需求,针对目前该课程教学中存在的问题,就教学目标、教学内容、教学方法及考核评价等方面进行教学改革,以提高学生的综合能力和教学质量。 
   
  算法是计算机学科中最具有方法论性质的核心概念,也被誉为计算机学科的灵魂。“算法设计与分析”是计算机科学与技术专业的一门非常重要的专业基础课,在整个专业教学体系中占有重要地位。这门课程的学习,不仅是对学生前面所学的“程序设计”、“数据结构”、“离散数学”、“线性代数”等课程的理论延伸和强化,而且对后续课程如“编译原理”、“人工智能”、“计算机图形学”的学习及培养学生分析问题、解决问题的能力和软件设计与开发的能力起着至关重要的作用。 
  当前著名的IT企业特别注重应聘者算法设计与分析方面的能力。这些公司往往要对应聘者进行2-4轮的算法面试,要求面试者在给定的时间内(通常5-15分钟)给出具体问题的抽象数学模型、设计相应的数据结构及算法描述和效率分析。这就要求应聘者对算法设计及分析拥有坚实的理论基础,并具有敏捷的思维,能够在短期内归纳问题的实质,找出多种求解方案并且能够对各种方案的优劣性进行分析比较。 
  一、教学目标 
  由于我们学校的本科教学目标是适应社会发展的需要,培养与企业要求接轨的应用型人才。因此,“算法设计与分析”这门课程的教学目标应该是:要求学生在学完这门课程后应能够掌握算法设计与分析的基本理论和方法,了解新兴算法的原理及应用,并培养学生抽象模型搭建、启发式求解、创新求解、发散思维等方面的能力。具体目标如下。 
  1.重视学生抽象数学模型搭建的能力的培养。 
  数学模型是利用数学语言(符号、式子与图像)模拟现实的模型。把现实模型抽象、简化为某种数学结构是问题求解的第一步。简单问题仅需要一两种数学模型就可以进行描述,而复杂问题则往往需要多种数学模型彼此关联相互整合而成。数学建模是算法设计的前提,是构建现实问题与算法实现之间桥梁的关键。现代企业需要的不是理论家,而是能够解决实际问题的技术人员,因此必须重视学生这方面能力的培养,使学生具备基本模型构建能力。 
  2.重视学生发散式思维的训练 
  发散式思维是指在学习研究、工作中,根据提供的信息,沿不同方向寻求多样的、独特的答案的一种思维方式。它本身有不依常规、寻求变异、探索多种答案的特点。具有发散式思维的人一般具有回避老一套方法的强烈愿望。在提高人的发散式思维能力方面,创造性心理品质就大有用武之地。培养和拓展学生的发散式思维,做到“一个问题,多种求解”,可以启迪学生智力,提高学生举一反三,对比分析,灵活应变,多方位思考及想象创新的能力。 
  3.重视对学生适用性知识的传授 
  结合时代发展的潮流和趋势,针对目前流行的新兴技术和方法(例如:团购网站、社交网络、垂直主体搜索、并行算法、启发式搜索算法、遗传算法、蚁群算法、近似算法等),给学生进行一定的讲解和展示,进行相应的案例分析,使之了解其中重要的模型和算法,了解其基本原理,以达到与社会需求直接接轨的目的。因为很多公司在研发过程中新兴算法的使用频度要远远高于经典算法。对新兴算法有所了解,有助于入职者尽快适应岗位需求。 
  二、教学内容 
  “算法设计与分析”所涉及的领域非常广泛,通常包括下面几方面的内容:各种基本和经典的算法,如排序算法、图的搜索算法、组合算法、数值计算算法、递推法、枚举法、分治法、贪婪法、动态规划;关于算法分析和算法设计策略、可计算性理论和问题复杂性等方面的理论研究,如计算模型、问题复杂度分析、函数渐进分析等理论;各种新兴算法,如压缩算法、加密算法、人工智能算法、并行算法、随机算法、近似算法、搜索引擎算法、遗传算法等方面的理论及应用研究。我们根据“算法设计与分析”的教学目标,本着“设计与分析并重,基础与应用结合,经典与现代互补”的原则,进行教学内容的选取。具体包括如下几个方面。 
  “引入章”介绍算法设计与分析的基本步骤,其中包括数学模型构建、“自顶向下、逐步求精”的算法设计过程、循环和递归的设计要点、数据结构的选择及应用,函数渐进分析及算法复杂性度量等内容。 
  “核心篇”介绍各种常用的算法策略,如递推法、枚举法、分治法、贪婪算法、动态规划及与图搜索有关的算法策略,并对算法策略进行总结比较。 
  “应用篇”针对具体的应用,采用不同的数学模型、不同的数据结构或不同的算法策略进行算法设计,并进行效率分析。引导学生能够针对具体问题,进行自主的算法设计及分析。 
  “提高篇”介绍本学科领域的最新进展,讲述并行算法设计技术、概率算法、近似算法、遗传算法、搜索引擎算法等。 
  在以上各个部分的讲授过程中,还注意引导学生进行数学模型的构建。 
  三、教学方法 
  从面向企业需求出发,以培养创新精神和提高实践能力为目标,本课程可以采用多种教学方法,充分发挥学生学习的能动性和积极性。 
  1.理论与实践相结合 
  算法可以有多种描述方式,例如自然语言描述、类C语言描述、类Java语言描述等。这些描述无法直接在程序设计环境下编辑和执行,必须进行一定的转化。笔者在教学过程中,经常碰到学生追问“为什么我一字不差地把书上的代码输入到计算机中,却无法运行?”学生在初学算法时,往往无法理解算法描述和程序设计语言之间的区别和关联,总是试图按照程序设计的方法,将算法描述直接输入编辑环境进行编译和调试。因此,在学生学习算法理论的同时,应当引导学生将理论用于实践,完成算法到程序的完美转换。 
  2.设计与分析相结合 
  学生在学习过程中,往往只重视算法设计过程,而忽视算法的性能分析。而事实上,算法性能分析在本课程中占有非常重要的地位。通过算法分析可以在不同算法之间进行对比,例如对于排序、查找、最短路径等常用算法已经有很多种,不同算法通常在设计思想、时间和空间性上有其不同的特点,所以在讲授时不仅要把算法思路讲清楚,更应该通过不同算法之间的对比来分析其特点及应用方向。通过对比学习,一方面可以加深学生对所学知识的系统化理解,另一方,有利于引导学生在进行算法设计过程中注重算法效率的提升。