《高中信息技术 全国青少年奥林匹克联赛教案 回溯法》由会员分享,可在线阅读,更多相关《高中信息技术 全国青少年奥林匹克联赛教案 回溯法(3页珍藏版)》请在人人文库网上搜索。
1、信息学奥林匹克的基本算法(回溯法)如果上一期“一百元买一百只鸡”的鸡种数目有所改变,与点算无关。这里介绍了另一种算法,回溯法。回溯的基本思想回溯法是一种系统的、跳跃的搜索方法。它的基本思想是:在搜索过程中,当探索到某一步时,发现原来的选择达不到目标,所以它会回到上一步,做出新的选择。它主要用于解决一些可以通过许多步骤完成的问题,每个步骤都有几个可能的分支。为了完成这个过程,需要遵守一些规则,但是这些规则不能用数学公式来描述。下面是一个理解回溯思想及其在计算机上实现的基本方法的例子。示例1:从n个自然数(1,2,n)中选择r个数字的所有组合。算法分析:让r的个数为a1,a2,ar,并由大到小排列。
2、,然后满足:(1)a1 a2ar;(2)第一位数字(1=1=r)满足空气-1;我们首先根据上述原则确定第一个数,然后一点一点地生成所有的R数。如果当前号码符合要求,添加下一个号码;否则,返回前一个数字,改变前一个数字的值,判断是否满足要求。如果符合要求,继续添加下一个号码;否则,返回到前一个数字并更改前一个数字的值.根据此规则继续搜索,直到找到R数的组合。这种解决方法是回溯法。如果根据上述方法生成第I个数字ai,则下一步处理如下:(1)如果air-i和i=r,输出r的数字,并更改ai :ai=ai-1的值;(2)如果air-i和ir,继续生成下一位ai 1=ai-1;(3)如果ai=r-i,返。
3、回前一位,将前一位的值改为: ai-1=ai-1-1;算法的实现步骤:步骤1:输入n和r的值并初始化它们;I :=1;a1:=n;步骤2:如果1r-1:如果air-i,如果i=r,输出解,aI:=aI-1;如果ir,继续生成下一位:aI 1:=aI-1;I :=I 1;如果ai=r-i,返回:I :=I-1;aI:=aI-1;第三步:结束;程序实现var n,r,I,j:integera :阵列1.10的整数;开始readln(n,r);I :=1;a1:=n;重复如果air-i,则合格如果i=r,则输出开始对于j:=1至r,写(aj:3);writelnaI:=aI-1;目标否则继续搜索开始。
4、aI 1:=aI-1;I :=I 1;目标否则回溯开始I :=I-1;aI:=aI-1;结束;直到a1=r-1;结束。让我们再举一个例子来看看回溯在信息学奥林匹克运动会中的应用。示例2数字除法(noip2001tg)问题描述整数n分为k个部分,每个部分不能为空,任何两个部分不能相同(不管顺序如何)。例如:n=7,k=3,以下三种方法被认为是相同的。1,1,5;1,5,1;5,1,1;问问有多少不同点。输入:n,k (6=ai,然后添加下一个元素ai 1;(3)如果i=ai,继续搜索;如果sum=ai,则判断是否返回begin Inc(I);aI:=aI-1;sum :=sum-aI;结束继续搜索否则从12月1日开始;Inc(aI);sum :=sum aI 1-1;结束;回溯结束;直到1NK;write ln(t);结束。回溯法是一种通用的解决问题的方法,它试图通过纠正错误来找到答案。在NOIP有许多与搜索问题相关的问题可以用回溯法来解决。