关于迭代的介绍-源自搜狗百科

在RUP中,迭代被定义为:迭代包括产生产品发布(稳定、可执行的产品版本)的全部开发活动和要使用该发布必需的所有其他外围元素。

1相关概念

函数

在数学中,迭代函数是在碎形和动力系统中深入研究的对象。迭代函数是重复的与自身复合的函数,这个过程叫做迭代。

模型

迭代模型是RUP(RationalUnifiedProcess,统一软件开发过程统一软件过程)推荐的周期模型。

算法

迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。

2RUP模型

理解

如果认为这个解释难以理解,可以这样想:

我们开发一个产品,如果不太复杂,会采用瀑布模型,简单的说就是先定义需求,然后构建框架,然后写代码,然后测试,最后发布一个产品。

这样,几个月过去了,直到最后一天发布时,大家才能见到一个产品。

这样的方式有明显的缺点,假如我们对用户的需求判断的不是很准确时——这是很常见的问题,一点也不少见——你工作了几个月甚至是几年,当你把产品拿给客户看时,客户往往会大吃一惊,这就是我要的东西吗?

方法

迭代的方式就有所不同,假如这个产品要求6个月交货,我在第一个月就会拿出一个产品来,当然,这个产品会很不完善,会有很多功能还没有添加进去,bug很多,还不稳定,但客户看了以后,会提出更详细的修改意见,这样,你就知道自己距离客户的需求有多远,我回家以后,再花一个月,在上个月所作的需求分析、框架设计、代码、测试等等的基础上,进一步改进,又拿出一个更完善的产品来,给客户看,让他们提意见。

就这样,我的产品在功能上、质量上都能够逐渐逼近客户的要求,不会出现我花了大量心血后,直到最后发布之时才发现根本不是客户要的东西的情况。

优势

这样的方法很不错,但他也有自己的缺陷,那就是周期长、成本很高。在应付大项目、高风险项目——就比如是航天飞机的控制系统时,迭代的成本比项目失败的风险成本低得多,用这种方式明显有优势。

如果你是给自己的单位开发一个小MIS,自己也比较清楚需求,工期上也不过花上个把月的时间,用迭代就有点杀鸡用了牛刀,那还是瀑布模型更管用,即使是做得不对,顶多再花一个月重来,没什么了不起。

3算法介绍

简介

有些国外的教材,如《C++Primer》第四版的中文版,会把iterative翻译成迭代。

在java中Iterative仅用于遍历集合,本身并不提供盛装对象的能力。如果需要创建Iterative对象,则必须有一个被迭代的集合。没有集合的Iterative仿佛无本之木,没有存在的价值。iterative是反复的意思,所以,有时候,迭代也会指循环执行,反复执行的意思。

迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。

利用迭代算法解决问题,需要做好以下三个方面的工作:

确定变量

在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。

建立关系式

所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。

过程控制

在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地重复执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。

例1:一个饲养场引进一只刚出生的新品种兔子,这种兔子从出生的下一个月开始,每月新生一只兔子,新生的兔子也如此繁殖。如果所有的兔子都不死去,问到第12个月时,该饲养场共有兔子多少只?

分析:这是一个典型的递推问题。我们不妨假设第1个月时兔子的只数为u1,第2个月时兔子的只数为u2,第3个月时兔子的只数为u3,……根据题意,“这种兔子从出生的下一个月开始,每月新生一只兔子”,则有

以下是引用片段:

u1=1,u2=u1+u1×1=2,u3=u2+u2×1=4,……

根据这个规律,可以归纳出下面的递推公式:

以下是引用片段:

un=(un-1)×2(n≥2)*①

对应un和un-1,定义两个迭代变量y和x,可将上面的递推公式转换成如下迭代关系:

以下是引用片段:

y=x*2

x=y

让计算机对这个迭代关系重复执行11次,就可以算出第12个月时的兔子数。参考程序如下:

以下是引用片段:

cls

x=1

fori=2to12

y=x*2

x=y

nexti

printy

end

例2:阿米巴用简单分裂的方式繁殖,它每分裂一次要用3分钟。将若干个阿米巴放在一个盛满营养参液的容器内,45分钟后容器内充满了阿米巴。已知容器最多可以装阿米巴220个。试问,开始的时候往容器内放了多少个阿米巴?请编程序算出。

分析:根据题意,阿米巴每3分钟分裂一次,那么从开始的时候将阿米巴放入容器里面,到45分钟后充满容器,需要分裂45/3=15次。而“容器最多可以装阿米巴220个”,即阿米巴分裂15次以后得到的个数是220。题目要求我们计算分裂之前的阿米巴数,不妨使用倒推的方法,从第15次分裂之后的220个,倒推出第15次分裂之前(即第14次分裂之后)的个数,再进一步倒推出第13次分裂之后、第12次分裂之后、……第1次分裂之前的个数。

设第1次分裂之前的个数为x0、第1次分裂之后的个数为x1、第2次分裂之后的个数为x2、……第15次分裂之后的个数为x15,则有

以下是引用片段:

x14=x15/2、x13=x14/2、……xn-1=xn/2(n≥1)

因为第15次分裂之后的个数x15是已知的,如果定义迭代变量为x,则可以将上面的倒推公式转换成如下的迭代公式:

x=x/2(x的初值为第15次分裂之后的个数220)

让这个迭代公式重复执行15次,就可以倒推出第1次分裂之前的阿米巴个数。因为所需的迭代次数是个确定的值,我们可以使用一个固定次数的循环来实现对迭代过程的控制。参考程序如下:

以下是引用片段:

cls

x=2^20

fori=1to15

x=x/2

nexti

printx

end

例3:验证谷角猜想。日本数学家谷角静夫在研究自然数时发现了一个奇怪现象:对于任意一个自然数n,若n为偶数,则将其除以2;若n为奇数,则将其乘以3,然后再加1。如此经过有限次运算后,总可以得到自然数1。人们把谷角静夫的这一发现叫做“谷角猜想”。

要求:编写一个程序,由键盘输入一个自然数n,把n经过有限次运算后,最终变成自然数1的全过程打印出来。

分析:定义迭代变量为n,按照谷角猜想的内容,可以得到两种情况下的迭代关系式:当n为偶数时,n=n/2;当n为奇数时,n=n*3+1。用QBASIC语言把它描述出来就是:

以下是引用片段:

ifn为偶数then

n=n/2

else

n=n*3+1

endif

这就是需要计算机重复执行的迭代过程。这个迭代过程需要重复执行多少次,才能使迭代变量n最终变成自然数1,这是我们无法计算出来的。因此,还需进一步确定用来结束迭代过程的条件。仔细分析题目要求,不难看出,对任意给定的一个自然数n,只要经过有限次运算后,能够得到自然数1,就已经完成了验证工作。因此,用来结束迭代过程的条件可以定义为:n=1。参考程序如下:

以下是引用片段:

cls

input"Pleaseinputn=";n

dountiln=1

ifnmod2=0then

rem如果n为偶数,则调用迭代公式n=n/2

n=n/2

print"—";n;

else

n=n*3+1

print"—";n;

endif

loop

end

4函数介绍

迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为f(x)=0,用某种数学方法导出等价的形式x=g(x),然后按以下步骤执行:

⑴选一个方程的近似根,赋给变量x0;

⑵将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0;

⑶当x0与x1的差的绝对值还大于指定的精度要求时,重复步骤⑵的计算。

若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就认为是方程的根。上述算法用C程序的形式表示为:

【算法】迭代法求方程的根

以下是引用片段:

{x0=初始近似根;

do{

x1=x0;

x0=g(x1);/*按特定的方程计算新的近似根*/

}while(fabs(x0-x1)>Epsilon);

printf(“方程的近似根是%f\n”,x0);

}

迭代算法也常用于求方程组的根,令

X=(x0,x1,…,xn-1)

设方程组为:

xi=gi(X)(I=0,1,…,n-1)

则求方程组根的迭代算法可描述如下:

【算法】迭代法求方程组的根

以下是引用片段:

{for(i=0;i

x=初始近似根;

do{

for(i=0;i

y=x;

for(i=0;i

x=gi(X);

for(delta=0.0,i=0;i

if(fabs(y-x)>delta)delta=fabs(y-x);

}while(delta>Epsilon);

for(i=0;i

printf(“变量x[%d]的近似根是%f”,I,x);

printf(“\n”);

}

具体使用迭代法求根时应注意以下两种可能发生的情况:

⑴如果方程无解,算法求出的近似根序列就不会收敛,迭代过程会变成死循环,因此在使用迭代算法前应先考察方程是否有解,并在程序中对迭代的次数给予限制;

⑵方程虽然有解,但迭代公式选择不当,或迭代的初始近似根选择不合理,也会导致迭代失败。

①N为兔子的个数,M为月份(N+N*1)^M-1=2N^M-1(注解)

时间: 2025-01-04 04:58:26

关于迭代的介绍-源自搜狗百科的相关文章

微信公众平台搜索文章会调用搜狗百科内容?

早上ytkah进行微信公众平台开发时想找那个“公众平台测试帐号”,在手机端订阅号列表上端的“搜索文章”框中输入测试二字,如下图所示,在搜索结果列表中,有一个是搜狗百科展示的内容,出于好奇,点开看了一下,内容确实是搜狗的手机版页面, 按住屏幕往下拉,有一个提示“网页由 baike.m.sogou.com 提供”,这个是微信客户端在加载第三方网页固有的提示,以后会不会有其他的内容形式调用不得而知,但是相信随着腾讯和搜狗的深入合作,以后的移动端流量将会非常巨大 微信的体量那么大,如果你能通过它来积累大

微信公众号和微信文章纳入搜狗百科词条

据海峡经济网消息,搜狗百科宣布整合搜狗微信搜索独有资源,首次将微信公众号及内容纳入词条查询结果,新增深度实用的微信公众号内容知识,更好地满足了用户个性化需求.用户使用搜狗搜索APP.WAP页面查询该关键词时,在搜狗百科词条页面,该词条页面的目录及词条末尾,即可发现“微信文章”和“公众账号”快捷入口. 原文标题:搜狗百科推出特色服务:微信公众号内容纳入词条查询结果,地址在这http://www.hxjjw.com.cn/news/bzgg/20141029/149112.html

张驰(中国著名男装设计师) - 搜狗百科

张驰(中国著名男装设计师) - 搜狗百科 张驰

斐波那契数列——摘自搜狗百科

1数列公式 递推公式 斐波那契数列:0.1.1.2.3.5.8.13.21.34.55.89.144... 如果设F(n)为该数列的第n项(n∈N*),那么这句话可以写成如下形式: F(0) = 0,F(1)=F(2)=1,F(n)=F(n-1)+F(n-2) (n≥3) 通项公式 通项公式的推导方法一:利用特征方程 线性递推数列的特征方程为: X^2=X+1 解得 X1=(1+√5)/2, X2=(1-√5)/2. 斐波拉契数列则F(n)=C1*X1^n + C2*X2^n ∵F(1)=F(2

SIR,CQI,RSSI(转自搜狗百科)LTE上报的CQI、PMI、RI分别有什么用(转载自C114论坛)

信号干扰比 (Signal to Interference Ratio). 定义为(RSCP/Interference)×SF.这里针对的下行信号RSCP为DPCH或者PDSCH信道上接收信号码功率:Interference为在RSCP测量的时隙上不能被接收机消除的干扰:具体获取方法依赖于具体的设备.pecker取的是对应时隙的ISCP作为Interference.SF为使用的扩频因子转换为dB,计算公式为:SIR( dB ) = RSCP(dBm)- ISCP(dBm) + 10log(SF)

卡特兰数————摘自搜狗百科

卡特兰数 卡特兰数(2) 卡塔兰数是组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰(1814–1894)命名.历史上,清代数学家明安图(1692年-1763年)在其<割圜密率捷法>最早用到“卡塔兰数”,远远早于卡塔兰. 1简介 卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列.由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名,其前几项为 : 1, 1, 2, 5, 14, 42, 132,

CreateWindowEx(摘自搜狗百科)

函数功能 该函数创建一个具有扩展风格的层叠式窗口.弹出式窗口或子窗口 函数参数 dwExStyle 指定窗口的扩展风格.该参数可以是下列值: WS_EX_NODRAG:防止窗口被移动 WS_EX_ACCEPTFILES:指定以该风格创建的窗口接受一个拖拽文件. WS_EX_APPWINDOW:当窗口可见时,将一个顶层窗口放置到任务条上. WS_EX_CLIENTEDGE:指定窗口有一个带阴影的边界. WS_EX_CONTEXTHELP:在窗口的标题条包含一个问号标志.当用户点击了问号时,鼠标光标

ngResource和REST介绍

ngResource和REST介绍 一.RESTful介绍 RESTful维基百科 REST(表征性状态传输,Representational State Transfer)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格.RESTful风格的设计不仅具有更好的可读性(Human Readable),而且易于做缓存以及服务器扩展(scalability).REST风格体现在URL设计上: 每个URL对应一个资源 对资源的不同操作对应于HTTP的不同方法 资源表现形

[python学习] 简单爬取维基百科程序语言消息盒

文章主要讲述如何通过Python爬取维基百科的消息盒(Infobox),主要是通过正则表达式和urllib实现:后面的文章可能会讲述通过BeautifulSoup实现爬取网页知识.由于这方面的文章还是较少,希望提供一些思想和方法对大家有所帮助.如果有错误或不足之处,欢迎之处:如果你只想知道该篇文章最终代码,建议直接阅读第5部分及运行截图. 一. 维基百科和Infobox 你可能会疑惑Infobox究竟是个什么东西呢?下面简单介绍. 维基百科作为目前规模最大和增长最快的开放式的在线百科系统,其典型