信息学奥赛算法教学课件Pascal.doc

上传人:一*** 文档编号:579585 上传时间:2018-11-04 格式:DOC 页数:92 大小:1.24MB
返回 下载 相关 举报
信息学奥赛算法教学课件Pascal.doc_第1页
第1页 / 共92页
信息学奥赛算法教学课件Pascal.doc_第2页
第2页 / 共92页
点击查看更多>>
资源描述

《信息学奥赛算法教学课件Pascal.doc》由会员分享,可在线阅读,更多相关《信息学奥赛算法教学课件Pascal.doc(92页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、|信息学奥赛辅导教程第 3 章 算法与程序设计模块3.1 算 法算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。常用的算法:列举了穷举搜索、递归、回溯、递推、模拟、分治、贪心、深度优先搜索、广度优先搜索等几种较为常用的算法,没有做过多的描述,一旦给出具体描述,容易使内容加深,产生严重学科取向的引导,符合教育部普通高中课程方案的特点,对于这些必需的方法和思想,关键不在于学生能不能,而在于教师是否想到,是否有过关注,引发学生对系统方法和思想的思考,重视建立编程思想,强化编程习惯的培养。3.1.1 算法的 5 个重要特性1有穷性:一个算法必须总是(对任何合法

2、的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成。2确定性:算法中每一条指令必须有确切的含义,不会产生二义性。并且在任何条件下,算法只有唯一的一条执行路径。3可行性:一个算法是能行的。即算法中描述的操作是执行有限次运算来实现的。 4输入:一个算法有零个或多个输入。5输出:一个算法有一个或多个输出。3.1.2 算法设计的要求通常设计一个“好”的算法,应考虑达到以下目标。1正确性:算法应当满足具体问题的需求。2可读性:算法主要是为了人的阅读与交流,其次才是机器执行。可读性好有助于人对算法的理解。3健壮性:当输入数据非法时,算法也能适当地做出反应或进行处理,而不会产生莫明其妙的输出结果。

3、4效率与低存储量需求。效率指的是算法执行时间。对于同一个问题如果有多个算法可以解决,执行时间短的算法效率高。低存储量需求指算法执行过程中所需要的最大存储空间。第 3 章 算法与程序设计模块1013.1.3 算法分析算法分析的任务是对设计出的每一个具体的算法,利用数学工具,讨论各种复杂度,以探讨某种具体算法适用于哪类问题,或某类问题宜采用哪种算法。 算法的复杂度分时间复杂度和空间复杂度。时间复杂度是在运行算法时所耗费的时间为 f(n)(即 n 的函数)。空间复杂度是实现算法所占用的空间为 g(n)(也为 n 的函数)。称 O(f(n)和 O(g(n)为该算法的复杂度。 3.1.4 程序设计1程序

4、程序是对所要解决的问题的各个对象和处理规则的描述,或者说是数据结构和算法的描述,因此有人说,数据结构算法程序。2程序设计程序设计就是设计、编制和调试程序的过程。程序设计是一门技术,需要相应的理论、技术、方法和工具来支持。就程序设计方法和技术的发展而言,主要经过了结构化程序设计和面向对象的程序设计两个阶段。除了好的程序设计方法和技术之外,程序设计风格也很重要。因为程序设计风格会深刻影响软件的质量和可维护性,良好的程序设计风格可以使程序结构清晰合理,使程序代码便于维护。因此,程序设计风格对保证程序的质量很重要。一般来讲,程序设计风格是指编写程序时所表现出的特点、习惯和逻辑思路。程序是由人来编写的,

5、为了测试和维护程序,往往还要阅读和跟踪程序,因此程序设计的风格总体而言应该强调简单和清晰,必须可以理解。可以认为,著名的“清晰第一,效率第二”的论点已成为当今主导的程序设计风格。要形成良好的程序设计风格,主要应注重源程序文档化。(1)符号名的命名:符号名的命名应具有一定的实际含义,以便于对程序的功能进行理解。(2)程序注释:正确的注释能够帮助读者理解程序。3结构化程序设计结构化程序设计方法是程序设计的先进方法和工具。采用结构化程序设计方法编写程序,可使程序结构良好、易读、易理解、易维护。结构化程序语言仅使用顺序、选择和循环 3 种基本控制结构就足以表达出各种其他形式结构的程序设计方法。总之,遵

6、循结构化程序的设计原则,按结构化程序设计方法设计出的程序具有明显的优点。其一,程序结构良好、易读、易理解和易维护;其二,可以提高编程工作的效率,降低软件开发成本。练习题(1)算法的时间复杂度是指( )。A执行算法程序所需要的时间 B算法程序的长度C算法执行过程中所需要的基本运算次数 D算法程序中的指令条数【解析】所谓算法的时间复杂度,是指执行算法所需要的计算工作量。算法的工作量用算法所执行的基本运算次数来度量。【答案】C(2)算法的空间复杂度是指( )。A算法程序的长度 B算法程序中的指令条数C算法程序所占的存储空间 D算法执行过程中所需要的存储空间【解析】空间复杂度是指执行算法所需要的存储空

7、间。算法所占用的存储空间包括算法程序所占的空间、输入初始数据所占的存储空间以及算法执行过程中所需要的额外空间。【答案】D信息技术与信息学竞赛102(3)算法指的是( )。A计算机程序 B解决问题的计算方法C排序算法 D解决问题的有限运算序列【解析】所谓算法是指解题方案的准确而完整的描述。对于一个问题,如果可以通过一个计算机程序在有限的存储空间内运行有限长的时间而得到正确的结果,则称这个问题是算法可解的。但算法不等于程序,也不等于计算方法。【答案】D(4)算法能正确地实现预定功能的特性称为算法的( )。A正确性 B易读性 C健壮性 D高效率【解析】针对实际问题设计的算法,人们总是希望能够得到满意

8、的结果。但一个算法又总是在某个特定的计算工具上执行的,因此算法在执行过程中往往要受到计算工具的限制,使执行结果产生偏差。算法与计算公式是有差别的,在设计一个算法时,必须要考虑它的可行性,否则将得不到满意的结果。【答案】A(5)递归算法一般需要利用( )来实现。A栈 B队列 C循环链表 D双向链表【答案】A3.2 穷举搜索法有一些问题一时难以找到规律或者公式,或者根本没有规律、公式。这时可以利用计算机高速运算的特点,使用穷举来解决。穷举搜索法是穷举所有可能情形,并从中找出符合要求的解决。穷举搜索法所有可能情形,最直观的是联系循环的算法。例 1 找出 n 个自然数(1,2,3,n)中 r 个数的组

9、合。例如,当 n=5,r=3 时,所有组 合为: 5 5 35 4 25 4 15 3 25 3 15 2 14 3 24 3 14 2 13 2 1total=10 组合的总数程序program zuhe11;const n=5;var i,j,k,t:integer;begin t:=0;for i:=n downto 1 dofor j:=n downto 1 dofor k:=n downto 1 doif (ik) and (ij) and (jk) thenbegin t:=t+1;writeln(i:3,j:3,k:3);end;writeln(total=,t);end.第 3

10、 章 算法与程序设计模块103这个程序,穷举了所有可能情形,从中选出符合条件的解,很多情况下穷举搜索法还是常用的。例 2 算 24 点(poi24.pas)。 【题目描述】几十年前全世界就流行一种数字游戏,至今仍有人乐此不疲。在中国我们把这种游戏称为“算 24 点”。您作为游戏者将得到 4 个 19 之间的自然数作为操作数,而您的任务是对这 4 个操作数进行适当的算术运算,要求运算结果等于 24。您可以使用的运算只有:+,-,/,您还可以使用()来改变运算顺序。注意:所有的中间结果须是整数,所以一些除法运算是不允许的(例如,(22)/4 是合法的,2(2/4)是不合法的)。下面我们给出一个游戏

11、的具体例子:若给出的 4 个操作数是:1、2、3、7,则一种可能的解答是 1+2+37=24。【输入】只有一行,四个 19 之间的自然数。【输出】如果有解的话,只要输出一个解,输出的是 3 行数据,分别表示运算的步骤。其中第一行是输入的两个数和一个运算符和运算后的结果,第二行是第一行的结果和一个输入的数据、运算符、运算后的结果;第三行是第二行的结果和输入的一个数、运算符和“=24”。如果两个操作数有大小的话则先输出大的。如果没有解,则输出“no answer!”【样例】poi24.in poi24.out1 2 3 7 2+1=373=2121+3=24【算法分析】计算 24 点主要应用四种运

12、算。开始状态有四个操作数,一个运算符对应两个操作数,所以一开始选择两个操作数分别对四个操作符进行循环检测,每一次运算后产生了新的数,两个数运算变成一个数,整体是少了一个操作数,所以四个数最终是三次运算。由于操作的层数比较少(只有三层),所以可以用回溯的算法来进行检测,当找到一个解时便结束查找。如果所有的情况都找过后仍然没有,则输出无解的信息。程序program poi24; point24type arr=array 1.4 of integer;var i,result,n,len:integer;d:arr;r:array 1.3,1.4 of integer;infile,outfile

13、:text;procedure print;var i,j:integer;beginassign(outfile,poi24.out);rewrite(outfile);for i:=1 to 3 dobeginfor j:=1 to 3 doif jj) then begin t:=t+1;et:=dl end;r5-k,1:=a;r5-k,3:=b;r5-k,4:=-1;for l:=1 to 4 dobegincase l of1:r5-k,4:=a+b;2:r5-k,4:=a-b;3:r5-k,4:=a*b;4:if b-1 thenbeginet+1:=r5-k,4;try(k-1

14、,e)endendendend;end;beginassign(infile,poi24.in);reset(infile);for i:=1 to 4 do read(infile,di);close(infile);try(4,d);assign(outfile,poi24.out);rewrite(outfile);writeln(outfile,no answer!);close(outfile);end.练习题彩虹 7 号(rainbow.pas)X 市是一个重要的军事基地,在这个基地中有一支名为 “彩虹 7 号”的特别部队。每个队员都有一个固定独立的编号 X(1X2 15),他们的

15、职责就是完成部队交给他们的任务,每个任务同样都有固定独立的编号N(1N 10) 。在执行任务的过程中,为了保证任务的保密性和队员的安全,队员和队员之间的联系将必须由特别部队所提供的一种保密频段交互设备进行。第 3 章 算法与程序设计模块105每个队员都需要一个身份验证口令进入系统,由于队员所执行的任务都是涉及国家安全或者极高机密的活动,如果队员使用的口令出现错误,他们将付出无法估计的代价。特别部队的队员都是层层筛选的精英人才,所以不希望发生这样的事情。因此队员必须牢记口令的设置方法。口令 S 的内容满足:S N=X。显然,S 有可能也很有可能是一个无理数,所以限定 S 为一个实数,它包含整数部

16、分和小数部分,不包含小数点(即 0.1 将视作 01)。口令的长度 M(10M50) ,将根据任务的难度而有所不同。 编程任务:给定 X,N,M。计算口令的内容 S。输入(rainbow .in):文件输入,文件有且仅有一行包含 3 个整型数 X,N,M,每个数之间以一个空格符隔开。输出(rainbow.out ):文件输出,文件有且仅有一行,为 S 的结果。样例输入:2 2 10样例输出:1414213652注意:口令的最后一位请使用去尾法保留,不要使用四舍五入法保留。文件请不要包含多余的空格和换行。3.3 递 归 法递归作为一种强有力的数学和算法描述工具在 Pascal 语言中被广泛使用。

17、一个函数、过程、概念或数学结构,如果在其定义或说明内部又直接或间接地出现有定义本身的引用(在过程或自定义函数中,又包含自己调用自己),则称它们是递归的或者是递归定义的。一个递归算法仅使用少量的程序编码就可描述出解题所需要的多次重复计算而不需要设计循环结构。使用递归求解问题,通常可以将一个比较大的问题层层转化为一个与原问题相类似的规模较小的问题来求解,进而最终导致原问题的解决。例如:n!的定义,我们知道,在数学中 n!一般定义为:1 若 n=0n!=n(n-1)! 若 n0在 n0 的 公 式 中 , 又 包 含 了 ( n-1) !, 这 就 是 递 归 定 义 。利 用 递 归 方 法 ,

18、可 以 用 有 限 的 语 句 来 定 义 对 象 的 无 限 集 合 。 但 在 递 归 定 义 中 , 应 该 至 少 有 一 条 是 非递 归 的 , 即 初 始 定 义 。 如 上 面 例 子 中 的 第 一 条 , 否 则 就 变 成 了 循 环 定 义 , 产 生 逻 辑 性 错 误 。n!的 递 归 定 义 的 程 序 :program findn ;var n: integer;t:longint;procedure find(n:integer);beginif n0 then t: 1else begin find(n-1);t:tn end;end;beginwrite(

19、n);readln(n);find(n);writeln(n,! ,t )end信息技术与信息学竞赛106递 归 调 用 ( n 进 栈 ) 达 到 结 束 条 件 时 ( n=0, t 赋 初 值 1) 就 停 止 调 用 开 始 返 回 , 再 把 保 存 的 值 取 出( n 出 栈 ) , 使 n 恢 复 原 来 的 值 , 并 计 算 t, 返 回 主 程 序 , 输 出 结 果 t。3!递归是如何实现的?( 1) 设 n=3, 开 始 调 用 过 程 find, 称 为 第 零 层 调 用 。( 2) 由 于 公 式 3!=3 2!, 必 须 先 求 2!, 即 程 序 中 的 f

20、(n-1), 此 时 系 统 自 动 先 保 存 n 的 原 值 3, 再设 n=2, 进 入 第 一 层 递 归 调 用 。( 3) 因 为 2!=2 1!, 所 以 系 统 又 保 存 2, 并 设 n=1, 进 入 第 2 层 调 用 。( 4) 因 为 1!=1 0!, 所 以 保 存 1, 并 设 n=0, 进 入 第 3 层 调 用 。( 5) 因 为 n=0, 终 止 调 用 , t 赋 值 1, 返 回 4 的 入 口 点 。( 6) 取 出 执 行 4 时 保 存 的 1, 求 出 t=1 t=1, 返 回 3 的 入 口 点 。( 7) 取 出 执 行 3 时 保 存 的

21、2, 求 出 t=2 t=2, 返 回 2 的 入 口 点 。( 8) 取 出 执 行 2 时 保 存 的 3, 求 出 t=3 t=6, 返 回 1 的 入 口 点 。( 9) 返 回 主 程 序 , 输 出 结 果 : t=6。从 上 面 分 析 的 过 程 看 到 , 由 于 递 归 调 用 , 需 用 同 一 变 量 名 n, 但 值 不 同 , 所 以 在 调 用 前 必 须 先 把 n的 原 值 保 存 , 再 赋 以 新 值 , 然 后 进 入 调 用 。 调 用 结 束 后 , 再 把 保 存 的 值 取 出 , 使 n 恢 复 原 来 的 值 。 在过 程 中 find 中

22、又 包 含 find(n-1), 即 又 调 用 了 它 自 己 , 这 就 是 递 归 调 用 。 包 含 有 递 归 调 用 的 算 法 , 就 叫 做递 归 算 法 。递 归 调 用 会 产 生 无 终 止 运 算 的 可 能 性 , 因 此 必 须 在 适 当 时 候 终 止 递 归 调 用 , 即 在 程 序 中 必 须 要 有 终止 条 件 。 上 面 程 序 中 , 过 程 find 的 第 一 条 语 句 就 是 终 止 条 件 。 一 般 地 , 根 据 递 归 定 义 设 计 的 递 归 算 法 中 ,非 递 归 的 初 始 定 义 , 就 用 作 程 序 中 的 终 止

23、条 件 。实 践 证 明 , 不 是 所 有 问 题 都 可 以 用 递 归 的 方 法 处 理 , 用 递 归 算 法 编 写 的 程 序 也 不 一 定 是 好 程 序 。 可以 看 出 , 执 行 递 归 的 过 程 既 浪 费 时 间 又 费 存 储 空 间 , 因 此 有 的 语 言 系 统 , 禁 止 使 用 递 归 , 由 于 计 算 机 存储 容 量 的 限 制 , 编 译 系 统 也 不 允 许 递 归 。 但 因 递 归 特 别 符 合 人 们 的 思 维 习 惯 , 递 归 算 法 的 设 计 也 要 比 非递 归 算 法 设 计 容 易 , 所 以 当 问 题 是 递

24、归 定 义 , 尤 其 是 当 涉 及 的 数 据 结 构 是 递 归 定 义 的 时 候 , 使 用 递 归 算法 特 别 合 适 。应 用 递 归 算 法 能 够 求 解 的 问 题 一 般 具 有 两 个 特 点 : 存 在 某 个 特 定 条 件 , 在 此 条 件 下 , 可 得 到 指 定 的 解 , 即 递 归 在 终 止 状 态 。 对 任 意 给 定 的 条 件 , 有 明 确 的 定 义 规 则 , 可 以 产 生 新 的 状 态 并 将 最 终 导 出 终 止 状 态 , 即 存 在 导 致问 题 求 解 的 递 归 步 骤 。递归是用栈来实现的。不过,递归恐怕不像想象得

25、这么简单。首先,它体现了一个数学思想:化归,即把一个问题转化成另一个的方法。递归比较特殊,它是转化成性质相似,但规模更小的问题。 例 3 阅读程序 NOIp2001_G。program gao7_1;function ack(m,n:integer):integer;beginif m=0 then ack:=n+1 else if n=0 then ack:=ack(m-1,1)else ack:=ack(m-1,ack(m,n-1)end;begin writeln(ack(3,4);readln;end.分析:这个程序我们可以用下面的函数表示。在解题时,一般都是用递归的方法去实现的,而递

26、归方法将会计算五千多步,在竞赛时这种方法是不可用的,而递归往往可以用递推去实现,因此,我们在教学过程中就讲解了该函数的递推过程,现将推导过程表示如下:(1)我们在递归过程中发现该函数总是要调用到 M=0,M=1 及 M=2 的情况,因此,我们就考虑要推导ACK( 3,N)必须首先推导 ACK(0,N),ACK(1,N)以及 ACK(2,N)的情况。第 3 章 算法与程序设计模块107(2)ACK(0,N)可以由函数直接得到,公式为 ACK( 0,N)=N+1(3)ACK(1,0)=ACK ( 0,1)=1+1=0+2ACK(1,1)=ACK (0 ,ACK(1,0)=ACK(0 ,1+1)=1

27、+1+1=1+2ACK(1,2)=ACK (0 ,ACK(1,1)=ACK(0 ,1+2)=1+1+2=2+2因此,我们可以联想到 ACK(1,N )=N+2。这个公式可以用数学归纳法证明之。(略)根据上面的方法,我们可以方便地推导出下面一些公式:(4)ACK(2,0)=ACK ( 1,1)=1+2=3(利用 M=1 的公式)ACK(2,1)=ACK ( 1,ACK(2,0)=ACK( 1,1+2)=3+2=5(利用 M=1 的公式及 ACK(2,0)ACK( 2, 2) =ACK( 1, ACK( 2, 1) ) =ACK( 1, 5) =5+2=( 2+1) *2+1因此,我们可以联想到

28、ACK(2,N )=(N+1)*2+1 。同样,这个公式可以用数学归纳法证明之。(略)(5)ACK(3,0)=ACK ( 2,1)=(1+1)*2+1=5(利用 M=2 的公式)ACK(3,1)=ACK (2,ACK(3,0)=ACK(2,5) =((1+1)*2+1+1 )*2+1=23+22+1ACK(3,2)=ACK (2,ACK(3,1)=ACK(2,13 )=(23+22+1+1 )*2+1=24+23+22+1=25-3因此,我们可以联想到 ACK(3,N )=2(N+3) -3。例 4 仍以例 1 为例,找 n 个数的 r 个数的组合。输入:n,r =5,3输出:5 4 35 4

29、 25 4 15 3 25 3 15 2 14 3 24 3 14 2 13 2 1total=10 组合的总数分析:所提示的 10 组数。首先固定第一位数(如 5),其后是在另 4 个数中再“组合”2 个数。这就将“5 个数中 3 个数的组合”推到了“4 个数中 2 个数的组合”上去了。第一位数可以是 n,r (如 5,3),n个数中 r 个数组合递推到 n-1 个数中 r-1 个数有组合,这是一个递归的算法。即: var i:integer;begin for i:=n downto r dobegin 固定 i 的输出位置comb(i-1,r-1); 原过程递推到 i-1 个数的 r-1

30、 个数组合end;end;再考虑打印输出格式。程序var k,n,r:integer;Produrce comb(n,r:integer);信息技术与信息学竞赛108var i,temp:integer;begin for i:=n downto r doif (ir) then k 为过程外定义的begin for temp:=1 to (k-r)*3 do write( ); 确定 i 的输出位置 end;write(i:3);if i1 then comb(i-1,r-1); 递推到下一情形else writeln;end;begin mainwrite(n,r=);readln(n,r

31、);if rn then begin writeln(Input n,r error!);halt;end;comb(n,r); 调用递归过程 end;练习题1邮票面值设计(postag.pas)【题目描述】给定一个信封,最多只允许粘贴 N 张邮票,计算在给定 K(N+k 40) 种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大 max ,使得 1-max 之间的每一个邮资值都能得到。例如,N=3 ,K=2,如果面值分别为 1 分、4 分,则在 l6 分之间的每一个邮资值都能得到(当然还有 8分、9 分和 12 分):如果面值分别为 1 分、3 分,则在 17 分之间

32、的每一个邮资值都能得到。可以验证当N=3,K=2 时, 7 分就是可以得到连续的邮资最大值,所以 max=7,面值分别为 l 分、3 分。【样例输入】3 2 输入第一个数 N,第二个数 K,中间用空格间隔【样例输出】1 3 输出的第一行面值分别为 l 分、3 分max=7 输出的第二连续的邮资最大值2聪明的学生(guess.pas)【题目描述】一位教授逻辑学的教授有三名非常善于推理且精于心算的学生 A,B 和 C。有一天,教授给他们 3 人出了一道题:教授在每个人脑门上贴了一张纸条并告诉他们,每个人的纸条上都写了一个正整数,且某两个数的和等于第三个。于是,每个学生都能看见贴在另外两个同学头上的

33、整数,但却看不见自己的数。这时,教授先对学生 A 发问了: “你能猜出自己的数吗?”A 回答:“不能。”教授又转身问学生 B:“你能猜出自己的数吗? ”B 想了想,也回答: “不能。”教授再问学生 C 同样的问题, C 思考了片刻后,摇了摇头: “不能。”接着,教授又重新问 A 同样的问题,再问 B 和 C,经过若干轮的提问之后,当教授再次询问某人时,此人突然露出了得意的笑容,把贴在自己头上的那个数准确无误地报了出来。现在,如果告诉你:教授在第 N 次提问时,轮到回答问题的那个人猜出了贴在自己头上的数是 M,你能推断出另外两个学生的头上贴的是什么数吗?【提示】在没有人猜出自己头上的数之前,大家

34、对教授提问的回答始终都是“不能”;而且除此之外在 A,B,C之间是没有进行任何信息交流的。也就是说,每个人推断的依据仅仅是另外两个人的头上数,以及大家对教授的提问所做出的否定回答。教授总是从学生 A 开始提问的。你可以假定,这 3 个聪明的学生能够根据已知的条件在最早的轮次猜出自己的数,并且永远都不会猜错。第 3 章 算法与程序设计模块109稍经分析和推理,你将得出以下结论:总是头上贴着最大的那个数的人最先猜出自己头上的数。【输入文件】输入文件为 guess.in。该文件包括若干组测试数据,其中的每一行代表一组测试数据,由两个整数 N 和 M 组成(即在教授第 N次提问时,轮到回答问题的那个人

35、猜出了贴在自己头上的数是 M)。两个数之间用空格分隔开。最后,由-1 -1 组成的一行标志着输入的数据结束。同时要求,0N 500; 0M30000。【输出文件】输出文件为 guess.out。按照输入文件中的顺序依次给出各组数据的结果。文件中对应每组数据输出的第一行是一个整数 p,是可能情况的总数。接下来的 p 行,每一行包括 3 个数,分别为贴在 A、B、C 头上的 3 个数。输出时,所有解按照 A 头上的数增序排列;在 A 头上的数相同的情况下,按照 B 头上的数增序排列。【样例输入】5 83 22 3-1 -1【样例输出】32 8 65 8 36 8 211 1 212 3 13.4

36、回 溯 法回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。回溯算法是所有搜索算法中最为基本的一种算法,其采用了一种“走不通就掉头”思想作为其控制结构 例 5 再以例 1 说明,找 n 个数中 r 个数的组合。分析:将自然数排列在数组 A 中。A1 A2 A35 4 35 4 23 2 1排数时从 A1到 A2再到 A3,后一个至少比前一个数小 1,并且应满足 ri+Arir 。若 ri+Arir 就要回溯,该关系就是回溯条件。为直观起见,当输出一组组合数后,若最后一位为 1,也应作一次回溯(若不回,便由上述回溯条件处理)。程序program zuhe3;type tp=array1.100 of integer;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com