前言

智能算法通识教程信息时代,人和计算机的交互越来越多,编程思维或者说程序思维会成为一项通识教育。理解计算机解决问题的方式和利用计算机解决问题的方法,越来越成为每一个专业的人都必须学习的内容。传统程序设计语言的通识教育是每个人都是编程知识树的主干,每遇到新的问题都可以用已有的编程语言知识消化吸收,进而每一步编程经历的积累都是给自己的知识树添枝增叶。日积月累,程序可以不知不觉地写得更快、更简洁易懂、更少错、更安全,也会更容易学习理解新的编程语言和软件框架。
通识的程序设计教育已经初具雏形,但更进一步的算法通识教育却仍未被普罗大众和业界重视。由于早期算法教育具有较高的门槛,大部分人对智能算法还是比较陌生的。随着近些年信息化社会的不断发展,我们的工作、生活和学习与互联网的结合越来越紧密,而智能算法作为互联网的“普通话”,也正逐渐成为现代人的必备技能之一。未来是一个智能化社会,而智能化社会的代表就是我们的身边会围绕越来越多的智能体(Agent),这些智能体将是我们工作、学习和生活的伙伴,而智能算法正是与这些智能体交互的重要手段,所以智能算法教育一定会得到更广泛的普及。
“智能算法通识”课程的主要目的是模拟学生在未来的专业科学研究中实际遇到问题时可能要面对的各种情况。所以,本教材在设计实验和考察方法时,不苛求学生必须从零开始编写一个完整的程序,在实际工作中这样既不实际又毫无必要;而是可以从一个局部程序段,一个第三方程序框架开始,逐步加入自己的代码,步步为营,最终解决自己的问题。
本教材教学内容作为基础课和专业课之间计算机能力培养的桥梁,要求学生必须具备一定的程序设计基础。本教材配套课程从培养学生的算法技能出发,让学生通过对若干适用于大多数专业的通用算法的编程实际练习,在实验中锻炼寻找算法库、使用算法库解决自己专业应用问题的能力。
本教材共9章,主要内容组织如下。
第1章,绪论部分,介绍课程的总体情况,了解算法的相关概念,对课程涉及的一些编程语言细节和函数库进行讲解。
第2章,熟悉数论相关算法,会用数值法求解基本数学问题,如多项式四则运算问题、多项式插值问题、非线性方程求解和线性方程组求解问题等。
第3章,掌握线性表的定义及其运算,掌握顺序表和链表的定义、组织形式、结构特征和类型说明以及在这两种表上实现的插入、删除和查找的算法。掌握栈和队列的定义、特征及在其上所定义的基本运算,以及在两种存储结构上对栈和队列所施加的基本运算的实现。
第4章,掌握树的定义、性质及存储方法。掌握二叉树的链表存储方式、结点结构和类型定义、二叉树的遍历算法以及哈夫曼树的构造方法。掌握图的基本概念及术语,图的两种存储结构(邻接矩阵和邻接表)的表示方法,图的遍历(深度优先搜索遍历和广度优先搜索遍历)算法,最小生成树的构造。
第5章,掌握贪心算法的基本概念,了解贪心算法的性质和优缺点,了解最优解/次优解与计算性能之间的关系,掌握图的最小生成树生成算法、Prim算法和Kruskal算法。
第6章,掌握动态规划的基本概念,了解动态规划算法的基本思想、适用情况以及求解基本步骤;了解最优性原理;掌握典型动态规划问题的解决: 01背包问题和最长公共子序列问题。
第7章,了解遗传算法的概念和设计方法;学会函数最值和旅行商问题的求解。
第8章,了解人工神经网络和深度学习的概念,了解感知器算法和BP算法。
第9章,了解群体智能算法的原理和开发流程。
本教材相关内容已在西安交通大学试用了5年,达到了最初的设计目的,试用效果良好。受篇幅、时间及作者水平等限制,书中不妥之处,恳望广大读者批评指正。



作者2023年4月