集合及其应用.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
集合及其应用.doc

集合及其应用 [内容提要] 学习pascal语言中的集合的表示方法与运算 数学上集合的定义及应用 集合的应用 [重点难点] Pascal中集合的操作 集合思想的应用 [内容讲授] 集合 集合类型的定义 Type 集合类型标识符 = Set of 基类型 一些正确的定义: Type month = set of 1..12; Type ch = set of A..Z;注意:在我们所使用的Borland Pascal 7.0中,一个集合的元素最多为256个。对于一个集合我们会有很多的操作,如将一个集合置空,将一个元素插入集合,察看元素是否在集合内。这些操作在Pascal语言中都有相应的操作。 定义:一个无序的,同类的,无相同元素的整体。 表示:用A={……}表示。例如:{1,2,3}是三个数的集合。 性质: 所有的元素都是同一类型的。 无序性 3、元素都不相同 [例1] 集合选数 我们定义1在集合S中,如果x在集合S中,则3x+1也在集合S中,如果x在结合S中,则4x+1也在集合S中。 将S中的所有的元素从小到大排列,并赋予一个序号现在给定一个序号N,求这个序号对应的数。 [分析] 拿到题目我们有一个比较直接的算法:从1开始一个一个的判断是否在集合S中,但问题给定的集合中的最大的数在2000000000以内,显然穷举的办法是不合适的。 我们不禁有一个想法:如果我们每次产生一个数,而那个数就是在S中,效率就会大大提高,显然这是一个只与问题中的n(1=n=500000)有关的算法。 两种不同的算法: 方法一:盲目的枚举 1) 从1开始穷举,判断是否在集合S中,直到计数器为N 2)现在的机器能做1到1000,000的循环吗?能做1到maxlongint(2147483648)的循环吗? 3)枚举的方法不可行! 方法二:顺序生成法 即我们要顺序的生成所有的在集合中的数,我们用两个生成指针p3,p4,分别记录当前枚举的基数。参看下面的程序: {compiled in FPC 1.0.10} const maxn=400000; var n,i,p3,p4:longint; a:array[1..maxn] of longint; t1,t2:longint; function MIN(a,b:longint):longint; begin if ab then MIN:=b else MIN:=a; end; BEGIN readln(n); p3:=1; p4:=1; a[1]:=1; for i:=2 to n do begin t1:=a[p3]*3+1; t2:=a[p4]*4+1; a[i]:=MIN(t1,t2); if (t1=a[i]) then inc(p3); if (t2=a[i]) then inc(p4); end; writeln(a[n]); END. 问题的小结: 两种算法都将集合的元素有序化(就是从小到大的生成集合中的元素),第一种算法过于直接,第二种算法就很巧妙了。 第二种算法利用了集合的一个性质:元素都不相同,巧妙的解题。 Borland Pascal利用数学上集合的概念,将集合作为一种用户自定义的构造数据类型。在Borland Pascal中对集合有以下几种感性的规定: 1) 集合中所有元素必须是严格的统一类型; 2)集合中的元素没有顺序,不能重复。 一般的,如果集合的基类型有N个元素,则集合类型的取值一共有2N种。 举例: Var K: Set of 1..3; 则集合k的取值一共有: No. K 的取值 说 明 1 [] 空集 2 [1] 一个元素 3 [2] 4 [3] 5 [1,2] 两个元素 6 [1,3] 7 [2,3] 8 [1,2,3] 三个元素(满集) 证明:用数学归纳法。(x)表示集合中有x个元素时,子集的个数。 1)显然n=0时,f(0)=1=2^0,空集的子集只有一个当n对于f(n)=2^n成立时,我们看n+1时的情况,对于我们知道问题n的解f(n)一定是问题n+1的解,将问题n的解都添加上第n+1个元素则又构造出f(n)个界,即f(n+1)=f(n)+f(n)=2*f(n)=2*2^n=2^(n+1)。 例子: [1,2]的子集有[],[1],[2],[1,2] [1,2,3]的子集首先包含[],[1],[2],[1,2],还有[3],[1,3],[2,3],[1,2,3]。 集合运算 运算符 名称 形式举例 含 义 解 释 操作数

文档评论(0)

shengyp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档