算法抽样估计案例文档Word格式文档下载.docx
《算法抽样估计案例文档Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《算法抽样估计案例文档Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。
连接程序框图的两部分
画程序框图的规则如下:
①使用标准的图形符号。
②框图一般按从上到下、从左到右的方向画。
③除判断框外,大多数流程图符号只有一个进入点和一个退出点。
判断框具有超过一个退
出点的唯一符号。
④判断框分两大类,一类判断框“是”与“否”两分支的判断,而且有且仅有两个结果;
另一类是多分支判断,有几种不同的结果。
⑤在图形符号内描述的语言要非常简练清楚。
程序框图的三种基本结构:
(1)顺序结构
顺序结构是最简单的算法结构,语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。
顺序结构在程序框图中的体现就是用流程线将程序框自上而下地连接起来,按顺序执行算法步骤。
其结构形式如图所示.
(2)条件结构
在一个算法中,经常遇到一些条件的判断,算法的流程根据条件是否成立有不同的流向.这种先根据条件作出判断,再决定执行哪一种操作的结构称为条件结构,其结构形式如图甲、乙所示:
(3)循环结构
在一些算法中,经常会出现从某处开始,按照一定条件,反复执行某一处理步骤的情况,这就是循环结构,反复执行的处理步骤为循环体,显然,循环结构中一定包含条件结构。
循环结构又称重复结构,循环结构可细分为两类:
循环结构有两种形式:
①当型(while型):
先判断条件,再执行循环体;
当型循环结构,它的功能是当给定的条件P成立时,执行A框,A框执行完毕后,再判断条件P是否成立,如果仍然成立,再执行A框,如此反复执行A框,直到某一次条件P不成立为止,此时不再执行A框,离开循环结构。
②直到型(until型):
先执行一次循环体,再判断条件。
直到型循环结构,它的功能是先执行,然后判断给定的条件P是否成立,如果P仍然不成立,则继续执行A框,直到某一次给定的条件P成立为止,此时不再执行A框,离开循环结构。
注:
①循环结构要在某个条件下终止循环,这就需要条件结构来判断。
因此,循环结构中一定包含条件结构,但不允许“死循环”。
②在循环结构中都有一个计数变量和累加变量。
计数变量用于记录循环次数,累加变量用于输出结果。
计数变量和累加变量一般是同步执行的,累加一次,计数一次。
框图:
(1)结构图
首先,你要对所画结构图的每一部分有一个深刻的理解和透彻的掌握,从头至尾抓住主要脉络进行分解,然后将每一步分解进行归纳与提炼,形成一个个知识点并将其逐一地写在矩形框内。
最后,按其内在的逻辑顺序将它们排列起来并用线段相连,这样就画成了知识结构图。
认识结构图:
由构成系统的若干要素和表达各要素之间关系的连线构成。
绘制结构图的步骤:
①先确定组成系统的基本要素,以及这些要素之间的关系;
②处理好“上位”与“下位”的关系;
“下位”要素比“上位”要素更为具体,“上位”要素比“下位”要素更为抽象。
③再逐步细化各层要素;
④画出结构图,表示整个系统。
(2)流程图
绘制流程图的一般过程:
首先,用自然语言描述流程步骤;
其次,分析每一步骤是否可以直接表达,或需要借助于逻辑结构来表达;
再次,分析各步骤之间的关系;
最后,画出流程图表示整个流程。
鉴于用自然语言描述算法所出现的种种弊端,人们开始用流程图来表示算法,这种描述方法既避免了自然语言描述算法的拖沓冗长,又消除了起义性,且能清晰准确地表述该算法的每一步骤,因而深受欢迎。
设计算法解决问题的主要步骤:
第一步、用自然语言描述算法;
算法可以用自然语言来描述,但为了使算法的程序或步骤表达得更为直观,我们更经常地用图形方式来表示它。
第二步、画出程序框图表达算法;
第三步、写出计算机相应的程序并上机实现
①画流程图的时候一定要清晰,用铅笔和直尺画,要养成有开始和结束的好习惯
②拿不准的时候可以先根据结构特点画出大致的流程,反过来再检查,比如:
遇到判断框时,往往临界的范围或者条件不好确定,就先给出一个临界条件,画好大致流程,然后检查这个条件是否正确,再考虑是否取等号的问题,这时候也就可以有几种书写方法了。
③在输出结果时,如果有多个输出,一定要用流程线把所有的输出总结到一起,一起终结到结束框。
基本算法语句
输入语句、输出语句和赋值语句
INPUT“提示内容”;
变量
输入语句:
INPUT语句,这个语句的一般格式是:
其中,“提示内容”一般是提示用户输入什么样的信息。
INPUT语句不但可以给单个变量赋值,还可以给多个变量赋值,其格式为:
INPUT“提示内容1,提示内容2,提示内容3,…”;
变量1,变量2,变量3,…
①“提示内容”与变量之间必须用分号“;
”隔开。
PRINT“提示内容”;
表达式
②各“提示内容”之间以及各变量之间必须用逗号“,”隔开。
但最后的变量的后面不需要。
输出语句:
PRINT语句是输出语句。
它的一般格式是:
同输入语句一样,表达式前也可以有“提示内容”。
输出语句的用途:
输出常量,变量的值和系统信息;
输出数值计算的结果。
变量=表达式
赋值语句:
用来表明赋给某一个变量一个具体的确定值的语句。
除了输入语句,赋值语句也可以给变量提供初值。
赋值语句中的“=”叫做赋值号。
赋值语句的作用:
先计算出赋值号右边表达式的值,然后把这个值赋给赋值号左边的变量,使该变量的值等于表达式的值。
①赋值号左边只能是变量名字,而不能是表达式。
如:
2=X是错误的。
②赋值号左右不能对换。
如“A=B”“B=A”的含义运行结果是不同的。
③不能利用赋值语句进行代数式的演算。
(如化简、因式分解、解方程等)
④赋值号“=”与数学中的等号意义不同。
条件语句
算法中的条件结构是由条件语句来表达的,是处理条件分支逻辑结构的算法语句。
(IF-THEN-ELSE格式)
当计算机执行上述语句时,首先对IF后的条件进行判断,如果条件符合,就执行THEN后的语句1,否则执行ELSE后的语句2。
在某些情况下,也可以只使用IF-THEN语句:
(即IF-THEN格式)
计算机执行这种形式的条件语句时,也是首先对IF后的条件进行判断,如果条件符合,就执行THEN后的语句,如果条件不符合,则直接结束该条件语句,转而执行其他语句。
条件语句的作用:
在程序执行过程中,根据判断是否满足约定的条件而决定是否需要转换到何处去。
需要计算机按条件进行分析、比较、判断,并按判断后的不同情况进行不同的处理。
循环语句
算法中的循环结构是由循环语句来实现的。
对应于程序框图中的两种循环结构,一般程序设计语言中也有当型(WHILE型)和直到型(UNTIL型)两种语句结构。
即WHILE语句和UNTIL语句。
WHILE语句的一般格式是:
其中循环体是由计算机反复执行的一组语句构成的。
WHLIE后面的“条件”是用于控制计算机执行循环体或跳出循环体的。
当计算机遇到WHILE语句时,先判断条件的真假,如果条件符合,就执行WHILE与WEND之间的循环体;
然后再检查上述条件,如果条件仍符合,再次执行循环体,这个过程反复进行,直到某一次条件不符合为止。
这时,计算机将不执行循环体,直接跳到WEND语句后,接着执行WEND之后的语句。
因此,当型循环有时也称为“前测试型”循环。
UNTIL语句的一般格式是:
从UNTIL型循环结构分析,计算机执行该语句时,先执行一次循环体,然后进行条件的判断,如果条件不满足,继续返回执行循环体,然后再进行条件的判断,这个过程反复进行,直到某一次条件满足时,不再执行循环体,跳到LOOPUNTIL语句后执行其他语句,是先执行循环体后进行条件判断的循环语句。
算法案例
求最大公约数
(1)短除法:
求两个正整数的最大公约数的步骤:
先用两个数公有的质因数连续去除,一直除到所得的商是两个互质数为止,然后把所有的除数连乘起来
(2)穷举法(也叫枚举法):
穷举法求两个正整数的最大公约数的解题步骤:
从两个数中较小数开始由大到小列举,直到找到公约数立即中断列举,得到的公约数便是最大公约数
(3)辗转相除法:
辗转相除法求两个数的最大公约数,其算法可以描述如下:
①输入两个正整数m和n;
②求余数r:
计算m除以n,将所得余数存放到变量r中;
③更新被除数和余数:
m=n,n=r;
④判断余数r是否为0。
若余数为0,则输出结果;
否则转向第②步继续循环执行
如此循环,直到得到结果为止。
例1求两个正数8251和6105的最大公约数。
分析:
8251与6105两数都比较大,而且没有明显的公约数,可以把它们都变小一点,根据已有的知识即可求出最大公约数
8251=6105×
1+2146
显然8251的最大公约数也必是2146的约数,同样6105与2146的公约数也必是8251的约数,
所以8251与6105的最大公约数也是6105与2146的最大公约数。
6105=2146×
2+1813
2146=1813×
1+333
1813=333×
5+148
333=148×
2+37
148=37×
4+0
则37为8251与6105的最大公约数。
以上我们求最大公约数的方法就是辗转相除法。
也叫欧几里德算法,它是由欧几里德在公元前300年左右首先提出的。
利用辗转相除法求最大公约数的步骤如下:
①用较大的数m除以较小的数n得到一个商
和一个余数
;
②若
=0,则n为m,n的最大公约数;
若
≠0,则用除数n除以余数
得到一个商
③若
=0,则
为m,n的最大公约数;
≠0,则用除数
除以余数
……
依次计算直至
=0,此时所得到的
即为所求的最大公约数。
(4)更相减损术:
我国早期也有解决求最大公约数问题的算法,就是更相减损术。
在《九章算术》中记载了更相减损术求最大公约数的步骤:
可半者半之,不可半者,副置分母•子之数,以少减多,更相减损,求其等也,以等数约之
翻译为:
①任意给出两个正数;
判断它们是否都是偶数。
若是,用2约简;
若不是,执行第二步。
②以较大的数减去较小的数,接着把较小的数与所得的差比较,并以大数减小数。
继续这个操作,直到所得的数相等为止,则这个数(等数)就是所求的最大公约数。
步骤:
继续这操作,直到所得的数相等为止,则这个数(等数)就是所求的最大公约数。
例2用更相减损术求98与63的最大公约数.
由于63不是偶数,把98和63以大数减小数,并辗转相减,
即:
98-63=35
63-35=28
35-28=7
28-7=21
21-7=14
14-7=7所以,98与63的最大公约数是7。
辗转相除法与更相减损术的区别:
①都是求最大公约数的方法,计算上辗转相除法以除法为主,更相减损术以减法为主,计算次数上辗转相除法计算次数相对较少,特别当两个数字大小区别较大时计算次数的区别较明显。
②从结果体现形式来看,辗转相除法体现结果是以相除余数为0则得到,而更相减损术则以减数与差相等而得到
对于两个正整数如何选择合适的方法求他们的最大公约数
方法
适用范围及特点
短除法
适合两个较小的正整数或两个质因数较少的正整数,简便易操作。
穷举法
适合计算机操作,但一一验证过于繁琐。
辗转相除法
适用于两个较大的正整数,以除法为主,辗转相除法计算次数相对较少,特别当两个数字大小差别较大时计算次数较明显。
更相减损术
适用于两个较大的正整数,更相减损术以减法为主,计算次数上相对于辗转相处法较多。
秦九韶算法
秦九韶算法的一般规则:
秦九韶算法适用一般的多项式f(x)=anxn+an-1xn-1+….+a1x+a0的求值问题。
用秦九韶算法求一般多项式f(x)=anxn+an-1xn-1+….+a1x+a0当x=x0时的函数值,可把n次多项式的求值问题转化成求n个一次多项式的值的问题,即求
v0=an
v1=anx+an-1
v2=v1x+an-2
v3=v2x+an-3
……..
vn=vn-1x+a0
观察秦九韶算法的数学模型,计算vk时要用到vk-1的值,若令v0=an。
我们可以得到下面的递推公式:
vk=vk-1+an-k(k=1,2,…n)
这是一个在秦九韶算法中反复执行的步骤,可以用循环结构来实现
通过一次式的反复计算逐步得出高次多项式的值,对于一个n次多项式,只要作n次乘
法和n次加法即可。
表达式如下:
例题:
秦九韶算法计算多项式
答案:
6,6
排序:
排序的算法很多,课本主要介绍里两种排序方法:
直接插入排序和冒泡排序
(1)直接插入排序
在日常生活中,经常碰到这样一类排序问题:
把新的数据插入到已经排好顺序的数据列中。
思想就是读一个,排一个。
将数组的第1个数据放入数组的第1个位置,以后读入的数据与已存入数组的数据进行比较,确定它按从大到小(从小到大)的排列中排在正确的位置。
将该位置以及以后的元素向后推移一个位置,将读入的新数填到空出的位置即可。
例如:
一组从小到大排好顺序的数据列{1,3,5,7,9,11,13},通常称之为有序列,我们用序号1,2,3,……表示数据的位置,欲把一个新的数据8插入到上述序列中。
完成这个工作要考虑两个问题:
①确定数据“8”在原有序列中应该占有的位置序号。
数据“8”所处的位置应满足小于或等于原有序列右边所有的数据,大于其左边位置上所有的数据。
②将这个位置空出来,将数据“8”插进去。
对于一列无序的数据列,例如:
{49,38,65,97,76,13,27,49},如何使用这种方法进行排序呢?
基本思想很简单,即反复使用上述方法排序,由序列的长度不断增加,一直到完成整个无序列就有序了
首先,{49}是有序列,我们将38插入到有序列{49}中,得到两个数据的有序列:
{38,49},
然后,将第三个数据65插入到上述序列中,得到有序列:
{38,49,65}
…………
按照这种方法,直到将最后一个数据65插入到上述有序列中,得到
{13,27,38,49,49,65,76,97}
这样,就完成了整个数据列的排序工作。
注意到无序列“插入排序算法”成为了解决这类问题的平台
(2)冒泡法排序
所谓冒泡法排序,形象地说,就是将一组数据按照从小到大的顺序排列时,小的数据视为质量轻的,大的数据视为质量沉的。
一个小的数据就好比水中的气泡,往上移动,一个较大的数据就好比石头,往下移动。
显然最终会沉到水底,最轻的会浮到顶,反复进行,直到数据列排成为有序列。
以上过程反映了这种排序方法的基本思路。
理解:
以从大到小为例:
依次比较相邻的两个数,把大的放前面,小的放后面。
即首先比较第1个数和第2个数,大数放前,小数放后;
然后比较完成第2个数和第3个数;
......;
直到比较完了最后两个数。
第一趟排序结束,最小的一定沉到最后。
重复上过程,仍从第1个数开始,到最后第2个数......由于在排序过程中总是大数往前,小数往后,相当气泡上升,所以叫冒泡排序。
我们先对一组数据进行分析。
设待排序的数据为:
{49,38,65,97,76,13,27,49}
排序的具体操作步骤如下:
①将第1个数与右边相邻的数38进行比较,因为38<
49,49应下沉,即向右移动,所以
交换他们的位置,得到新的数据列:
{38,49,65,97,76,13,27,49}
②将新数据列中的第2个数49与右边相邻的数65进行比较,因为65>
49,所以顺序不变,得到新的数据列:
③将新数据列中的第3个数65与右边相邻的数97进行比较,因为97>
65,所以顺序不变,得到新的数据列:
④将新数据列中的第4个数97与右边相邻的数76进行比较,因为76<
97,97应下沉,所以顺序不变,得到新的数据列:
{38,49,65,76,97,13,27,49}
⑤将新数据列中的第5个数97与右边相邻的数13进行比较,因为13<
97,97应下沉,所以顺序改变,得到新的数据列:
{38,49,65,76,13,97,27,49}
⑥将新数据列中的第6个数97与右边相邻的数27进行比较,因为27<
⑦将新数据列中的第7个数97与右边相邻的数49进行比较,因为49<
{38,49,65,76,13,97,49,27}
我们把上述过程称为一趟排序。
其基本特征是最大的数据沉到底,即排在最左边位置上的数据是数组中最大的数据。
反复执行上面的步骤,就能完成排序工作,排序过程不会超过7趟。
这种排序的方法称为冒泡排序。
上面的分析具有一般性,如果数据列有n个数据组成,至多经过n-1趟排序,就能完成整个排序过程
进位制:
进位制是一种记数方式,用有限的数字在不同的位置表示不同的数值。
可使用数字符号的个数称为基数,基数为n,即可称n进位制,简称n进制。
现在最常用的是十进制,通常使用10个阿拉伯数字0—9进行记数。
对于任何一个数,我们可以用不同的进位制来表示。
比如:
十进数57,可以用二进制表示为111001,也可以用八进制表示为71、用十六进制表示为39,它们所代表的数值都是一样的。
一般地,若k是一个大于一的整数,那么以k为基数的k进制可以表示为:
,
而表示各种进位制数一般在数字右下脚加注来表示,如111001
(2)表示二进制数,34(5)表示5进制数。
进位制间的转换
关于进位制的转换,教科书上以十进制和二进制之间的转换为例讲解,并推广到十进制和其它进制之间的转换。
这样做的原因是,计算机是以二进制的形式进行存储和计算数据的,而一般我们传输给计算机的数据是十进制数据,因此计算机必须先将十进制数转换为二进制数,再处理,显然运算后首次得到的结果为二进制数,同时计算机又把运算结果由二进制数转换成十进制数输出。
非十进制数转换为十进制数比较简单,只要计算下面的式子值即可:
第一步:
从左到右依次取出k进制数
各位上的数字,乘以相应的k的幂,k的幂从n开始取值,每次递减1,递减到0,即
第二步:
把所得到的乘积加起来,所得的结果就是相应的十进制数。
把二进制数110011
(2)化为十进制数.
110011=1*25+1*24+0*23+0*22+1*21+1*20=32+16+2+1=51
把八进制数
化为十进制数.
十进制数转换成非十进制数
把十进制数转换为二进制数,教科书上提供了“除2取余法”,我们可以类比得到十进制数转换成k进制数的算法“除k取余法”。
非十进制之间的转换
一个自然的想法是利用十进制作为桥梁。
教科书上提供了一个二进制数据与16进制数据之间的互化的方法,也就是先有二进制数转化为十进制数,再由十进制数转化成为16进制数。
统计:
就是通过对样本的研究来估计总体的相关情况。
这种估计的可靠性,取决于两个方面:
一是对样本恰当的采集,二是对样本进行适当的分析.在可能的情况下,样本容量越大越好.在确定样本容量后,对样本的采集的原则只有一条:
公平性.即使每个个体被采入的概率相等(即若总体容量为N,样本容量为n,应使每个个体被采入的概率均为
).
为此,我们常用以下三种样本采集法:
简单随机抽样:
设一个总体含有N个个体,从中逐个不放回地抽取n个个体作为样本(n≤N),如果每次抽取时总体内的各个个体被抽到的机会都相等,就把这种抽样方法叫做简单随机抽样.
简单随机抽样的特点
①被抽取样本的总体的个体数有限.
②从总体中逐个地进行抽取,使抽样便于在实践中操作.
③它是不放回抽样,这使其具有广泛地应用性.
④每一次抽样时,每个个体等可能地被抽到,保证了抽样方法的公平性.
最常用的简单随机抽样方法有抽签法和随机数表法.一般适用于样本容量较小者.
系统抽样
当总体中个体数较多时,可以将总体分成均衡的几部分,然后按照预先制定的规则,从每一部分抽取一个个体,得到所需的样本,这种抽样的方法叫做系统抽样.
系统抽样的操作步骤
①先将总体的N个个体编号.
②为将总体的编号分段,要确定分段间隔k,当
(N为总体中的个体数,n为样本容量)是整数时,k=
当
不是整数时,通过从总体中剔除一些个体使剩下个体个数N′能被n整除,这时k=
.
③在第一段用简单随机抽样确定起始个体编号l(l≤k).
④按照一定的规则抽取样本.通常是将l加上间隔k得到第2个编号(l+k),将(l+k)加上k,得到第3个编号(l+2k),依次进行下去,直到获取整个样本.
分层抽样
一般地,.当总体由差异明显的几部分构成时,在抽样时,将总体分成互不交叉的层,然后按照一定的比例,从各层独立地抽取一定数量的个体,将各层中取出的个体合在一起作为样本,这种抽样方法叫做分层抽样.
分层抽样的步骤
①确定样本容量与总体个数的比.
②计算出各层需抽取的个体数.
③采用简单随机抽样或系统抽样在各层中抽取个体.
④将各层中抽取的个体合在一起,就是所要抽取的样本.
①每层中抽取的样本数应为n1·
(n1为该层总个数,n为样本容量,N为总体个数);
②在每层中应采用简单随机抽样。
常用的三种抽样方法的比较:
类别
共同点
各自特点
相互联系
适用范围
简单随机抽样
抽样过程种每个个体被抽取的机会均等,概率为
①被抽取样本的总体个数是有限的;
②是从总体中逐个地抽取;
③是一种不放回抽样。
常用方法:
抽签法和随机数表法
总体种的个体数较少,
将总体均匀分成几部分,按事先确定的规则在各部分抽取.步骤:
①编号;
②分