融通·激活·重构:大概念统领的算法单元教学策略探索

作者: 胡金锦

融通·激活·重构:大概念统领的算法单元教学策略探索0

摘要:本文以高中信息技术“排序算法”为例,探索大概念统领下单元教学的有效策略,通过寻找单元内容的融通点,将排序算法与学生已有知识和生活经验融通,通过问题链和活动串激活学生思维,引导学生自主探究与合作学习,通过重构知识体系,培养了学生的批判性思维和创造性思维,提高了学生解决问题的能力。

关键词:融通;激活;重构;大概念;算法单元教学

面向核心素养的高中信息技术教学促使教师从“关注知识点的课时设计”向“大概念统领的单元设计”发展。因此,教师在教学中应摆脱课时主义的束缚,要基于《普通高中信息技术课程标准(2017年版)》,在学情分析的基础上,立足学科大概念,依托有意义的情境,把真实的问题带进课堂。让学生体验发现问题的惊喜、解决问题的迫切需求、问题解决后的自我肯定与满足,经历从解构到重构的完整的学习过程,促进学生内驱力的提升。为实现上述目标,笔者提出“融通·激活·重构”的教学策略,将单元内容与学生已有的知识经验融通到学生熟悉的情境中,提出相关问题,激活学生思考,让学习在活动、实践、探究的过程中真实发生,将知识重构为真知识。下面,笔者以“排序算法”为例进行具体的做法分析。

寻找单元内容的融通点

寻找单元内容的融通点是为了打通单元内部、单元之间的逻辑联系及现实生活与学科知识之间的隔阂。教师若能把握这些融通点,构建恰当的教学情境,引导学生像学科专家那样发现并解决问题,则能帮助学生熟练掌握知识和技能,在更深层次上领悟并应用知识。

1.对“排序算法”的生活化融通分析

教师构建“如何整理杂乱无章的书架”的生活情境,学生会提出多种方案,教师引导学生思考不同方法的需求和效率差别(如下页表)。通过引导学生分析不同的整理方法,可以培养学生选择合理算法解决实际问题的能力,并加强算法实现的时间与空间认知观念。

2.“排序”算法流程界定的生活化融通演示

解决一个问题往往存在不同的算法与策略。为帮助学生朝着同一方向探讨,需要先界定问题的处理规则与流程,即算法。在教学中,笔者选择了一种学生最易编程实现的算法:将书籍按高度逐一插入书架合理位置。例如,在书籍的插入过程中可以明显地看到插入点后的书籍后移(如图1)。

通过层层剖析和问题链的逐步引导,将复杂的插入排序问题分解为若干学生已经掌握且易于解决的小问题,即“在已排序的书籍中寻找插入位置——顺序查找算法”“书籍后移——模拟算法”“插入书籍——赋值”。

3.“排序算法”编程实现与动画演示的融通推演

为了让学生能够更加精准地描述排序算法,课中教师给学生提供了插入排序演示动画。结合演示动画,将插入排序的核心步骤细化为“确定插入位置”“将插入位置及以后的元素依次向后移动一位”“插入数据”等关键环节,逐一代码实现。将插入排序分解为一系列小而具体的子问题更具可解性和可操作性,不仅能有效整合学生既有的经验,同时还有助于深化学生对计算机科学思想源于生活实践的理解,对学生核心素养的培育具有积极的意义。

寻找生产知识的激活点

知识的获取并非学习的终极目的,学习的最高境界是激发学生“生产知识”的潜能。教学中要着重探索激发学生自主探究的激活点,引导学生深入参与知识解构到重构的过程,使他们洞察知识生成的内在逻辑,进而“生产知识”。

1.“生产知识”学习的激活路径

传统“排序算法”单元教学往往以冒泡排序、选择排序等算法为专题设计,这种方式割裂了同类算法之间的内在联系,学习内容缺乏结构化,无法有效整合与内化所学内容。“生产知识”的学习方式可以有效激活算法大概念中“排序”这个二级概念的学习,如图2所示。

2.“生产知识”学习的问题链激活

在插入排序学习的过程中,通过问题链激活学生从空间效率与时间效率两个维度去优化已实现的插入排序算法。问题包括:“能否使用单一数组实现插入排序?”“能否将查找与数据移动的过程合并?”“能否用元素两两交换替代元素移动?”“能否将while语句结构转换成for语句结构?”“能否通过两两交换保留交换过程中最大值从而得到无序段的最值(冒泡排序)?”

3.“生产知识”学习的活动串激活

通过问题链形成活动串,让学生通过自主探究与合作学习,开展代码优化与迭代实践探索。尽管冒泡排序的学习过程原本不必这么复杂,但是通过优化活动串,让学生探索并深刻理解优秀算法是如何通过不断迭代而推陈出新的,有利于学生在编程实践中形成“时空”观念,总结利用计算机解决问题的过程与方法,并迁移到与之相关的其他问题解决中。

寻找新旧知识的重构点

1.引发认知冲突,凸显重构点

在排序算法学习中,冒泡排序由于元素两两比较,只要记录某趟排序最后一次发生交换的位置,该位置前的元素序列即为全局有序(根据两两元素间大小的传递性),如图3所示。

因此,待排序列有序性越好,优化后的冒泡排序的趟数越少。但对于选择排序,由于每次都是在无序序列中挑选一个最值,无论待排序序列是否有序,其比较趟数几乎不受影响。学生通过网络或在资料中找到的双向选择排序(鸡尾酒排序),每趟记录最大值与最小值,然后与无序序列两端元素进行交换,看似选择排序趟数减少了一半,实则循环体内做了两次判断,最终比较次数不受影响。此时,选择排序通过算法维度优化的路走不通了,冒泡排序比选择排序的想法深入人心。那么,我们是否可以从改变数据结构的角度进一步优化插入排序代码?为了引发学生认知冲突,教师将普通选择排序代码与奇偶分组选择排序代码做了对比测试。随着数据量的增大,学生惊讶地发现,优化后的选择排序代码执行效率提升了几乎一倍。认知冲突的发生,为学生学习提供了一个教育契机。

2.“重构”策略设计与体验不断迭代思维的形成

基于奇偶数据结构优化的选择排序策略如下。

(1)数理分析,优化排序数据结构模型

我们将数组a(1)~a(n)看成由奇数位与偶数位构成的两行:

a(1)  a(3)  a(5) ... a(n-1)

a(2)  a(4)  a(6) ... a(n)

*如果n为奇数,则最后一个元素是第1行最后1列。

在这样的视角下,变化出现了:

①奇数位与偶数位进行比较交换,将较大数交换到奇数位置。这样,每一列总是奇数位置的数大。

a(1)≥a(2),a(3)≥a(4),a(5)≥a(6),...,a(n-1)≥a(n)

②在奇数位置中找最大值a(j),这个最大值毫无疑问是全局最大值a(j)。

接下来我们要做两个非常重要的交换:

A.a(j)与a(n)交换,这样就把最大值交换到最后(升序排序)。

B.由于a(j)现在的位置已经无法保证奇数位置的值不小于偶数位置的值,所以这个位置的奇数位值与偶数位置进行比较交换,保证所有奇数位置的值都不小于偶数位置的值。

通过奇偶分组优化,选择排序每趟比较的次数,减少到了原来的1/2+1次。此时,继续追问学生是否能够继续优化,学生很容易想到,分更多的组效率更高,最终得到结论,当序列长度为n时,那么分(开方后向上取整)组时效率最高。

(2)概括描述,追问数据结构优化实质

优化至此,教师请学生简单描述上述优化后的选择排序操作过程。学生对选择排序流程进行梳理:第一步查找列首最大值a(j);第二步列a(j)与无序队列的行尾部元素交换;第三步将a(j)调整为所在列最大值。教师继续追问:“这个算法还能再改进吗?”学生再次进入认知冲突,这时教师提出“可以从堆放形式上继续改进”,如下页图示4所示。

(3)图示数据结构,展现优化要义

通过三角堆放结构的修改,避免了最大值的查找过程,每趟调整深度优化为。但由于在程序实现过程中底层元素与上层元素存在“共父节点”的情况,程序实现较为复杂,因此,教师再次引导学生对三角堆结构进行优化,一个大顶堆的模型渐渐清晰,如图5所示。

此时,学生根据三角形堆的算法可以生产出大顶堆算法:

n个元素按完全二叉树逻辑依次摆放。

①保证每个节点的值都不小于其子节点的值;

②根节点总是最大元素;

③根节点的值与堆的最后一个元素交换,这样最大元素就被移到了数组的最后,然后对剩下元素再按照①原则进行调整。

此时,在教师的引导下,学生逐步将选择排序效率迭代优化成为堆排序问题,并不断在其他算法优化过程中多情境地出现树的算法思想,学生也能逐渐体会到树在算法优化中的意义与地位,由此在重构中不断迭代发展计算思维。

总结

在高中信息技术教学中开展“融通·激活·重构”的教学,首先有利于激活、促进学生自主发现问题的能力,引导学生像计算机领域的专家一样从问题起点融通思考问题,经历关键信息提取、问题抽象、方案设计、技术实现、验证、再设计、再实现的不断重构过程,引导学生在“用中学”“创中学”“合作中学”,由“教知识”的课堂转变为“为思维而教”的课堂,让学生的学习由“学知识”转变为不断迭代计算思维发展的“深度学习”,其教育意义是持久而深远的。

参考文献:

[1]李晓明.为什么会有“数据结构”?[J].计算机教育,2019(01):3-4.

[2]王爱胜.编程江湖Python篇(青少年版)[M].北京:清华大学出版社,2023.

[3]吴建锋.学生因你而不同[J].中小学信息技术教育,2014(11):29-33.

苍山点题

算法与编程在课程中可谓相融相生:算法是思想,是精神;编程是技术,是载体。如果失去了动手编程去进行代码体验、算法验证和能力生成等基础性实践,单纯说教式学习对未来课程的深入实施极具认知挑战和发展风险,因此,须防算法课堂教学走上认知虚无和学习肤浅化。如何以计算思维为核心,以算法为目标,以代码为载体建立更加融合、立体和可生成式的算法教与学,将是中小学各个阶段都应关注的问题。本期解码,我们从浙江算法教学一线实践着眼,展现看似有一定难度,实则相当于浙江高考选考中低水平的算法学习,一起感受、探讨算法思想与代码如何结合实施“基于计算思维的算法生成式教与学”。

第一篇文章,作者依据高考选考试题核心素养分布与考核结果数据分析,着眼“以考定教促学”进行算法思维教学实践思考。通过数据分析揭示学生核心素养与计算思维的评价状况,提出指向算法思维培养的教学方式转变需要适应变革,以基于学科大概念进行教材二次加工、多元思维碰撞促进融合思维认知、指向算法思维培养的学习方式转变等策略,探讨如何引发学生开展多元思维融合的认知,在构建不同的算法模型中迭代、优化算法,提倡一题多解以丰富算法思维的内涵,倡导先分后装以模块突破整体项目,促进思维碰撞来拓展思维广度和深度,加强归纳总结提升形式化迁移能力等,以对标高考的角度发挥评价的作用,增强计算思维的生成式培养与算法思想与技能的生成式形成。如此,课堂在看似“慢节奏”的不断演绎中持续生成与发展。例如,其中有一个生成点:“先随机抽取序列里一个数,即m=random.randint(0,k-1)位置的数,再与最后数比较交换,使最后数大;再缩小范围比较交换,即k-=1后循环,由此优化算法”。如果时间允许,或可继续讨论“可能抽取到最后一个位置,产生无效交换”。共同探讨若排除最后一个位置即random.randint(0,k-2),再与之比较的增效与随机公平问题,也或可讨论抽取位置先判断是不是最后位置,再决定交换与否,产生每次判断的必要性与降效评估等。这也是计算思维的迭代表现出来的生成式算法学习的意义所在。

第二篇文章,作者以“融通·激活·重构”的教学方式架构,以算法的大概念、“排序算法”的二级概念,排序大单元教学的有效策略,从生活化经验分析,在现实问题分析、算法流程界定、编程实现与动画推演等过程中寻找融通点,保持学习的“效度”;在问题链和活动串设计实施中,不断激活学生思维,保持学习“热度”;不断寻找新旧知识的重构点,提升学习的宽度与深度,即在引发认知冲突中凸显重构点,采用“重构”策略设计与体验来迭代思维的形成,通过以数理分析优化排序数据结构模型、以概括描述追问结构优化实质、用图示数据结构展现优化要义等过程形成对算法知识体系的建构与发展。这种通过认知融通、探索激发和体系重构的循环式迭代生成算法思想,不断丰富发展计算思维的学习养成,在此也举一个其中的可生成的点:在文中,借助2个列表结合排序中,在n,b[0]=len(a),a[0]初始化之后,可用print(b)即时观察已开始生成的新数据状况,当即破除认知屏障,然后引导学生改变结果输出代码缩进跟踪观察排序过程,即在结果赋值指向b[j + 1] = a[i + 1]代码之后,即刻再次print(b),跟踪观察排序过程性数据,进一步提高对算法执行的“时空”观念。这也正是结合生活中“尝试与观察”的融通点、“实验观察”的激发点和“算法整体认知”的重构意义所在。

综合来看,本期解码文章实例虽在浙江高考选考层面尚属中低难度,但面向全国算法教学可能属于较高难度内容,由此也可见教与评相结合的意义,即无评价则教学乏力,由此也可见算法学习生成式认知的价值,即无深度则学习肤浅。期待更多算法稳定性、生成式教学探索成果的分享。

经典小说推荐

杂志订阅