内容正文:
《寻找最短的路径》教学设计
教材版本:义务教育信息科技课程资源(五年级)
课时安排:1课时(40分钟)
授课对象:五年级学生
一、教材分析
本课是五年级第七单元第三课,基于2022年版课标"身边的算法"模块,学习路径规划算法中的动态规划思想。教材以"9地点街道网格"为情境,通过"枚举局限→问题分解→局部计算→组合全局"的探究路径,引导学生理解"将全局最短路径转化为局部最短路径递推"的算法本质。本课是规划算法的"深化课",既是对过河问题"分而治之"思想的数值化应用,又是对递推算法"前项依赖"的二维扩展,为后续学习Dijkstra算法、Flyd算法埋下伏笔,体现"科"(最优子结构思想)与"技"(递推计算)并重的课程理念。
二、学情分析
1.认知基础:学生已掌握递推算法(兔子问题)和问题分解(过河问题),能用fr循环实现一维数列的递推计算,但对"二维网格"中"多点来源的最小值选择"(min(上+上路径, 左+左路径))的动态规划思想缺乏认知;对"状态空间"、"最优子结构"等概念感知模糊。
2.能力特点:对"找最短路径" 有生活经验(如导航),具备初步的网格定位与坐标意识,适合在"填表计算→规律发现→递推公式→程序验证"的表格驱动探究中建构最优路径思维。
3.学习障碍预测:难以自主建立"到某点的最短路径 = min(上方点最短路径+上边走时, 左方点最短路径+左边用时)"的递推关系;对"只能右、下行走这一单调性约束的算法价值(保证无后效性)理解不深;在手动填表时易因计算顺序错误(未先算左上再算右下)导致结果错误;对"局部最优→全局最优"的正确性证明无直观感知。
三、教学目标(对应核心素养)
1.计算思维:通过计算网格最短路径,能描述"状态定义→状态转移方程→初始化→递推求解"的动态规划四步法,理解最优子结构(全局最优包含局部最优)是问题可分解的关键。
2.信息意识:感知枚举法与动态规划法在时间复杂度上的指数级 vs 多项式级差异,体会算法设计对问题求解效率的决定性作用,理解针对问题特征选择算法的重要性。
3.数字化学习与创新:能手绘递推计算表,通过自顶向下(从起点开始)或自底向上(从终点倒推)两种顺序计算各点最短路径,尝试用Pythn二维列表dp[i][j]存储状态,体验数据结构对算法实现的支撑。
4.信息社会责任:认识到最短路径算法是导航、物流、电力等社会基础设施的核心支撑,理解算法研究服务国计民生,养成"算法优化=资源节约"的社会责任感。
四、教学重难点
重点:理解最短路径问题的动态规划解法,掌握递推公式:dp[i][j] = min(dp[i-1][j] + time_up, dp[i][j-1] + time_left),并能按行/按列顺序手动计算。
难点:理解"只能右、下行走"的约束如何保证无后效性(后续决策不影响前面已确定的最优解);掌握计算顺序(拓扑序),确保计算dp[i][j]时dp[i-1][j]和dp[i][j-1]已算出。
五、教学准备
教师准备:教学课件、3×3网格地图大图(每个边标注时间)、递推计算表磁贴(9个格子)、Pythn程序(最短路径动态规划.py、暴力枚举对比.py)、学习单(含填表练习、状态转移方程填空、程序补全)。
学生准备:记录本、复习递推算法,思考"如何记录到每个地点的最短用时"。
六、教学过程
环节一:情境导入,导航激趣(3分钟)
活动1:导航的秘密
生活联想:教师提问:"从家到学校,导航为什么能瞬间找出最快路线?是试遍所有路吗?"(不是,有算法)
认知冲突:"如果城市有100个路口,枚举所有路径要试2^100次,比宇宙原子数还多!导航怎么办?"
目标揭示:"今天学习聪明算法——动态规划,像搭积木一样,从起点一块块算出最优路线!"
设计意图:从生活场景切入,制造枚举不可行的认知冲突,激活学生经验中的"最优路径"需求,引出高效算法主题。
环节二:任务分析,枚举局限(8分钟)
活动2:暴力枚举为何不行
1.问题建模(3分钟)
课件展示:3×3网格地图,标注A(家)→I(学校),边上有时间(如A→B=3分钟,A→D=2分钟)。
学习单任务一:学生数从A到I的所有可能路径条数(在3×3网格中,从左上到右下需走4步,2右+2下,共C(4,2)=6条)。
追问:"如果是5×5网格(6右+6下),多少条?"(C(12,6)=924条)"10×10呢?"(C(20,10)=184756条,指数增长)。
2.枚举局限分析(3分钟)
小组讨论: "枚举法有什么问题?"(路径多、易遗漏、算得慢)
教师提炼: "枚举是暴力破解,适合小规模;大规模问题需智能算法。"板书"枚举:穷举所有,指数爆炸"。
3.问题分解引路(2分钟)
提问: "我们不直接求A→I,先求A→B的最短时间?"(3分钟)"A→D?"(2分钟)"A→E?"(min(A→B→E, A→D→E))
渗透思想: "答案藏在局部里!
设计意图:通过路径计数让学生直观感受组合爆炸,理解枚举法的不可扩展性,通过局部提问引导分治思路,为动态规划埋下伏笔。
环节三:递推计算,局部求解(12分钟)
活动3:填表算出最优路
1.状态定义(3分钟)
教师示范: 在网格旁画出递推表(3行3列格子),定义"dp[i][j]表示从A到第i行第j列点的最短用时"。
学习单任务二:学生画表,标注坐标(A是dp[0][0],B是dp[0][1]...I是dp[2][2])。
2.初始化与边界(3分钟)
计算起点:"dp[0][0] = 0"(A到A用时0)。
计算第一行:"dp[0][1] = dp[0][0] + 3 = 3","dp[0][2] = dp[0][1] + 2 = 5"(只能从左来)。
计算第一列:"dp[1][0] = dp[0][0] + 2 = 2","dp[2][0] = dp[1][0] + 3 = 5"(只能从上带来)。
学习单任务三:学生填写完成第一行、第一列。
3.递推核心计算(6分钟)
教师演示E点: 在表中圈出E点,写计算式:
dp[1][1] = min(dp[0][1] + 1, dp[1][0] + 3) = min(3+1, 2+3) = min(4,5) = 4
"上方来" vs " 左方来",选小的。
学生实践:按行优先顺序(B→C→E→F→D→G→H→I)计算剩余格子,填写递推公式和结果。
关键强调:计算E时,B和D已算出;计算F时,C和E已算出——计算顺序=拓扑序。
设计意图:通过手绘递推表将二维动态规划过程可视化、步骤化,重点突破状态定义、递推公式、计算顺序三大核心,在手动计算中内化最优子结构思想。
环节四:规律提炼,算法形式化(7分钟)
活动4:把聪明办法说给计算机听
1.递推方程抽象(3分钟)
师生共建:板书通用递推方程:dp[i][j] = min(
dp[i-1][j] + time[i-1][j]→[i][j], # 从上方来
dp[i][j-1] + time[i][j-1]→[i][j] # 从左边来
)
学习单任务四:学生用文字描述方程含义:"到当前点的最短时间 = 上方点最短时间 + 上边走时 与 左方点最短时间 + 左边用时 的较小值"。
2.无后效性讲解(2分钟)
提问:"为什么计算E时,不用关心A→B的具体路径是什么?"(只关心B的最优值,路径细节不影响后续)
概念引入:这就是"无后效性"——未来决策不依赖历史细节,只依赖当前状态的最优值。
3.与枚举对比(2分钟)
板书对比:
枚举法:时间复杂度(2^(m+n)),指数级
动态规划:时间复杂度(m×n),多项式级
结论:"动态规划 = 聪明的记忆 + 有序的递推",避免重复计算。
设计意图: 通过符号化方程将具体计算升华为通用算法,通过无后效性讲解突破动态规划的理论基础,通过复杂度对比深化算法效率意识,实现从术到道的认知飞跃。
环节五:程序验证,算法实现(8分钟)
活动5:让最优路径"跑"出来
1.代码结构分析(3分钟)
课件展示: Pythn代码框架(二维列表dp和time)。
学习单任务五: 学生补全关键代码:# 初始化dp表,全为0
dp = [[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
# 计算第一行
fr j in range(1, 3):
dp[0][j] = dp[0][j-1] + time[0][j-1]
# 计算第一列
fr i in range(1, 3):
dp[i][0] = dp[i-1][0] + time[i-1][0]
# 递推计算内部
fr i in range(1, 3):
fr j in range(1, 3):
dp[i][j] = min(____ + time[i-1][j], # 填空:dp[i-1][j]
____ + time[i][j-1]) # 填空:dp[i][j-1]
2.运行观察(3分钟)
学生实践: 运行程序,打印dp表,验证是否与自己手算结果一致。
调试技巧:在min语句后加print(f'dp[{i}][{j}]={dp[i][j]}, 来自上方={dp[i-1][j]+time[i-1][j]}, 来自左方={dp[i][j-1]+time[i][j-1]}'),观察决策过程。
3.参数修改验证(2分钟)
学生挑战:修改time矩阵(如A→B=5,A→D=1),重新计算,观察最优路径是否变化(路径可能变,算法不变)。
设计意图:通过代码补全→运行验证→参数修改,实现算法到程序的精准映射,重点突破双重循环与min函数的实现,培养调试观察能力,体会算法的健壮性。
环节六:应用拓展,算法价值(2分钟)
活动6:算法改变世界
应用列举:教师快速展示导航系统、物流配送、电网布局、通信网络等最短路径应用场景图片。
价值升华:"动态规划不仅是算法,更是资源配置的智慧——每一步选择最优,全局必然最优,这就是最优化原理。"
作业布置:
必做:完成学习单"5×5网格最短路径计算"(提供time矩阵)。
选做(二选一):
A.研究类: "若允许右、下、右下(对角线)行走,递推公式如何修改?"(提示:来源增加dp[i-1][j-1])
B.实践类: "用百度地图规划从家到学校的路线,思考地图软件用什么算法"(A*算法,动态规划的变种)。
设计意图: 通过应用拓展将算法与社会基础设施链接,渗透社会价值;通过拓展问题(对角线)深化算法灵活性理解;通过生活实践将课堂延伸到现实世界。
七、板书设计
第26课 寻找最短的路径
动态规划 = 分治 + 记忆
递推表 dp[i][j]
0 3 5
2 4 6
5 5 7 ←最优值
状态转移方程:
dp[i][j]=min(
dp[i-1][j]+time_up,
dp[i][j-1]+time_left)
无后效性:只关心最优值
八、作业设计
必做作业: 完成学习单"4×4网格最短路径计算"(16个格点),要求写出递推表和最优路径。
选做作业(二选一):
A.研究类: "若网格中某条边不可通行(时间为∞),递推公式如何处理?"(提示:min时忽略∞来源)。
B.实践类: 用Pythn编写函数def min_path(grid),输入time矩阵,返回最短时间,测试5×5网格。
九、教学评价设计
评价维度
评价指标
评价工具
评价主体
算法理解
能写出dp[i][j]的递推公式并说明含义
学习单任务四
教师观察+自评
计算能力
能正确填写3×3递推表
学习单任务三
教师批改+互评
程序实现
能补全双重循环中的min语句
学习单任务五
教师评价
拓展思维
能说出对角线行走的公式修改思路
课堂问答
教师评价
十、教学反思要点
1.手动填表的认知负荷:3×3网格的9个格子计算量适中,但学生可能因顺序错误(先算I再算E)导致依赖值未算出。需准备"计算顺序指引卡",规定"按行从左到右,按列从上到下",并投影动画逐个高亮当前计算格子。
2.递推公式的符号化障碍:学生从具体数值(如3+1)到dp[i-1][j]+time[i-1][j]的符号跳跃困难。需准备"公式翻译卡",左侧写"从B到E",右侧写"dp[0][1] + time[0][1]",建立概念到符号的映射。
3.无后效性的深度理解:学生可能机械套用公式而不理解为何要取min。需设计 "路径对比图" :画出A→B→E和A→D→E两条路径,高亮到E点时只保留短的路径,剪掉长的分支,可视化"最优剪枝"思想。
4.生成性资源的应用:收集学生5×5网格的计算表,作为下节课"回溯法找路径"的输入数据,实现单元内"先算值、再找路的无缝衔接。
5.时间分配的弹性控制:环节三"递推计算"易超时。需准备 “递推表半成品”(只填第一行第一列),让学生只需计算内部4个格子,将时间留给公式理解与程序验证,而非机械计算。
学科网(北京)股份有限公司
$