第1章南财数据智能化课件PPT课件下载推荐.ppt
《第1章南财数据智能化课件PPT课件下载推荐.ppt》由会员分享,可在线阅读,更多相关《第1章南财数据智能化课件PPT课件下载推荐.ppt(91页珍藏版)》请在冰豆网上搜索。
即两个集合M与N的交集是指M与N中所有共同元素组成的集合。
15两个集合与的并、交均满足交换律,即MNNMMNNM16(3)两个集合的差(difference)设有两个集合M和N,M和N的差集记作MN,其定义如下:
MN|M但不属于N两个集合的差不满足交换律,即MNNM17例设集合Aa,b,c,d,eBd,e,f,g,h则ABa,b,c,d,e,f,g,hABd,eABa,b,cBAf,g,h18基本性质:
(1)结合律(AB)CA(BC)(AB)CA(BC)
(2)分配律A(BC)(AB)(AC)A(BC)(AB)(AC)(3)(AB)(BA)(AB)(AB)(4)B(AB)(AB)(AB)A193.映射2021222324251.1.2自然数集与数学归纳法26由所有自然数所组成的集合由所有自然数所组成的集合11,22,33,称为自然数集。
自然数集是一个无限集。
称为自然数集。
由自然数组成的集合均是自然数集的子集。
自然数集的子集可以是有限集,也可以是无限集。
27与自然数集对等(即具有相等浓度)的集合称为可列集(或可数集)。
任一可列集中的元素排列时可标以正整数下标,即任意可列集均可写成28定理:
在自然数集的任一非空子集M中,必定有一个最小数。
即在集合M中有不大于其它任意数的数。
2930定理:
设M是由自然数形成的集合,如果它含有1,2,k,并且当它含有数n1,n2,nk(nk)时,也含有数n,那么它含有所有的自然数,即M是自然数集。
3132为了证明一个命题对于所有的自然数是真,采用数学归纳法证明的步骤如下:
(1)证明命题对于自然数1,2,k是真的;
(2)假设命题对于自然数nk,nk1,n1(nk)是真的(这一步称为归纳假设);
(3)证明命题对于自然数n也是真的。
33例证明下列命题:
对于任意的自然数n,必存在一对非负整数(i,j)有7n3i5j34证明:
(1)当n1时,有7135,即i1,j1。
命题成立。
当n2时,有723350,即即i3,j0。
当n3时,有733052,即即i0,j2。
(2)假设命题对于自然数n1,n2,n3(n3)成立(归纳假设)。
(3)考虑自然数n,有7n7(n3)3根据归纳假设,对于自然数n3命题成立,设存在一对非负整数I,J有7(n3)3I5J则有7n7(n3)33(I1)5J3i5j其中iI1,jJ均为非负整数。
即对于自然数n命题也成立。
由此得出结论,对于所有的自然数n命题成立。
351.1.3笛卡尔积3637381.1.4二元关系39404142434445461.2算法算法1.2.1算法的基本特征1.2.2算法设计基本方法1.2.3算法的复杂度分析1.2.1算法的基本概念算法的基本概念算法是指解题方案的准确而完整的描述。
1.能行性(effectiveness)A1012,B1,C1012ABC10121(1012)0ACB1012(1012)112.确定性(definiteness)3.有穷性(finiteness)4.拥有足够的情报算法是一组严谨地定义运算顺序的规则,并且每一个规则都是有效的,且是明确的,此顺序将在有限的次数下终止。
1.2.2算法设计基本方法算法设计基本方法1.列举法列举法根据提出的问题,列举所有可能的情况,并用问题中给定的条件检验哪些是需要的,哪些是不需要的。
因此,列举法常用于解决“是否存在”或“有多少种可能”等类型的问题,例如求解不定方程的问题。
例设每只母鸡值3元,每只公鸡值2元,两只小鸡值1元。
现要用100元钱买100只鸡,设计买鸡方案。
假设买母鸡I只,公鸡J只,小鸡K只。
FORI0TO100DOFORJ0TO100DOFORK0TO100DOMIJKN3I2J0.5KIF(M100)and(N100)THENOUTPUTI,J,KRETURN总循环次数为1013FORI0TO33DOFORJ0TO501.5IDOK100IJIF(3I2J0.5K100)THENOUTPUTI,J,KRETURN总循环次数为#includestdio.hmain()inti,j,k;
for(i0;
i33;
i)for(j0;
j501.5*i;
j)k100ij;
if(3*i2*j0.5*k100.0)printf(%5d%5d%5dn,i,j,k);
运行结果如下:
23068525708207211157414107617578200802.归纳法归纳法通过列举少量的特殊情况,经过分析,最后找出一般的关系。
3.递推递推从已知的初始条件出发,逐次推出所要求的各中间结果和最后结果。
例4.递归递归将一个复杂的问题归结为若干个较简单的问题,然后将这些较简单的每一个问题再归结为更简单的问题,这个过程可以一直做下去,直到最简单的问题为止。
例编写一个过程,对于输入的参数n,依次打印输出自然数1到n。
PROCEDUREWRT(n)FORk1TOnDOOUTPUTkRETURN#includestdio.hwrt(intn)intk;
for(k1;
kn;
k)printf(%dn,k);
return;
输出自然数1到n的递归算法。
PROCEDUREWRT1(n)IF(n0)THENWRT1(n1)OUTPUTnRETURN#includestdio.hwrt1(intn)if(n!
0)wrt1(n1);
printf(%dn,n);
5.减半递推技术减半递推技术所谓“减半”,是指将问题的规模减半,而问题的性质不变。
所谓“递推”,是指重复“减半”的过程。
例二分法求方程实根的减半递推过程:
首先取给定区间的中点c(ab)/2。
然后判断f(c)是否为0。
若f(c)0,则说明c即为所求的根,求解过程结束;
如果f(c)0,则根据以下原则将原区间减半:
若f(a)f(c)0,则取原区间的前半部分;
若f(b)f(c)0,则取原区间的后半部分。
最后判断减半后的区间长度是否已经很小:
若|ab|,则过程结束,取(ab)/2为根的近似值;
若|ab|,则重复上述的减半过程。
FUNCTIONROOT(a,b,eps,f)f0f(a)WHILE(|ab|)DOc(ab)/2;
f1f(c)IF(f10)THENROOTc;
RETURNIF(f0*f10)THENacELSEbcc(ab)/2;
ROOTcRETURN#includestdio.h”#includemath.h”doubleroot(a,b,eps,f)doublea,b,eps,(*f)();
doublef0,f1,c;
f0(*f)(a);
while(fabs(ab)eps)c(ab)/2;
f1(*f)(c);
if(f10)return(c);
if(f0*f10)ac;
elsebc;
c(ab)/2;
return(c);
6.回溯法回溯法通过对问题的分析,找出一个解决问题的线索,然后沿着这个线索逐步试探,对于每一步的试探,若试探成功,就得到问题的解,若试探失败,就逐步回退,换别的路线再进行试探。
例求解皇后问题。
由n2个方块排成n行n列的正方形称为“n元棋盘”。
如果两个皇后位于棋盘上的同一行或同一列或同一对角线上,则称它们为互相攻击。
现要求找使n元棋盘上的n个皇后互不攻击的所有布局。
假设棋盘上的每一行放置一个皇后,分别用自然数进行编号为1,2,n。
首先定义一个长度为n的一维数组q,其中每一个元素qi(i1,2,n)随时记录第i行上的皇后所在的列号。
初始时,先将各皇后放在各行的第1列。
即数组q的初值为qi1,i1,2,n第i行与第j行上的皇后在某一对角线上的条件为|qiqj|ij|而它们在同一列上的条件为qiqj回溯法的步骤如下:
从第一行(即i1)开始进行以下过程:
设前i1行上的皇后已经布局好,即它们均互不攻击。
现在考虑安排第i行上的皇后的位置,使之与前i1行上的皇后也都互不攻击。
为了实现这一目的,可以从第i行皇后的当前位置qi开始按如下规则向右进行搜索:
若qin1,将第i个皇后放在第1列(即置qi1),且回退一行,考虑重新安排第i1行上的皇后与前i2行上的皇后均互不攻击的下一个位置。
此时如果已退到第0行(实际没有这一行),则过程结束。
若qin,则需检查第i行上的皇后与前i1行的皇后是否互不攻击。
若有攻击,则将第i行上的皇后右移一个位置(即置qiqi1),重新进行这个过程;
若无攻击,则考虑安排下一行上的皇后位置,即置ii1。
若当前安排好的皇后是在最后一行(即第n行),则说明已经找到了n个皇后互不攻击的一个布局,将这个布局输出(即输出qi,i1,2,n)。
然后将第n行上的皇后右移一个位置(即置qnqn1),重新进行这个过程,以便寻找下一个布局。
回溯法求解皇后问题。
PROCEDUREQUEEN(n)定义长度为n的数组存储空间q。
FORi1TOnDOqi1i1loop:
IF(qin)THENk1WHILE(ki)and(qkqi)*(|qkqi|ki|)0)DOkk1IF(ki)THENqiqi1ELSEii1IF(in)THENOUTPUTqi(i1,2,n)qnqn1inELSEqi1ii1IF(i1)THENRETURNqiqi1GOTOloopRETURN#includestdio.h#includemath.h#includestdlib.hvoidqueen(intn)inti,j,k,jt,*q;
qmalloc(n*sizeof(int);
in;
i)qi0;
i0;
jt1;
printf(n);
printf(%dqueenproblemn,n);
while(jt1)if(qin)k0;
while(ki)&
(qkqi)*(fabs(qkqi)fabs(ki)!
0)kk1;
if(ki)qiqi1;
elseii1;
if(in1)for(j0;
jn;
j)printf(%5d,qj1);
p