《数据结构与算法(Python版)》课程教学大纲
一、课程信息及课程简介
(一)课程信息
课程英文 名称 | Data Structure and Algorithm(Python) | 学分 | 5 | 总学时 | 80 |
课程 编码 | 0701320008 | 理论 学时数 | 64 | 实践 学时数 | 16 |
适用 专业 | 信息与计算科学专业 | 先修课程 | Python |
开设课程学院 | 理学院 |
课程 类别 | □通识课程 □专业基础 ☑专业(☑必修 □限选 □任选) □实践环节 |
(二)课程简介
按照国家普通高校本科专业教学质量标准,《数据结构》是信息与计算科学专业的主干课程之一。数据结构是计算机各专业的专业基础课。它是操作系统、数据库、编译原理等软件专业基础课和专业课的重要基础;它还是进行程序设计,尤其是进行高水平的应用程序和系统程序设计必不可少的基础。
通过本课程的学习,使学生掌握数据组织、存储和运算的基本原理和方法,培养学生对各类数据结构和相关算法的分析和设计的能力,使学生能够编写出正确、清晰和较高质量的算法和程序。
二、课程目标
(一)具体目标
通过学习本课程,学习者应:
课程目标1:具有扎实的数学基础、掌握专业基础理论知识和专业技能(基础知识),具备熟练应用计算机的基本技能,能在信息处理、人工智能、科学与工程计算相关领域成功开展与专业相关工作;(职业能力)
课程目标4:具有国际视野,并能够跟踪数据处理领域前沿技术发展和较强的创新能力;(国际视野和创新能力)
课程目标5:具备批判性思维,能够通过终身学习适应职业发展,在数据处理和科学计算相关领域具有职场竞争力(持续发展)。
(二)课程目标与毕业要求的关系
课程目标 | 支撑的毕业要求 | 支撑的毕业要求指标点 |
课程目标1 | 毕业要求3.设计/开发解决方案:能够运用所学的数学方法和计算机技术解决信息与计算科学领域内的实际问题,能够在数据处理中运用新型计算理论。 | 能够利用各类算法方法对具体的问题进行建模,并设计有效算法,最终对实际问题给出有效的方法。 |
课程目标4 | 毕业要求4.研究:能够基于数学理论并采用科学方法对大数据相关问题进行研究,包括数学建模、分析与解释数据、并通过科学计算得到合理有效的结论。 | 能够运用相关基本科学原理,分析解释数据。 |
课程目标5 | 毕业要求5.现代工具:能够针对实际问题,使用恰当的技术和专业软件,设计和开发新技术或新方案,并将新技术用于预测和模拟。 | 有能力对实际问题具有联想、洞察能力、综合分析问题能力,进而能够利用Python解决问题。 |
三、课程教学内容对课程目标的支撑
(一)理论教学安排
章节或知识模块 | 教学内容 | 支撑课程目标 及基本要求 | 学时 分配 | 教学方法与 学生任务 |
第一部分 数据结构与算法
| 1.1 数据结构的概念、内容。 1.2 算法的概念、评价标准、 描述方法、性能分析。
| 支撑课程目标1
基本要求: 1. 了解数据结构、算法的基本概念。 2. 了解数据结构的地位。 3. 了解各种算法描述方法和算法设计的基本要求。 4. 掌握对算法的评价标准和算法效率的度量方法。 5. 通过学习了解目前中国在数据结构与算法领域的发展,树立民族自豪感与自信心,明白千里之行始于足下的道理。 | 2 | 教学方法:讲授法、案例法、讨论法、练习法等。
学生任务: 1. 理解逻辑结构和存储结构的区别。 2. 时间复杂度的分析和计算方法。
|
第二部分 Python开发环境
| 2.1 Python语言的发展。 2.2 Python语言特点。 2.3 Python程序开发工具介绍。 | 支撑课程目标1、5
基本要求: 1. 了解程序设计语言及其发展历史。 2. 了解Python语言的特点。 3. 掌握程序设计的一般过程。 4. 理解经典力学时空观的意义与局限性,树立科学的宇宙观。 5. 通过Python语言的学习和实践培养精益求精的“工匠精神”,提升专业自信和职业素养。 | 2 | 教学方法:讲授法、演示法、案例法、讨论法、练习法等。
学生任务: 1. Python语言环境安装及使用。 2. Python语言的基本结构。 |
第三部分 Python数据类型
| 3.1 常量、变量和表达式 3.2 Python的基本数据类型 3.3 运算符与表达式 3.4 列表 3.5 元组 3.6 字符串 3.7 字典 3.8 集合 | 支撑课程目标1、5
基本要求: 1. 理解数据类型的概念、作用以及Python语言的基本数据类型。 2. 掌握常量、变量基本概念。 3. 掌握Python语言各类运算符的含义、运算符的优先级和结合性、表达式的构成以及表达式的求解过程。 4. 掌握序列基础知识。 5. 熟练掌握列表的定义、常用操作和常用函数。 6. 熟练掌握元组的定义和常用操作。 7. 熟练掌握字典的定义和常用操作。 8. 掌握字符串格式化、字符串截取的方法。 9. 解与字符串相关的重要内置方法。 10. 熟练掌握字典的定义和常用操作。 11. 熟练掌握集合的定义和常用操作。 12. 能认识到应用算法解决社会实际问题的重要性和意义,能体会数据结构与算法与人和谐发展的关系。 | 8 | 教学方法:讲授法、演示法、案例法、讨论法、练习法等。
学生任务: 1. 数据类型的作用、变量的定义,各类运算符以及构成的表达式的求解。2. 序列、列表、元组的定义和常用操作。 3字典、集合的定义和常用操作; 4. 完成作业与练习。
|
第四部分 Python三大结构
| 4.1 数据的输入与输出 4.2 单分支选择结构 4.3 双分支选择结构 4.4 多分支选择结构 4.5 while循环结构 4.6 for语句结构 4.7 循环的嵌套
|
支撑课程目标1、5 基本要求: 1. 掌握程序的三种基本结构。 2. 掌握顺序结构程序设计。 3. 熟练掌握Python语言中输入输出格式的规则和用法。 4. 熟练掌握if语句的三种形式和用法以及if语句的嵌套使用。 5. 掌握选择分支结构的应用。 6. 熟练掌握循环结构while、for语句的规则和用法。 7. 熟悉continue、break、pass语句的用法。 8. 掌握循环结构的嵌套规则。 9. 利用算法的价值观,理解和评价大数据处理过程中对环境、社会可持续发展的影响。 | 8 | 教学方法:讲授法、演示法、案例法、讨论法、练习法等。
学生任务: 1. 数据的输入输出。 2. if语句的三种形式和使用方法。 3. 循环结构的应用。
|
第五部分 函数
| 5.1 函数的定义与调用 5.2 函数的参数及返回值 5.3 递归函数 5.4变量的作用域 5.5 模块 象 | 支撑课程目标1、5
基本要求: 1. 理解函数的作用。 2. 熟练掌握函数定义和函数调用的规则和用法。 3. 掌握函数参数传递的规则和用法;理解函数的嵌套和递归调用。 4. 掌握模块定义及导入方法。 5. 通过函数的学习,强调严谨求实的科学态度。启发引导学生运用辩证的观点看待问题、分析问题,在认识事物的时候,既要看到事物相互区别的一面,又要看到事物相互联系的一面。 | 8 | 教学方法:讲授法、演示法、案例法、讨论法、练习法等。
学生任务: 1. 函数的作用、定义和调用。 2.函数的参数传递、递归调用。 |
第六部分 线性表
| 6.1 线性表的逻辑结构定义、基本操作 6.2 两种存储结构中基本操作的实现; 6.3 栈的应用。 6.4 队列的应用。 6.5 串的应用
| 支撑课程目标1、4 基本要求: 1. 理解线性表的概念、定义、逻辑结构和存储结构。 2. 熟练掌握线性表的顺序存储结构及其各种基本运算。 3. 熟练掌握单链表等链式存储结构及其各种基本运算。 4. 结合算法学习,加深对辩证唯物主义的理解,提升思辨能力,透过现象看到隐藏的本质。
| 10 | 教学方法:讲授法、演示法、案例法、讨论法、练习法等。
学生任务: 1. 线性表的特征;顺序表、单链表的存储结构及其各种基本运算。栈和队列的特点、存储方式及基本操作;栈和队列的应用。串的模式匹配算法。 2. 顺序表和链表这两种存储表示方法的综合比较,静态链表的存储表示方法。采用栈和队列数据结构解决实际具体问题;串的KMP模式匹配算法。 |
第七部分 树与二叉树
| 7.1 树的概念 7.2 二叉树的定义、性质、存储结构 7.3 二叉树的遍历及基于遍历的应用 7.4 树、二叉树之间的转换 7.5 哈夫曼树及其应用
| 支撑课程目标 1、4 基本要求: 1. 理解树的基本概念及其存储结构。 2. 熟练掌握二叉树的定义、性质以及各种存储结构和遍历算法。 3. 掌握线索二叉树的概念、存储结构及线索化算法。 4. 掌握树和森林与二叉树间的转换,掌握哈夫曼树的概念、存储结构和应用。 5. 通过哈夫曼树的学习,培养精益求精、严谨求实的工作态度,弘扬工匠精神,培养爱国主义情操。 | 8 | 教学方法:讲授法、演示法、案例法、讨论法、练习法等。
学生任务: 1. 二叉树的遍历算法及基于遍历的简单应用。 2. 树和森林与二叉树间的转换。 3. 哈夫曼树的概念、存储结构和应用哈夫曼树构造哈夫曼编码。
|
第八部分 图
| 8.1 图的基本概念 8.2 图的存储结构; 8.3 图的遍历 8.4 图的应用 | 支撑课程目标 1、4 基本要求: 1. 理解图的基本概念。 2. 掌握图的邻接矩阵和邻接表的存储结构。 3. 熟练掌握图的深度优先和广度优先遍历算法。 4. 理解图的连通性、最小生成树的概念。 5. 掌握求最小生成树算法。 6. 掌握求最短路径的算法。 7. 通过图的学习,明白奋斗的过程远比最终的结果重要,正确面对成功与失败,学会实事求是的科学精神。 | 6 | 教学方法:讲授法、演示法、案例法、讨论法、练习法等。
学生任务: 1. 图的邻接矩阵和邻接表的存储结构。 2. 图的深度优先遍历算法和广度优先遍历算法。 3. 图的最小生成树算法、图的求最短路径的Dijkstra算法、Floyd算法。 |
第九部分 查找
| 9.1 查找的概念以及效率的评价方法 9.2 基于线性表的查找——顺序查找、折半查找、索引查找 9.3 基于树的查找—-二叉排序树、平衡二叉排序树 9.4 哈希查找法的概念和构造方法 |
支撑课程目标1、4 基本要求: 1. 理解查找的概念及其效率的评价方法。 2.理解静态查找表的概念,熟练掌握顺序、折半和分块查找算法。 3. 理解动态查找表和二叉排序树的概念。 4. 了解平衡二叉树的概念,创建调整过程。 5. 理解哈希表的含义,掌握哈希函数的构造和处理冲突的基本方法。 5.通过学习查找算法,学会运用宏观全局的战略眼光分析问题、解决问题,增强求真务实、实践创新、精益求精的精神。 | 6 | 教学方法:讲授法、演示法、案例法、讨论法、练习法等。
学生任务: 1. 顺序、折半查找算法、二叉排序树的插入、删除和查找算法。 2. 哈希函数的构造和处理冲突的基本方法;查找成功和不成功时的平均查找长度计算方法。
|
第十部分 排序
| 10.1 排序的概念以及排序算法的性能评价; 10.2 插入类排序——直接插入排序、折半插入排序、希尔排序; 10.3 交换类排序——冒泡排序、快速排序; 10.4 选择类排序——简单选择排序、堆排序; 10.5 归并类排序
| 支撑课程目标1、4
基本要求: 1. 掌握插入类排序的算法:直接插入排序、希尔排序。 2. 掌握交换类排序的算法:冒泡排序、快速排序。 3. 掌握选择类排序的算法:简单选择排序、堆排序。 4. 了解归并排序思想。 5. 通过学习逐步树立全局观念和大局意识,学会运用宏观全局的战略眼光分析问题、解决问题。
| 6 | 教学方法:讲授法、演示法、案例法、讨论法、练习法等。
学生任务: 1. 理解快速排序、堆排序、归并排序等排序算法的思想。 2. 掌握排序方法的平均时间复杂度、最坏时间复杂度和算法所需的辅助存储空间。 |
(二)课内实践教学安排
序号 | 项目名称 | 支撑课程目标及基本要求 | 学时 分配 | 类型 | 每组人数 | 教学方法与学生任务 |
1 | Python编程 | 支撑课程目标1、4、5
基本要求: 1. Python编程环境的安装及使用、顺序、选择结构的设计的应用。 2. 循环结构的设计方法及循环控制语句的应用。 3. 函数的定义、函数的嵌套以及递归调用,并体会函数的特点。 | 6 | 设计 | 1 | 教学方法:演示法、案例法、讨论法、练习法等。
学生任务: 掌握Python编程。
|
2 | 线性表 | 支撑课程目标1、4、5
基本要求: 1.栈的应用。队列的应用。串的应用。 | 2 | 设计 | 1 | 教学方法:演示法、案例法、讨论法、练习法等。
学生任务: 掌握栈、队列和串的应用。
|
3 | 树和二叉树 | 支撑课程目标1、4、5
基本要求: 1.二叉树的遍历算法及基于遍历的简单应用。 2.应用哈夫曼树构造哈夫曼编码。 | 2 | 验证、设计 | 1 | 教学方法:演示法、案例法、讨论法、练习法等。
学生任务: 掌握二叉树的创建、哈夫曼树和哈夫曼编码。
|
4 | 图 | 支撑课程目标1、4、5
基本要求: 1. 图的深度优先遍历算法和广度优先遍历算法。 2. 图的最小生成树算法、图的拓扑排序和关键路径算法、图的求最短路径的Dijkstra算法、Floyd算法。 | 2 | 验证 | 1 | 教学方法:演示法、案例法、讨论法、练习法等。
学生任务: 掌握最小生成树实现算法,最短路径算法。 |
5 | 查找 | 支撑课程目标1、4、5
基本要求: 1.顺序查找、折半查找、索引查找。 2.二叉排序树、平衡二叉排序树。 | 2 | 验证 | 1 | 教学方法:演示法、案例法、讨论法、练习法等。
学生任务: 掌握几种查找方法。 |
6 | 排序 | 支撑课程目标1、4、5
基本要求: 1. 直接插入排序、希尔排序。 2. 掌握交换类排序的算法。 3. 冒泡排序、快速排序。 4. 掌握选择类排序的算法:简单选择排序、堆排序。 5. 了解归并排序思想。 | 2 | 验证
| 1 | 教学方法:演示法、案例法、讨论法、练习法等。
学生任务: 掌握集中排序方法。 |
注:实验类型:演示、验证、操作、综合、设计、研究。
四、考核方式及成绩评定
(一)考核方式
课程考核方式分为过程考核和期末考核。过程考核方式包括平时作业、阶段性测试、课内外学习表现等;期末考核采用闭卷考试方式。
(二)成绩评定
1.总成绩评定
总成绩 = 过程考核成绩*60% + 期末考核成绩*40%
2.过程考核成绩评定
过程考核成绩(100%) = 考核方式A(30%) + 考核方式B(20%)+ 考核方式C(50%)
成绩评定方式:
(1)考核方式A:课程作业:围绕课程目标进行作业的设计,考核学生对于概念的理解情况,以及学生对于知识点的掌握、应用情况;
(2)考核方式B:课内外学习表现:围绕课程目标对学生的出勤情况、线上线下学习任务的完成情况进行考核,综合评价学生科学素养的提升、责任感的树立情况;
(3)考核方式C:课程实践:通过课外进行实验预习,对实验内容进行分析和设计,写出基本的待测程序代码。教师在实验课上监督实验进行情况,同学生进行必要的讨论,老师要对实验的中间过程和最终结果进行检查,并将检查结果作为实践考核成绩的依据。
3.期末考核成绩评定
期末考核主要围绕课程目标考察学生对基本概念、相关理论和具体方法的理解与综合运用能力等;方式为闭卷考试;要求学生掌握基本概念、相关理论,运用具体方法解决相关问题。
(三)课程目标达成的考核评价方式
课程目标 | 考核评价方式 |
过程考核 | 期末 考核 |
课程作业 | 课内外学习表现 | 课程实践 |
课程目标1 | √ | √ | √ | √ |
课程目标4 | √ | √ | √ | √ |
课程目标5 | √ | √ | √ | √ |
(四)课程目标达成的考核评价标准
课程目标 | 考核评价标准 |
高于预期 | 达到预期 | 低于预期 |
优秀 | 良好 | 合格 | 不合格 |
课程目标 1、4、5
| 课程作业:对数据结构基本理论及相关算法理解完全正确,解题过程书写工整,无错。 | 课程作业:对数据结构基本理论及相关算法理解基本正确,解题过程基本无错。 | 课程作业:对数据结构基本理论及相关算法理解有一些错误,解题过程有一些错误。 | 课程作业:对数据结构基本理论及相关算法理解错误较多,解题过程有大量错误。 |
课内外学习表现: 积极参与教学互动 | 课内外学习表现: 愿意参与教学互动 | 课内外学习表现: 参与教学互动 | 课内外学习表现: 不参与教学互动 |
课程实践:积极参与实践教学互动,讨论全参与。 | 课程实践:参与实践教学互动,参与讨论。 | 课程实践:参与实践教学互动。 | 课程实践:不参与实践教学互动和讨论。 |
期末考核:对基本概念、相关理论的理解与应用完全正确或比较正确,基本无误,卷面成绩达到优秀。 | 期末考核:对基本概念、相关理论的理解与应用较为正确,错误较少,卷面成绩达到良好。 | 期末考核:对基本概念、相关理论的理解与应用存在较多问题,有一些错误,卷面成绩合格。 | 期末考核:对基本概念、相关理论的理解与应用存在大量错误,卷面成绩不合格。 |
五、课程反馈
学生可在学习过程以及学习结束后,根据课程的学习情况及时从任课教师处获得学习反馈,以便改进学习。任课教师主动进行过程反馈,在过程中根据学生学习情况,调整优化教学内容和方法,使学生达成课程目标。
六、课程评价与改进
课程考核结束后,任课教师应遵循学院教学工作委员会通过的课程达成评价机制和评价方法,对本课程的课程目标达成进行评价,出具课程达成评价报告,并报学院教学督导委员会审核。教师根据评价结果,撰写授课总结和改进计划,完善课程目标及考核方式,改进教学方法,优化教学内容,以便更好地支撑毕业要求的达成。
七、教材及主要参考书目
[1] 周元哲. 数据结构与算法(Python 版). 北京:机械工业出版社,2020.
[2] 周元哲,刘伟,邓万宇. 程序基本算法习题解析. 北京:清华大学出版社,2018.
[3] 周元哲. Python3程序设计基础. 北京:机械工业出版社,2019.
制订人: 杨晓梅 (修订日期: 2023年 7 月)
审订人: 林洪伟、李德浩 (审订日期: 2023 年 7 月)