当前位置:文档之家› #【数值模拟1】各种方法总结【1】

#【数值模拟1】各种方法总结【1】

#【数值模拟1】各种方法总结【1】
#【数值模拟1】各种方法总结【1】

油藏数值模拟基本过程

一、数值模拟发展概况

30年代人们开始研究地下流体渗流规律并将理论用于石油开发;

50年代在模似计算的方法方面,取得较大进展;

60年代起步,人们开始用计算机解决油田开发上的一些较为简单间题,由于当时计算机的速度只有每秒几万到几十万次,实际上只能做些简单的科学运算;

70 年后主要体现于计算机的快速升级带动了油藏数模的迅猛发展,大型标量机计算速度达到100--500万次,内存也高增主约16兆字节。在理论上黑油模型计算方法更趋成熟,D. W. Peaceman的<油藏数值模似基础>以及K. Aziz和A. Settari的<油藏模似>等主要著作都是在这个阶段出版的,但仍受到计算机速度和内存的限制,使用的方法一般仅限于IMPES及半隐式等,只能解决中小型油藏的模拟使用问题;

80年代则是油藏数值模似技术飞跃发展的年代,解决不同类型油藏的数模计算方法及软件相应问世,同时超级向量机的诞生,使计算机速度达到亿次,甚至几十亿次,内存高达10—20亿字节。

90年代特别是后期,油藏模似软件各模块功能也有了惊人的发展,主要体现为向一体化方面发展;即集地震、测井、油藏工程(数模)、工艺及地面集输、经济评价等为一体的大型软件方面发展。

目前油藏数值模似软件基本上形成了一套能处理各种类型油气藏和各种不同开采方式的软件系列。

?黑油模型已被广泛用于各种常规油气藏的模拟;

?裂缝模型可用来解决除砂岩以外的灰岩、花岗岩、凝灰岩和变质岩的裂缝性油气藏开发问题;

?组分模型用于凝析气藏、轻质油、挥发油藏的开发设计和混相驱的研究;

?热采模型用于稠(重)油油藏蒸气吞吐、蒸汽驱和就地燃烧的设计;

?化学驱模型用于在注入水中添加聚合物、表面活性剂、碱等各种化学剂进行三次采油提高采收率的计算和设计。

油藏数值模拟方法的新突破

随着计算机运算速度的提高,向量算法的出现和使用是软件设计上一个划时代的发展。预处理共轭梯度法更快速、有效地解各种更为复杂和困难的大型稀疏线性方程组。网格化方面不局限于静态和动态的局部网格加密技术,不规则网格、PEBI网格的出现更好的解决了在边界、断层插值计算以及面和面垂直正交的新型数模计算方法,更快速收敛。此外多重网格法、混合有限元法、流线法等都在逐步完善和发展。同时,并行处理技术给大中型油田数模工作带来了生机。

二、数值模拟基本原理

以渗流力学为基础建立数值模型,即通过一组方程组,在一定的假设条件下,考虑油藏构造形态、断层位置、砂体分布、储层孔渗饱等参数的变化;流体高压物性变化;不同岩石类型;不同渗流驱替特征曲线(相渗);井筒垂直管流等描述油藏真实的物理过程。主要包括:运动方程、状态方程和连续方程。

1、运动方程

引入单相(或多相)流的达西定律方程:

单相流达西定律:

多相流达西定律:

其中:K:空气渗透率;达西

A:截面积;厘米2

L:长度;厘米

△P:压差;大气压

Kro、Krw:油、水相对渗透率

μo:原油粘度;厘泊

转变为运动方程:

2、连续性方程

研究流入流出单元体中质量的变化方程。根据物质平衡原理,流入单元体中的流体流量减去流出单元体流体流量等于单元体流体质量变化。

单元体中流体质量发生变化的速率

将达西定律代入连续性方程得出油、水的流动方程:

油水

3、状态方程

为求解上述两个方程中的两个未知数P、Sw,引入状态方程:

(1)

(2)h、、为常数

(3)

(4)、为的函数So=1-Sw

由连续性方程推导出油、水的流动方程,从而引入压力方程:

饱和度方程引入含水百分数:

最后把两维两相流动方程写成如下形式:

解上述方程通过把微分方程离散化变代数形式来求解。

三、数值模拟的目的

(一)、为什么开展油藏数值模拟工作

研究和开发一个油田是一个复杂的综合性的科技问题,高精度的地震资料的处理解释提供研究区域的构造、断层、边界及其走向,但地震纵向分辨率受到限制,不能很好的反映一个同相轴(地震道)中沉积砂体的物性变化特征;测井可较好的反映到小于1米以下沉积砂体的物性特征,提供可靠的地层对比结果。但作为新老油田开发方案的研究及剩余油分布的研究,是地震、地质、测井理论方法都无法做到的。地质上仅定性或半定量分析,测井用于生产监测不能以点带面。惟独油藏数值模拟工作可再现生产历史,定量分析剩余油潜力;并做到室内研究投入少、时间短,还可进行开发方案优选及经济评价工作。所以总公司强调开发方案的部署一定要开展数值模拟工作。值得强调的是油藏数值模拟工作提倡一体化,注重前期的地震解释和测井解释即油藏描述工作。

(二)、油藏数值模拟的目的

在进行油藏数值模拟工作前,首先应根据油田开发过程中存在难以解决的实际问题,提出开展此项工作的目的及意义,即最终所要达到解决问题的目标是什么?一般通过油藏数值模拟可进行以下研究工作:

1. 初期开发方案的模拟

1).评价开发方式;如:枯竭开采、注水开发等。

2).选择合理井网、开发层系、确定井位;

3).选择合理的注采方式、注采比;

4).对油藏和流体敏感性研究。

2. 对已开发油田历史模拟

1).核实地质储量,确定基本的驱替机理(如:是天然驱,还是注水开发。);

2).确定产液量和生产周期;

3).确定油藏和流体特性;

4).提出问题、潜力所在区域。

3.动态预测

1).开发指标预测及经济评价

2).评价提高采收率的方法(如:一次采油、注水、注气、化学驱等)

3).剩余油饱和度分布规律的研究,再现生产历史动态

诸如:研究剩余油饱和度分布范围和类型;

单井调整:改变液流方向、注采井别、注水层位;

扩大水驱油效率和波及系数;

4).潜力评价和提高采收率的方向

诸如:? 确定井位、加密井的位置;

? 确定油田开发最大产液量、产量对采收率的影响;

? 确定地面和井的设备。

5).专题和机理问题的研究

诸如:? 对比注水、注气和天然枯竭开采动态;

? 研究各种注水方式的效果;

? 研究井距、井网对油藏动态的影响;

? 研究不同开发层系对油藏动态的影响;

? 研究注水速度对产油量和采收率的影响;

? 研究油藏平面性质和层间非均质性对油藏动态的影响;

? 验证油藏的面积和地质储量;

? 校验油藏数据;

? 为谈判和开发提供必要的数据。

注意

无论是对油藏进行初期开发方案、已开发油田历史模拟,还是动态预测的数值模拟工作,都要求油藏工程师要有针对性的拟定出能解决油田开发实际问题的数值模拟工作详细计划,及其开展此项工作的目的和应达到的目标是什么。

四、选择适当的数值模型及相类

对一般油藏而言,可具有两相(油+水、油+气、气+水)和三相(油、气、水)的模型,而油藏维数可具有一维平面、垂直模型、两维平面(剖面)、两维径相(锥进)模型和

三维平面等模型。但实际油藏其地下流体渗流机理、岩石及流体性质等地质特征不同;生产过程中的开采方式、机理不一等复杂问题,促使非常规油藏模型孕育而生。如:

注意

如何确定多相问题?需了解油藏流体性质、生产特征,以及采油机理。

如:

?气藏是否带油环和下伏水区;

?有无明显相态变化的混相驱油藏;

?有无表现出凝析现象的相态特征;

?气顶及水锥效应是否占优势的油藏等;

由此,在模拟区已确定的同时,需要认真考虑选择模型及相类的问题。

五、数据录取的准备工作

在数据录取工作中,建立精细的油藏地质模型是模拟工作成败的关键;而对生产数据的正确分析、合理取舍、根据生产情况合理分层和划分时间阶段步长,即录入生产数据卡工作也极为重要。油藏模拟工作要研究油田开发中的问题很多,不可能一律对待,也不可能在一个模型里都予以满足,需根据研究任务和客观许可条件建立相应的地质模型。

(一)建立油藏地质模型

1.在油藏描述的基础上建立油藏地质模型

开展油藏描述工作,对油藏的地质、油层非均质特征,沉积相的详细描述和研究,根据油藏沉积相研究建立该油藏特征的沉积模式。

油藏描述分析的目的是综合所有的测井、岩心和生产测试等资料来得出一个和全油田一致的储集层模型。对各种未知的基本参数例如:对顶面深度、砂厚、孔、渗、饱等空间分布的评价中最大限度地发挥现有测井资料的作用,同时将这些参数结合所需储集层的几何特性参量进行计算,并结合地质沉积相分析提供出更为精细、完善的油田地质模型。

确定一个油藏地质模型所需的许多参数,在油藏勘探试采阶段或初期刚投入开发阶段用有限几口井的资料进行计算、解释及建模其精度是不高的,这些参数初始误差越大,则通过历史拟合达到令人满意的油藏特征描述所需的时间越长。所以,无论在对老区或新区进行数值模拟时,应对所选区块选用所有的井(特别是“关键井”)开展油藏描述工作,进行全面的分析研究。

2.运用油藏描述技术对地质沉积模型进行地层网格化

根据实际油田数值模拟所建立网格的需要,进行油藏描述工作时,即可对沉积地质模型进行相应的网格化,这样网格化的模型既能代表油藏沉积相的地质特征又有利于计算机数模作。

3.运用油藏描述技术提供相应沉积模式的地质参数

根据建立的油层沉积模式,提供砂岩、孔、渗、饱等参数的分布模式,并核实地质储量。(二)网格选择

通过以上工作,可建立更为精细、完善的地质模型。而在目前的实际工作中,大多数的老区块并没有开展过此项工作。仅能做得是将各井点参数按网格划分的层系进行厚度加权平均,其结果是厚层贡献值大,薄层贡献值低,实际模拟中很有可能掩盖这样或那样的一些矛盾。如:现有测试资料反映,注水开发油田,注入水沿高渗薄层(厚度为0.5m)突进,造成水淹。而要降低这样的矛盾,只能把焦点倾注于网格层系的划分上,这便是以下所要谈到的问题。

在一个区块的模拟研究中,合理有效的选择网格必须考虑以下几个问题。

1.网格的定向

?网格的界限要和天然的非流动边界相符合,包括整个系统的矩形网格应最大可能的重迭在油藏上;

网格应包含有所有的井位(包括即将完善的新井、扩边井);

网格方向要和流体流动的主要方向(沿主河道方向,即平行渗透率的主轴)和油藏内天然势能梯度吻合;

网格的定向尽量减少死接点数目。

2.网格的尺寸

网格越多,每个时间步长中所需计算的数学问题越多,机时费用越多;

当时间步长由最大饱和度所控制时,较小的网格通常使最大可允许时间步长减小;

一般邻井之间至少要有2~3个空网格或更多,使其能反映油藏结构和参数在空间的连续变化,同时足够的网格能控制和跟踪流体界面的运动;

如果模拟前考虑井网加密方案,应确定适当的加密井井位和网格尺寸;

3.纵向网格的划分

?除考虑本身按沉积韵律划分的层系外,还要考虑生产过程中的整体改造工作,如:补层、压裂酸化、堵水等等;同时,对生产特征(如:底水锥进、气顶等)都应合理考虑,对一个层系中的细分小层问题更是如此;

4.不规则网格的选择

需按实际情况酌情考虑,如井网密度大的井区,相邻的油、水井之间用一个空白网格分开,或处在相邻的网格中也是允许的,必要情况下可考虑井点网格加密。

(三)数据录入准备

1.表格数据

主要指岩石物性、流体性质。

油气PVT数据表(高压物性分析);

水及岩石PVT性质(高压物性分析);

油水相对渗透曲线;

毛管压力曲线(岩心压汞实验)等;

井筒流动数据。

2.网格数据

油藏顶面海拔深度;

砂层厚度(有效);

孔、渗、饱参数、岩石类型等。

3.动态数据

完井数据:射孔、补孔、压裂、堵水、解堵日期、层位、井指数等;

生产数据:平均日产油、日产水、日产气、平均油气比和含水比等;

压力数据:井底流压、网格压力等。

动态监测资料(分层测试、吸水、产液剖面等)

4.其它数据

主要包括算法选择、输入输出控制、油水井约束界限、油井定压定产等参数。

为对今后数模工作数据资料录入规范化,特制定以下几类表格形式(参见附表)。

注意

对于黑油油藏,PVT数据极为重要,其数据由地层体积系数、溶解油气比和粘度作为压力的函数表所组成;

表格数据要求变量和自变量之间的关系要光滑,如:不光滑的油水两相渗透率曲线,将导致拟合的含水曲线差枝不齐,导致迭代不收敛等问题。

六、历史拟合方法及技巧

数值模拟过程(特别是历史拟合)是一项复杂的、消耗人力和机时的繁琐工作,如不遵循一定步骤,掌握一定技巧,可能陷入难以解脱的矛盾之中。

一般认为,同时拟合全区和单井的压力、含水和油气比难以办到,必须将历史拟合过程分解为相对比较容易的步骤进行。

历史拟合一般采取以下几个步骤:

1确定模型参数的可调范围;

2对模型参数全面检查;

3历史拟合;

1).全区和单井压力拟合;

2).全区和单井含水拟合;

3).单井生产指数拟合。

(一)确定模型参数的可调范围

确定模型参数的可调范围是一项重要而细致的工作,需收集和分析一切可以利用的资料。首先分清哪些参数是确定的,哪些参数是可调的。

资料及专家介绍:

孔隙度允许修改范围±30%;

渗透率视为不定参数,可修改范围±3倍或更多;

有效厚度,由于源于测井资料,和取心资料对比偏高30%左右,主要是钙质层和泥质夹层没有完全挑出来,视为不定参数,可调范围-30%左右;

流体压缩系数源于实验室测定,变化范围小,视为确定参数;

岩石压缩系数源于实验测定,但受岩石内饱和流体和应力状态的影响,有一定变化范围;同时砂岩中和有效厚度相连的非有效部分,也有一定孔隙和流体在内,在油气运移中起一定弹性作用。因而,允许岩石压缩系数可以扩大一倍;

相对渗透率曲线视为不定参数,允许作适当修改;

油、气的PVT性质,视为确定参数;

油水界面,在资料不多的情况下,允许在一定范围内修改。

(二)对模型参数全面检查工资

油藏数值模拟的数据很多,出现错误的可能性很大。为此,在进行历史拟合之前,对模型数据进行全面检查是十分必要的。

数据检查包括模拟器自动检查和人工检查两方面,缺一不可。

模拟器自动检查包括:

1、各项参数上下界的检查

对各项参数上下界的检查,发现某一参数超过界限,打出错误信息。

1).检查原始地质储量并和容积法计算进行比较;

N = 7758?A×h×Φ×Soi/Boi

2).检查所有原始油藏性质图和输入数据。

2、平衡检查

在全部模型井的产率(注入率)都指定为零的情况下,进行一次模拟计算,其结果应是油藏状态参数(压力场和饱和度场)应该和油藏初始状态参数一致,无任何明显变化,流体应该是处于平衡状态。否则表明参数有了问题,需重新检查模拟卡中的相关参数。

人工检查包括:

1)、不同来源的资料相互对扣;

2)、日产(注)量、月产(注)量和累积量相互对扣;

3)、物质平衡检查,即分析全区压力变化和累积净注入量(或亏空)的关系是否一致;

4)、对串槽井的产水量进行修正。

(三)历史拟合分两步

,首先是拟合全区压力到拟合单井压力,然后是饱和度(全区和单井含水)拟合。

1. 压力拟合

油藏中产生压力分布是由于流体场产、注流动后重新分布的结果,由达西定律所描述: ( x=0,g,w )

公式中包含出现的不定参数K和Kr,?改变其中之一将有效地改变压力的重新分布,由此当网格单元井的压力形式出现异常上升或下降时,?表明不是真实地层条件下的K和Kr 值。而地层平均压力水平的主要影响因素是由油藏总孔隙体积和总压缩率来确定,两者有如下关:

而: 由此可以确定造成不正确压力大小的不定参数是Cr和Φ,通常改变Cr可以观测到压力的显著变化,而±30%的Φ变化对计算出来的油藏动态参数(包括压力)可能差别不大,是次要因素。

A:拟合全区或单井油层压力

方法

1. 修改Cr、Φ、h、S(饱和度)参数

1)一般如果一个区块有室内岩心Cr数据,建议不改变其值大小,如按拟合情形需改变时,也不能超过一倍为好;

2)如果拟合油藏压力水平过高,则往往表示油藏地质储量过高。此时需减少Φ、h以及S值,以达到使地层压力水平降低的目的;

2. 修改渗透率值改变流体流动方向

以达到改变油层压力的目的;

增加低压带的渗透率,以达到提高低压带的压力,反之亦然。

检查原始地层压力梯度、原油体积系数、脱气油密度,以校正地层压力水平;

1).原始地层压力和深度关系将直接影响到整个地层的压力水平。如果油藏压力水平过高或偏低,首先应检查输入的基准面深度和相应的油相压力,是否符合压力梯度关系,如果不符合则需修改这个相参数。

2).从压力梯度数据中效核地下原油密度;

压力梯度:dP/dD = ( P2 - P1 )/( D2 - D1 )

通过单位换算为地下原油密度,?和实际输入值比较,??如(脱气原油密度)有误也需要修改。

3).检查原油体积系数

检查地面脱气原油密度,如果正确,则按:Bo=ρ地面/ρ地下

求出原油体积系数,进行修改。

总之,先拟合全区压力,然后拟合单井压力形式。而单井压力拟合主要是靠修改井局部地区的渗透率或方向渗透率。

注意在进行全区压力拟合时,要兼顾单井点的情况进行修改。而且,同时要照顾到单井点的含水拟合。这样,压力拟合阶段对方向渗透率的修改就有利于以后含水的拟合,节省机时费用。

2.全区和单井含水拟合(饱和度的拟合)

压力拟合达到满意的效果后,将进行全区和单井含水拟合。

油藏中流体饱和度的分布,影响井的注入量和采出量,即影响油水比和油气比。瞬时油水比(WOR)和油气比(GOR)由一下公式计算:

B:全区和单井含水的拟合

其方法步骤如下:

1.整相渗曲线

首先,要检查相渗曲线是否平滑,才不至于导致计算含水值过高或过低。其次,对初期拟合含水偏低的情形,可适当左移水相渗透率曲线(即抬高水相渗透率曲线),对高含水期拟合含水偏低的情形,可适当右移油相渗透率曲线(即抬高油相渗透率曲线)。反之亦然。(如图所示)

再次,尽可能根据分采层的含水上升率曲线反推几组相渗曲线,用以代表不同类型产层的渗流机理。由于我国油藏大多属于陆相湖盆沉积,物源近、以及多物源方向供给碎屑物质,造成沉积相带窄,非均质性严重,砂体类型也多。加上沉积受多级旋回的控制,形成多层系含油的特点,无论从岩性还是从岩相上变化都很悬殊。纵向上各层间渗透率差别很大,平面上连通性差、砂岩体往往在短距离内就尖灭、交叉或迭加。而东部多为断陷含油气盆地,断层发育,构造复杂,致使各断块间油气水分布关系难以摸清。而且,更为严峻的问题是开发过程中对达到一个油藏或小到一个断块的五项渗流特征参数的岩心实验资料录取少,一般使用一组相渗曲线很难表征地下油藏各层系、小层内流体的真实渗流机理,更别说对无资料的地区要借用相同或类似地区的资料来使用。

2.调整毛管压力曲线

拟合含水还需检查毛管压力曲线,以改变束缚水饱和度和初始含水饱和度分布。

3.局部井点含水的拟合

通过如下修改:

?改变含水区地质储量,如调整这些地区的孔隙度Φ、渗透率K或流体S值的大小,以达到含水饱和度的拟合;

?减少和水区连通部位的渗透率值,以控制含水上升的目的;

?在局部地区含水拟合差别较大时,可调整X、Y方向渗透率,即AKX、?AKY、BKX、BKY、AKZ(纵向),以达到在不增加地质储量的条件下,增加或减少流体沿某一方向的流动性,实现含水的拟合。

油藏数值模拟流程图

附件1:关于实测压力的皮斯曼校正

由于模拟计算结果输出的网格压力通常是折算成模拟区域内的基准面处的压力,不同于通常测试或计算的地层压力,不能进行比较。因此压力校正第一步是把代表不同深度的每口井实测地层压力折算成和模型相同的基准面深度处的压力,目的是消除深度的影响。

Pwsd------折算到D处的压力,MPa;

Pws----关井后稳定压力,Mpa ;

Dd ----基准面深度,m ;

Dms----油层中部海拔深度,m ;

Pd----油的压力梯度,Mpa/m 。

ρ0= r0●ρw

ρg= rg●ρair

ρ0、ρg、ρw---分别为油、气、水的密度g/cm3

r0----空气相对密度g/cm3

rg----气相对密度g/cm3

Rs----气油比m3/m3

B0----原宥体积系数。

拟合完成后,能和实际压力比较的是井网格压力,但它又不同于压力恢复时测得的短期关井井底压力,也不同于通常计算的地层压力,不能进行直接比较。

如何进行校正?

1、如果油井测得压力恢复数据,并出现直线段后,用下式校正实测压力后才可和网格压力对比:

式中:k---网格节点平均渗透率

Δt----关井时间

Δx、Δy-------x、y方向的网格步长

Ct----总压缩系数

μ----粘度

φ----孔隙度

2、如果油井测得压力数据是一个压力点,该点位于压力恢复曲线直线段上,

则:首先将质量总流率(产量)Q换算成体积总流率q ,

又: q = Q [fw(1?1/r 0)+1/r 0] ,然后用下式计算出校正的实际地层压力。

式中:P0----校正的实际地层压力

Pwsd----折算到Dd处的压力

q -----关井前稳定总产率

----总流度

H ----射开厚度

-----孔隙度

------关井时间

、------网格x、y方向的步长

附件2:关于烃类有效孔隙体积的计算

在渗流过程中,地层的孔隙体积实际上是发生变化的,它和地层压力和压实作用有关:式中:----压缩因子

----节点当前平均压力

----原始孔隙体积

----岩石压缩系数

----节点当前压力

----基准面压力

----变化后的孔隙体积

当时,说明孔隙体积没有变化,在简化三维三相黑油模型中,也常常设,即岩石是不可压缩的,但这对模拟结果可能带来某种影响,在空间某一微小的单元里,虽然孔隙体积变化很微弱,但它可能影响到烃类有效孔隙体积的大小,也就是说,对剩余油的分布有一定影响。因此,需进行烃类有效孔隙体积的计算。

为什么?

通常情况下,数值模拟提供各时间阶段的剩余油分布来,并不意味着剩余油饱和度大的地方,就是挖潜或调整的重点,因为剩余油饱和度和油层厚度没有直接关系,因此,其分布状况往往掩盖了厚油层和薄油层的区别,为了使剩余油分布从定性向定量转化,可用烃类(包括油和水)有效孔隙体积PV来表示:

PV = DX ? DY ? H ? ? ?(Sor ?Bo?r0/r0r+Sgr?Bg? rg/rgr)

其中:DX 、DY –---为网格节点X、Y方向步长,

H---油层有效厚度,

Sor 、Sgr ---为剩余油、气饱和度,

Bo、Bg—为油、气体积系数,

r0、r0r和rg、rgr---为油、气地面和地下密度。

双孔双渗,就是模型中有基质和裂缝两种孔隙体积,基质孔隙是主要的储油空间,裂缝是主要的流动通道,基质和裂缝都有孔隙体积和渗透率,所以叫双孔双渗。

六年级--找分数单位1的方法、练习

正确找准单位1” 一、基本思路:分数的意义,把单位1平均分成若干份,表示这样的一份或几份的数,叫分数”。所以单位1的判定,就是看把谁平均分了,就把谁看作单位 1.谁的几分之几,谁就把谁看作单位 1。.如一桶油用去丄,男生占全班的z,桃树棵数相当于梨树棵树的3,一台电视机降价1。男 4 5 4 5 1 生比女生多全班的-.把全班人数看作单位1。. 8 正确找准单位“ 1”,是解答分数(百分数)应用题的关键。每一道分数应用题中总是有关键句(含有分率的句子)。如何从关键句中找准单位“ 1”,我觉得可以从以下这些方面进行考虑。 一、部分数和总数在同一整体中,部分数和总数作比较关系时,部分数通常作为比较量, 而总数则作为标准量,那么总数就是单位“ 1”。例如我国人口约占世界人口的1/5,世界人口是 总数,我国人口是部分数,所以,世界人口就是单位“ 1”。再如,食堂买来100千克白菜,吃了 2/5 ,吃了多少千克?在这里,食堂一共买来的白菜是总数,吃掉的是部分数,所以100千克白菜就是 单位“ 1”。解答这类分数应用题,只要找准总数和部分数,确定单位“ 1”就很容易了。 二、两种数量比较分数应用题中,两种数量相比的关键句非常多。有的是“比”字句,有 的则没有“比”字,而是带指向性特征的“占”、“是”、“相当于”。在含有“比”字的关键句 中,比后面的那个数量通常就作为标准量,也就是单位“ 1”。例如:六(2)班男生比女生多 1/2。就是以女生人数为标准(单位“ 1”),男生比女生多的人数作为比较量。在另外一种没有比 字的两种量相比的时候,我们通常找到分率,看“占”谁的,“相当于”谁的,“是”谁的几 分之几。这个“占”,“相当于”,“是”后面的数量一一谁就是单位“!”。例如,一个长方形的 宽是长的5/12。在这关键句中,很明显是以长作为标准,宽和长相比较,也就是说长是单位 “ 1”。又如,今年的产量相当于去年的4/3倍。那么相当于后面的去年的产量就是标准量,也就 是单位“1”。 三、原数量与现数量有的关键句中不是很明显地带有一些指向性特征的词语,也不是部 分数和总数的关系。这类分数应用题的单位“ 1”比较难找。例如,水结成冰后体积增加了1/10, 冰融化成水后,体积减少了1/12。象这样的水和冰两种数量到底谁作为单位“ 1” ?两句关键 句 的单位“1”是不是相同?用上面讲过的两种方法不容易找出单位“ 1”。其实我们只要看,原来 的数量是谁?这个原来的数量就是单位“ 1” !比如水结成冰,原来的数量就是水,那么水就是单 位“ 1冰融化成水,原来的数量是冰,所以冰的体积,就是单位“ 1”。

各种排序算法的总结和比较

各种排序算法的总结和比较 1 快速排序(QuickSort) 快速排序是一个就地排序,分而治之,大规模递归的算法。从本质上来说,它是归并排序的就地版本。快速排序可以由下面四步组成。 (1)如果不多于1个数据,直接返回。 (2)一般选择序列最左边的值作为支点数据。(3)将序列分成2部分,一部分都大于支点数据,另外一部分都小于支点数据。 (4)对两边利用递归排序数列。 快速排序比大部分排序算法都要快。尽管我们可以在某些特殊的情况下写出比快速排序快的算法,但是就通常情况而言,没有比它更快的了。快速排序是递归的,对于内存非常有限的机器来说,它不是一个好的选择。 2 归并排序(MergeSort)

归并排序先分解要排序的序列,从1分成2,2分成4,依次分解,当分解到只有1个一组的时候,就可以排序这些分组,然后依次合并回原来的序列中,这样就可以排序所有数据。合并排序比堆排序稍微快一点,但是需要比堆排序多一倍的内存空间,因为它需要一个额外的数组。 3 堆排序(HeapSort) 堆排序适合于数据量非常大的场合(百万数据)。 堆排序不需要大量的递归或者多维的暂存数组。这对于数据量非常巨大的序列是合适的。比如超过数百万条记录,因为快速排序,归并排序都使用递归来设计算法,在数据量非常大的时候,可能会发生堆栈溢出错误。 堆排序会将所有的数据建成一个堆,最大的数据在堆顶,然后将堆顶数据和序列的最后一个数据交换。接下来再次重建堆,交换数据,依次下去,就可以排序所有的数据。

Shell排序通过将数据分成不同的组,先对每一组进行排序,然后再对所有的元素进行一次插入排序,以减少数据交换和移动的次数。平均效率是O(nlogn)。其中分组的合理性会对算法产生重要的影响。现在多用D.E.Knuth的分组方法。 Shell排序比冒泡排序快5倍,比插入排序大致快2倍。Shell排序比起QuickSort,MergeSort,HeapSort慢很多。但是它相对比较简单,它适合于数据量在5000以下并且速度并不是特别重要的场合。它对于数据量较小的数列重复排序是非常好的。 5 插入排序(InsertSort) 插入排序通过把序列中的值插入一个已经排序好的序列中,直到该序列的结束。插入排序是对冒泡排序的改进。它比冒泡排序快2倍。一般不用在数据大于1000的场合下使用插入排序,或者重复排序超过200数据项的序列。

数字信号处理复习总结-最终版

绪论:本章介绍数字信号处理课程的基本概念。 0.1信号、系统与信号处理 1.信号及其分类 信号是信息的载体,以某种函数的形式传递信息。这个函数可以是时间域、频率域或其它域,但最基础的域是时域。 分类: 周期信号/非周期信号 确定信号/随机信号 能量信号/功率信号 连续时间信号/离散时间信号/数字信号 按自变量与函数值的取值形式不同分类: 2.系统 系统定义为处理(或变换)信号的物理设备,或者说,凡是能将信号加以变换以达到人们要求的各种设备都称为系统。 3.信号处理 信号处理即是用系统对信号进行某种加工。包括:滤波、分析、变换、综合、压缩、估计、识别等等。所谓“数字信号处理”,就是用数值计算的方法,完成对信号的处理。 0.2 数字信号处理系统的基本组成 数字信号处理就是用数值计算的方法对信号进行变换和处理。不仅应用于数字化信号的处理,而且

也可应用于模拟信号的处理。以下讨论模拟信号数字化处理系统框图。 (1)前置滤波器 将输入信号x a(t)中高于某一频率(称折叠频率,等于抽样频率的一半)的分量加以滤除。 (2)A/D变换器 在A/D变换器中每隔T秒(抽样周期)取出一次x a(t)的幅度,抽样后的信号称为离散信号。在A/D 变换器中的保持电路中进一步变换为若干位码。 (3)数字信号处理器(DSP) (4)D/A变换器 按照预定要求,在处理器中将信号序列x(n)进行加工处理得到输出信号y(n)。由一个二进制码流产生一个阶梯波形,是形成模拟信号的第一步。 (5)模拟滤波器 把阶梯波形平滑成预期的模拟信号;以滤除掉不需要的高频分量,生成所需的模拟信号y a(t)。 0.3 数字信号处理的特点 (1)灵活性。(2)高精度和高稳定性。(3)便于大规模集成。(4)对数字信号可以存储、运算、系统可以获得高性能指标。 0.4 数字信号处理基本学科分支 数字信号处理(DSP)一般有两层含义,一层是广义的理解,为数字信号处理技术——DigitalSignalProcessing,另一层是狭义的理解,为数字信号处理器——DigitalSignalProcessor。 0.5 课程内容 该课程在本科阶段主要介绍以傅里叶变换为基础的“经典”处理方法,包括:(1)离散傅里叶变换及其快速算法。(2)滤波理论(线性时不变离散时间系统,用于分离相加性组合的信号,要求信号频谱占据不同的频段)。 在研究生阶段相应课程为“现代信号处理”(AdvancedSignalProcessing)。信号对象主要是随机信号,主要内容是自适应滤波(用于分离相加性组合的信号,但频谱占据同一频段)和现代谱估计。 简答题: 1.按自变量与函数值的取值形式是否连续信号可以分成哪四种类型? 2.相对模拟信号处理,数字信号处理主要有哪些优点? 3.数字信号处理系统的基本组成有哪些?

数字信号处理知识点总结

《数字信号处理》辅导 一、离散时间信号和系统的时域分析 (一) 离散时间信号 (1)基本概念 信号:信号传递信息的函数也是独立变量的函数,这个变量可以是时间、空间位置等。 连续信号:在某个时间区间,除有限间断点外所有瞬时均有确定值。 模拟信号:是连续信号的特例。时间和幅度均连续。 离散信号:时间上不连续,幅度连续。常见离散信号——序列。 数字信号:幅度量化,时间和幅度均不连续。 (2)基本序列(课本第7——10页) 1)单位脉冲序列 1,0()0,0n n n δ=?=?≠? 2)单位阶跃序列 1,0 ()0,0n u n n ≥?=?≤? 3)矩形序列 1,01 ()0,0,N n N R n n n N ≤≤-?=?<≥? 4)实指数序列 ()n a u n 5)正弦序列 0()sin()x n A n ωθ=+ 6)复指数序列 ()j n n x n e e ωσ= (3)周期序列 1)定义:对于序列()x n ,若存在正整数N 使()(),x n x n N n =+-∞<<∞ 则称()x n 为周期序列,记为()x n ,N 为其周期。 注意正弦周期序列周期性的判定(课本第10页) 2)周期序列的表示方法: a.主值区间表示法 b.模N 表示法 3)周期延拓 设()x n 为N 点非周期序列,以周期序列L 对作()x n 无限次移位相加,即可得到周期序列()x n ,即 ()()i x n x n iL ∞ =-∞ = -∑ 当L N ≥时,()()()N x n x n R n = 当L N <时,()()()N x n x n R n ≠ (4)序列的分解 序列共轭对称分解定理:对于任意给定的整数M ,任何序列()x n 都可以分解成关于/2c M =共轭对称的序列()e x n 和共轭反对称的序列()o x n 之和,即

找单位1的方法

分数应用题中的单位"1" 专项练习 声明:此文档源文件来源于网络,版权归原作者所有,上传仅供学习交流参考,如作为其他用途,请与作者联系,与上传者无关,特此声明。 【基本原则】 一、基本思路:分数的意义,“把单位1平均分成若干份,表示这样的一份或几份的数,叫分数”。所以单位1的判定,就是看把谁平均分了,就把谁看作单位1.谁的几分之几,谁就把谁看作单位1。. 如一桶油用去1 4,男生占全班的2 5 ,桃树 棵数相当于梨树棵树的3 4 ,一台电视机 降价1 5。男生比女生多全班的1 8 .把全班人 数看作单位1。. 在含有“比”字的关键句中,比后

面的那个数量通常就作为标准量,也就是单位“1”。例如:六(2)班男生比女 生多1 2。理解为男生比女生多女生的1 2 , 所以把女生人数为标准,看作单位“1”, 看在谁的基础上增加或减少,那个基础量就是单位“1”例如,水结成冰后体积增加了1 10 ,把水看作单位“1”,冰融 化成水后,体积减少了1 12 。把冰看作单位“1” 二、单位“1”的应用题: 单位1的量×分率=分率对应量;分率对应量÷分率=单位1的量 三、说明

单位“1”在“是”、“比”、“占”,“相当于”后,分率前。已知单位“1”用乘法,未知单位“1”用除法,用具体数÷对应分率=单位“1”的量。 【详细说明】 正确找准单位“1”,是解答分数(百分数)应用题的关键。每一道分数应用题中总是有关键句(含有分率的句子)。如何从关键句中找准单位“1”,我觉得可以从以下这些方面进行考虑。 一、部分数和总数在同一整体中,部分数和总数作比较关系时,部分数通常

作为比较量,而总数则作为标准量,那么总数就是单位“1”。例如我国人口约占世界人口的1/5,世界人口是总数,我国人口是部分数,所以,世界人口就是单位“1”。再如,食堂买来100千克白菜,吃了2/5,吃了多少千克?在这里,食堂一共买来的白菜是总数,吃掉的是部分数,所以100千克白菜就是单位“1”。解答这类分数应用题,只要找准总数和部分数,确定单位“1”就很容易了。二、两种数量比较分数应用题中,两种数量相比的关键句非常多。有的是“比”字句,有的则没有“比”字,而是带

数据结构 各种排序算法

数据结构各种排序算法总结 2009-08-19 11:09 计算机排序与人进行排序的不同:计算机程序不能象人一样通览所有的数据,只能根据计算机的"比较"原理,在同一时间内对两个队员进行比较,这是算法的一种"短视"。 1. 冒泡排序 BubbleSort 最简单的一个 public void bubbleSort() { int out, in; for(out=nElems-1; out>0; out--) // outer loop (backward) for(in=0; in a[in+1] ) // out of order? swap(in, in+1); // swap them } // end bubbleSort() 效率:O(N2) 2. 选择排序 selectSort public void selectionSort() { int out, in, min; for(out=0; out

swap(out, min); // swap them } // end for(out) } // end selectionSort() 效率:O(N2) 3. 插入排序 insertSort 在插入排序中,一组数据在某个时刻实局部有序的,为在冒泡和选择排序中实完全有序的。 public void insertionSort() { int in, out; for(out=1; out0 && a[in-1] >= temp) // until one is smaller, { a[in] = a[in-1]; // shift item to right --in; // go left one position } a[in] = temp; // insert marked item } // end for } // end insertionSort() 效率:比冒泡排序快一倍,比选择排序略快,但也是O(N2) 如果数据基本有序,几乎需要O(N)的时间

常见的信号处理滤波方法

低通滤波:又叫一阶惯性滤波,或一阶低通滤波。是使用软件编程实现普通硬件RC 低通滤波器的功能。 适用范围:单个信号,有高频干扰信号。 一阶低通滤波的算法公式为: Y(n)X(n)(1)Y(n 1)αα=+-- 式中: α是滤波系数;X(n)是本次采样值;Y(n 1)-是上次滤波输出值;Y(n)是本次滤波输出值。 滤波效果1: 红色线是滤波前数据(matlab 中生成的正弦波加高斯白噪声信号) 黄色线是滤波后结果。 滤波效果2:

matlab中函数,相当于一阶滤波,蓝色是原始数据(GPS采集到的x(北)方向数据,单位m),红色是滤波结果。 一阶滤波算法的不足: 一阶滤波无法完美地兼顾灵敏度和平稳度。有时,我们只能寻找一个平衡,在可接受的灵敏度范围内取得尽可能好的平稳度。

互补滤波:适用于两种传感器进行融合的场合。必须是一种传感器高频特性好(动态响应好但有累积误差,比如陀螺仪。),另一传感器低频特性好(动态响应差但是没有累积误差,比如加速度计)。他们在频域上互补,所以进行互补滤波融合可以提高测量精度和系统动态性能。 应用:陀螺仪数据和加速度计数据的融合。 互补滤波的算法公式为: 1122Y(n)X (n)(X (n)Y(n 1))αα+=+-- 式中:1α和2α是滤波系数;1X (n)和2X (n)是本次采样值;Y(n 1)-是上次滤 波输出值;Y(n)是本次滤波输出值。 滤波效果 (测试数据): 蓝色是陀螺仪 信号,红色是加 速度计信号,黄 色是滤波后的 角度。

. 互补滤波实际效果: .

卡尔曼滤波:卡尔曼滤波器是一个“optimal recursive data processing algorithm (最优化自回归数据处理算法)”。对于解决很大部分的问题,它是最优,效率最高甚至是最有用的。他的广泛应用已经超过30年,包括机器人导航,控制,传感器数据融合甚至在军事方面的雷达系统以及导弹追踪等等。近来更被应用于计算机图像处理,例如头脸识别,图像分割,图像边缘检测。 首先,用于测量的系统必须是线性的。 (k)(k 1)(k)(k)X AX BU w =-++ (k)(k)(k)Z HX v =+ (k)X 是系统k 时刻的状态,(k)U 是系统k 时刻的控制量。(k)Z 是系统k 时 刻的测量值。A 和B 为系统参数,(k)w 和(k)v 分别表示过程和测量的噪声,H 是测量系统参数。 在进行卡尔曼滤波时: 首先进行先验预测: (k 1|k)(k |k)(k)(k)X AX BU w +=++ 计算先验预测方差: '(k 1|k)(k |k)(k)P AP A Q +=+ 计算增益矩阵: (k 1)(k 1|k)'/((k 1|k)'(k 1))Kg P H HP H R +=++++ 后验估计值: (k 1|k 1)(k 1|k)(k 1)(Z(k 1)(k 1|k))X X Kg HX ++=++++-+ 后验预测方差: (k 1|k 1)(1(k 1))(k 1|k)P Kg H P ++=-++ 其中,(k)Q 是系统过程激励噪声协方差,(k)R 是测量噪声协方差。 举例说明: (下文中加粗的是专有名词,需要理解) 预测小车的位置和速度的例子(博客+自己理解):

信号处理知识点总结

第一章信号 1.信息是消息的内容,消息是信息的表现形式,信号是信息的载体 2.信号的特性:时间特性,频率特性 3.若信号可以用确定性图形、曲线或数学表达式来准确描述,则该信号为确定性信号 若信号不遵循确定性规律,具有某种不确定性,则该信号为随机信号 4.信号分类:能量信号,一个信号如果能量有限;功率信号,如果一个信号功率是有限的 5.周期信号、阶跃信号、随机信号、直流信号等是功率信号,它们的能量为无限 6.信号的频谱有两类:幅度谱,相位谱 7.信号分析的基本方法:把频率作为信号的自变量,在频域里进行信号的频谱分析 第二章连续信号的频域分析 1.周期信号频谱分析的常用工具:傅里叶三角级数;傅里叶复指数 2.利用傅里叶三角级数可以把周期信号分解成无穷多个正、余弦信号的加权和3频谱反映信号的频率结构,幅频特性表示谐波的幅值,相频特性反映谐波的相位 4.周期信号频谱的特点:离散性,谐波性,收敛性 5.周期信号由无穷多个余弦分量组成 周期信号幅频谱线的大小表示谐波分量的幅值 相频谱线大小表示谐波分量的相位 6.周期信号的功率谱等于幅值谱平方和的一半,功率谱反映周期信号各次谐波的功率分配关系,周期信号在时域的平均功率等于其各次谐波功率之和 7.非周期信号可看成周期趋于无穷大的周期信号 8.周期T0增大对频谱的影响:谱线变密集,谱线的幅度减少 9.非周期信号频谱的特点:非周期信号也可以进行正交变换; 非周期信号完备正交函数集是一个无限密集的连续函数集; 非周期信号的频谱是连续的; 非周期信号可以用其自身的积分表示 10.常见奇异信号:单位冲激信号,单位直流信号,符号函数信号,单位阶跃信号 11.周期信号的傅里叶变换:周期信号:一个周期绝对可积à傅里叶级数à离散谱 非周期信号:无限区间绝对可积à傅里叶变换à连续谱 12.周期信号的傅立叶变换是无穷多个冲激函数的线性组合 脉冲函数的位置:ω=nω0 , n=0,±1,±2, ….. 脉冲函数的强度:傅里叶复指数系数的2π倍 周期信号的傅立叶变换也是离散的; 谱线间隔与傅里叶级数谱线间隔相同 13.信号的持续时间与信号占有频带成反比 14.信号在时域的翻转,对应信号在频域的翻转 15.频域频移,时域只有相移,幅频不变;时域相移,只导致频域频移,相位不变

数据结构-各类排序算法总结

数据结构-各类排序算法总结 原文转自: https://www.doczj.com/doc/fb14609586.html,/zjf280441589/article/details/38387103各类排序算法总结 一. 排序的基本概念 排序(Sorting)是计算机程序设计中的一种重要操作,其功能是对一个数据元素集合或序列重新排列成一个按数据元素 某个项值有序的序列。 有n 个记录的序列{R1,R2,…,Rn},其相应关键字的序列是{K1,K2,…,Kn},相应的下标序列为1,2,…,n。通过排序,要求找出当前下标序列1,2,…,n 的一种排列p1,p2,…,pn,使得相应关键字满足如下的非递减(或非递增)关系,即:Kp1≤Kp2≤…≤Kpn,这样就得到一个按关键字有序的记录序列{Rp1,Rp2,…,Rpn}。 作为排序依据的数据项称为“排序码”,也即数据元素的关键码。若关键码是主关键码,则对于任意待排序序列,经排序后得到的结果是唯一的;若关键码是次关键码,排序结果可

能不唯一。实现排序的基本操作有两个: (1)“比较”序列中两个关键字的大小; (2)“移动”记录。 若对任意的数据元素序列,使用某个排序方法,对它按关键码进行排序:若相同关键码元素间的位置关系,排序前与排序后保持一致,称此排序方法是稳定的;而不能保持一致的排序方法则称为不稳定的。 二.插入类排序 1.直接插入排序直接插入排序是最简单的插入类排序。仅有一个记录的表总是有序的,因此,对n 个记录的表,可从第二个记录开始直到第n 个记录,逐个向有序表中进行插入操作,从而得到n个记录按关键码有序的表。它是利用顺序查找实现“在R[1..i-1]中查找R[i]的插入位置”的插入排序。

找单位1的方法

分数应用题教学得成败,关键在于学生就是否掌握了找单位“1”得方法,能否很快找到单位“1”。以前,我在教学分数应用题时,一直沿用一种老办法,让学生在关系句中找“就是”、“占”、“比”与“相当于”等这些具有标识性得词,在它们得后面,或者在“得”字得前面找单位“1”,并且让学生当公式来记,在分析与理解分数应用题时套用。结果学生还不能正确找到单位“1”,解题时频频出错,使教学走入困境。后来为了寻求到解决这一问题得办法,我坚持查找资料,反复思考,在学习《数学课程标准》时发现:“有效得数学学习活动不能单纯地依赖模仿与记忆,动手实践、自主探索与合作交流就是学生学习数学得重要方式。”依据这一基本理念,后来在单位“1”得教学中,大胆地尝试,革新自我,收到了显著成效。具体做法就是: 一、抓基本概念,找根本,从深刻领会意义入手。“把单位1平均分成若干份,表示这样得一份或几份得数,叫做分数。”在分数概念得教学中又明确指出:“单位1,可以就是一个物体,一个计量单位,也可以就是许多物体组成得一个整体。”二者得关系相当密切。为此,我让学生熟记分数得意义,以帮助理解单位“1”。分析、理解、寻找单位“1”,关键要瞧就是把谁平均分。把谁平均分谁就就是单位“1”。如“修路队计划修路4千米,已经修了3/4。修了多少千米?”(九年义务教材六年级数学十一册P16练习四第1题)在教学中,先引导学生画图,通过动手实践,自主探索,达到体验。再分析“已经修了3/4”,就就是把4千米路平均分成4份,修了得占其中得3份,这里要把计划修得4千米路平均分,所以“计划修路4千米”就是单位“1”。教学中反复应用,效果很不错 二、抓关系句,并补充完善关系句。 在实际教学中,分数应用题得叙述往往都不仅相同,也不像例题那么完整,许多习题省略了其中关键条件与问题得句子成份,造成学生理解、分析、解答得困难。为了消除学生得困惑,我主要就是引导学生补充、完善句子中缺省得成份,使其隐含得单位“1”凸现出来,学生分析、解答就容易多了。

找单位1练习

看谁独具慧眼(找出单位“1”,写出数量关系式) 1、桃树棵树相当于梨树的7 9 . 单位“1”是( ) 。( )×7 9 =( ) 2、连环画18本,占图书总数的29 。 单位“1”是( ) 。( )×2 9 =( ) 3、黄牛180头,水牛的头数是黄牛的56 . 单位“1”是( ) 。( )×5 6 =( ) 4、水牛有150头,是黄牛头数的56 . 单位“1”是( ) 。( )×5 6 =( ) 5、2小时行了180千米,正好是全程的2 3 。全程多少千米? 单位“1”是( ) 。( )×2 3 =( ) 6、2小时行了180千米,正好是全程的2 3 。行完全程要多长时间? 单位“1”是( ) 。( )×2 3 =( ) 7、一批蔬菜,其中白菜50千克,黄瓜是白菜的45 . 单位“1”是( ) 。( )×4 5 =( ) 8、一批蔬菜,其中白菜50千克,正好是番茄的45 。 单位“1”是( ) 。( )×4 5 =( ) 9、合唱队男生比女生少8人,女生比男生多15 。 单位“1”是( ) 。( )×1 5 =( ) 10、一批化肥,已经售出2/7,正好是4 5 吨。 单位“1”是( ) 。( )×4 5 =( )

11、一本书已经看了2 3 ,正好是40页。 单位“1”是( ) 。( )×2 3 =( ) 12、商品打折一律按原价的7 8 销售。 单位“1”是( ) 。( )×7 8 =( ) 13、小亮比妈妈矮18 单位“1”是( ) 。( )×1 8 =( ) 14、小芹的钱比小东少19 。 单位“1”是( ) 。( )×1 9 =( ) 15、《科幻世界》比《未来生活》便宜316 . 单位“1”是( ) 。( )×316 =( ) 16、一根绳子剪去它的13 。 单位“1”是( ) 。( )×1 3 =( ) 17、鸭子比鸡多111 。 单位“1”是( ) 。( )×1 11 =( ) 18、五月份比六月份节约用电16 . 单位“1”是( ) 。( )×1 11 =( ) 19、牛的头数与羊的4 5 相等。 单位“1”是( ) 。( )×4 5 =( ) 20、一个数的35 是5 6 。 单位“1”是( ) 。( )×5 6 =( ) 21、甲数的12 与乙数的1 3 相等。 单位“1”是( ) 。( )×12 =( )×1 3

各大常用排序方法

//1. 希尔排序, 时间复杂度:O(nlogn)~ O(n^2) // 另称:缩小增量排序(Diminishing Increment Sort) void ShellSort(int v[],int n) { int gap, i, j, temp; for(gap=n/2; gap>0; gap /= 2) /* 设置排序的步长,步长gap每次减半,直到减到1 */ { for(i=gap; i=0) && (v[j]>v[j+gap]); j -= gap ) /* 比较相距gap远的两个元素的大小,根据排序方向决定如何调换 */ { temp = v[j]; v[j] = v[j+gap]; v[j+gap] = temp; } } } } //2. 二分插入, void HalfInsertSort(int a[], int len) { int i, j, temp; int low, high, mid; for (i=1; i temp) /* 如果中间元素比但前元素大,当前元素要插入到中间元素的左侧 */ { high = mid-1;

} else /* 如果中间元素比当前元素小,但前元素要插入到中间元素的右侧 */ { low = mid+1; } } /* 找到当前元素的位置,在low和high之间 */ for (j=i-1; j>high; j--)/* 元素后移 */ { a[j+1] = a[j]; } a[high+1] = temp; /* 插入 */ } } //3. 插入排序 //3.1 直接插入排序, 时间复杂度:O(n^2) void StraightInsertionSort(int input[],int len) { int i, j, temp; for (i=1; i=0 && input[j]>temp; j--) /* 从当前元素的上一个元素开始查找合适的位置 */ { input[j+1] = input[j]; /* 一边找一边移动元素 */ input[j] = temp; } } } //3.2 带哨兵的直接排序, 时间复杂度:O(n^2) /* * 带哨兵的直接插入排序,数组的第一个元素不用于存储有效数据 * 将input[0]作为哨兵,可以避免判定input[j]中,数组是否越界 * 因为在j--的过程中,当j减小到0时,变成了input[0]与input[0] * 自身进行比较,很明显这个时候说明位置i之前的数字都比input[i]小

C C++笔试面试题目汇总3——各种排序算法

C/C++笔试面试题目汇总3——各种排序算法 原文:https://www.doczj.com/doc/fb14609586.html,/u/1222/showart_318070.html 排序算法是一种基本并且常用的算法。由于实际工作中处理的数量巨大,所以排序算法对算法本身的速度要求很高。而一般我们所谓的算法的性能主要是指算法的复杂度,一般用O方法来表示。在后面我将给出详细的说明。对于排序的算法我想先做一点简单的介绍,也是给这篇文章理一个提纲。 我将按照算法的复杂度,从简单到难来分析算法。 第一部分是简单排序算法,后面你将看到他们的共同点是算法复杂度为O(N*N)(因为没有使用word,所以无法打出上标和下标)。 第二部分是高级排序算法,复杂度为O(Log2(N))。这里我们只介绍一种算法。另外还有几种算法因为涉及树与堆的概念,所以这里不于讨论。 第三部分类似动脑筋。这里的两种算法并不是最好的(甚至有最慢的),但是算法本身比较奇特,值得参考(编程的角度)。同时也可以让我们从另外的角度来认识这个问题。 第四部分是我送给大家的一个餐后的甜点——一个基于模板的通用快速排序。由于是模板函数可以对任何数据类型排序(抱歉,里面使用了一些论坛专家的呢称)。 一、简单排序算法 由于程序比较简单,所以没有加什么注释。所有的程序都给出了完整的运行代码,并在我的VC环境下运行通过。因为没有涉及MFC和WINDOWS的内容,所以在BORLAND C++的平台上应该也不会有什么问题的。在代码的后面给出了运行过程示意,希望对理解有帮助。 1.冒泡法:(Gilbert:点这里有视频) 这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡: #include void BubbleSort(int* pData,int Count) { int iTemp; for(int i=1;i=i;j--) { if(pData[j]

六年级数学找单位1的方法

找单位一的方法 分数应用题教学的成败,关键在于学生是否掌握了找单位“1”的方法,能否很快找到单位“1”。以前,我在教学分数应用题时,一直沿用一种老办法,让学生在关系句中找“是”、“占”、“比”和“相当于”等这些具有标识性的词,在它们的后面,或者在“的”字的前面找单位“1”,并且让学生当公式来记,在分析和理解分数应用题时套用。结果学生还不能正确找到单位“1”,解题时频频出错,使教学走入困境。后来为了寻求到解决这一问题的办法,我坚持查找资料,反复思考,在学习《数学课程标准》时发现:“有效的数学学习活动不能单纯地依赖模仿与记忆,动手实践、自主探索与合作交流是学生学习数学的重要方式。”依据这一基本理念,后来在单位“1”的教学中,大胆地尝试,革新自我,收到了显 著成效。具体做法是: 一、抓基本概念,找根本,从深刻领会意义入手。“把单位1平均分成若干份,表示这样的一份或几份的数,叫做分数。”在分数概念的教学中又明确指出:“单位1,可以是一个物体,一个计量单位,也可以是许多物体组成的一个整体。”二者的关系相当密切。为此,我让学生熟记分数的意义,以帮助理解单位“1”。分析、理解、寻找单位“1”,关键要看是把谁平均分。把谁平均分谁就是单位“1”。如“修路队计划修路4千米,已经修了3/4。修了多少千米?”(九年义务教材六年级数学十一册P16练习四第1题)在教学中,先引导学生画图,通过动手实践,自主探索,达到体验。再分析“已经修了3/4”,就是把4千米路平均分成4份,修了的占其中的3份,这里要把计划修的4千米路平均分,所以“计划修路4千米”是单位“1”。教学中反复应用,效果很不错 二、抓关系句,并补充完善关系句。 在实际教学中,分数应用题的叙述往往都不仅相同,也不像例题那么完整,许多习题省略了其中关键条件和问题的句子成份,造成学生理解、分析、解答的困难。为了消除学生的困惑,我主要是引导学生补充、完善句子中缺省的成份,使其隐含的单位“1”凸现出来,学生分析、解答就容易多了。如“李师傅计划生产1200个零件,实际完成了5/4,李师傅实际加工了多少个零件?”(六年级数学练习册P6第3题),辅导练习中,我首先提问:“李师傅实际完成了谁的5/4?”学生很快补充成“李师傅实际完成了计划的5/4”,接着提问:“把谁平均分?”这样,学生就很准确地找到了单位“1”。 三、比较分析,找出一题目与另一题目的异同点。 分数应用题中,有好多题型都是非常相似的,如果不注意比较,就很难分辨清楚。 如:(1)一批水泥,计划每天用去1/5吨,实际每天比计划多用去1/4吨,实际每天用去多少吨? (2)一批水泥,计划每天用去1/5吨,实际每天比计划多用去1/4,实际每天用去多少吨? 这两道题非常相似,学生难以分辨。为了弄清它们的区别与联系,我主要抓住两个关系句中的“用去1/4吨”和“用去1/4”让学生分析、比较。 通过提问:(1)两道题的已知条件和问题有什么异同?(2)两道题各实际每天比计划多用去多少?(3)一样吗?那里不一样? 以上几个问题,反复提问,反复练习,学生很快弄清了“用去1/4吨”,是用去了1吨的1/4,而“用去1/4”,是用去了1/5吨的1/4,二者采用的单位“1”不同。然后再引导学生画图比较,终于使学生豁然开朗,明白了其中的道理。 通过上述三种方法, 使学生学会了找单位“1”的方法,从而掌握了分析、理解、解答分数应用题的方法,收到了预期效果。

小学语文排序题方法技巧汇总排序

专题——句子 句子之排序 1、考点 定义:排序类题就是把一组顺序错乱的句子按照正确的顺序重新排列,解这类题的关键是要找出这组句子的行文顺序,再把它们重新排列。 2、例题分析 例题1:将下列句子排列正确。 ()科学家对此进行研究。 ()正常人的眼睛能感知这个世界的五彩缤纷,识别红、橙、黄、绿、青、蓝、紫,以及它们之间的各种过渡色,总共约六十多种。 ()如牛、羊、马等,几乎不会分辨颜色,反映到它们眼里的只有黑、白、灰三种颜色,很单调。 ()那么,动物的感色能力又如何呢? ()研究证实,大多数哺乳动物是色盲。 试题分析: 此题着重考察学生的语言组织能力。对于众多的句子如何确定第一句是解此题的关键。接着找出几个句子之间的联系点,这也是至关重要的一个因素。 解题思路: 首先,要通读所有的句子,整体感知这段文字,初步明确这段文字主要写的是什么,围绕什么来写的。在这段文字中,首先写的是人的眼睛对色彩的感知,而后过渡到动物。中间一句设问句是很好的承接,接下来是科学家投入了研究,最后是研究的结果,并以此举例说明。所有的句子试填好后,要将句子按正确的排列顺序通读一遍,最后检查序号是否正确。 参考答案:3 1 5 2 4。 例题2 : 将①-④句填在横线上,顺序恰当的一项是()。 沿池环水四周,新筑一道长600多米的环池路,还有那修复完美的明代遗迹“临流亭”,

四周环水,兀立池中,游客观望,流连忘返。 ①形态各异的飞禽雕塑,浮游水面 ②水上画舫往返,笑声朗朗 ③路面铺设的鹅卵石,在碧波辉映下,色彩鲜艳,晶莹闪烁 ④路边垂柳依依,清风送爽 ③④②① B、④②③① C、③④①② D、④③①② 解题指导: 这是一道在所给的语段中选择恰当的选项填空题。考查的是思维的连贯与严密。解答此类题目,要瞻前顾后,从空缺处的前文或后文找出句与句之间内在的联系,通过上下文要通畅连贯或句式要前后一致等方面来确定正确的选项。 此题空缺处前文是写“环池路”,与之文气连贯的当然是选项中③句,接着介绍“路面”,接着就为第④句介绍“路边”,然后由“沿池环水四周”的“路边”,自然引出第②句,介绍“水上”,最后第①句交待水上的“飞禽雕塑”,则“雕塑”又与后句的“临流亭”同属建筑,自然衔接。所以正确答案为“A”。参考答案:A 例题3 : ()这时,我们才发现社区里的工作人员虽然很多,但是在一些死角里还会看见灰尘。 ()到了社区,同学们都冻得发抖,但又不敢松懈。 ( )虽然很冷,但我们每个人额头上都有豆大的汗珠。 ()有的同学在擦窗户,有的同学在扫水泥地面,有的同学在捡石头,有的同学在除草,还有同学在推小车送垃圾,我也和一些同学捡石块。 ()由于风太大的缘故,扫起来了许多的尘土,把大家呛得直打喷气,但大家都不觉得苦,继续埋头苦干。 ()我们各自分工之后,都开始行动起来了。 ( ) 同学们把自己的活干完之后又去帮忙干别的事了。 解题思路: 乱句排文的练习可以帮助学生训练思维,此题是按事件发展顺序排列,先是事件的起因,再是事件的过程,最后是结果。 题目答案:2 1 7 4 5 3 6

找单位1的技巧

在分数应用题 如何寻找单位“1” 在分数应用题中如何寻找单位正确找准单位“1”,是解答分数(百分数)应用题的关键。每一道分数应用题中总是有关键句(含有分率的句子)。如何从关键句中找准单位“1”,应该从以下这些方面进行考虑。一、把分率作为突破口,找准单位“1” 分数应用题存在着三种数量(即比较量、标准量和分率),这三种数量有着如下的关系:标准量×分率=比较量,比较量÷标准量=分率,比较量÷分率=标准量,要正确找准单位“1”的量(即标准量)必须从题目中的分率着手,看这个分率是哪个量的分率,哪个量就是标准量。 例如:幸福村有旱地300 亩,水亩面积是旱地面积的3/5,水田面积有多少亩?这道题中的分率3/5 是旱地面积的3/5,所以旱地面积是单位“1”的量。 二、部分数和总数 有些分数应用题,存在着整体和部分两个数量,部分数和总数作比较关系时,部分数通常作为比较量,而总数则作为标准量,那么总数就是单位“1”。 例如:我国人口约占世界人口的1/5,世界人口是总数,我国人口是部分数,所以,世界人口就是单位“1”。 例如:红星小学有学生1000 人,男生占总人数的3/5,男生有多少人?在这道应用题中,学生的总人数是标准量,男生人数量比较量。解答这类分数应用题,只要找准总数和部分数,确定单位“1”就很容易了。三、两种数量比较 分数应用题中,两种数量相比的关键句非常多。有的是“比”字句,有的则没有“比”字,而是带指向性特征的“占”、“是”、“相当于”。在含有“比”字的关键句中,比后面的那个数量通常就作为标准量,也就是单位“1”。 例如:六(2)班男生比女生多1/2。就是以女生人数为标准(单位“1”),男生比女生多的人数作为比较量。 在另外一种没有比字的两种量相比的时候,我们通常找到分率,看“占”谁的,“相当于”谁的,“是”谁的几分之几。这个“占”,“相当于”,“是”后面的数量——谁就是单位“1”。 例如,一个长方形的宽是长的5/12。在这关键句中,很明显是以长作为标准,宽和长相比较,也就是说长是单位“1”。又如,今年的产量相当于去年的4/3 倍。那么相当于后面的去年的产量就是标准量,也就是单位“1”。 四、原数量与现数量 有的关键句中不是很明显地带有一些指向性特征的词语,也不是部分数和总数的关系。这类分数应用题的单位“1”比较难找。 例如,水结成冰后体积增加了1/10,冰融化成水后,体积减少了1/12。象这样的水和冰两种数量到底谁作为单位“1”?两句关键句的单位“1”是不是相同?用上面讲过的两种方法不容易找出单位“1”。其实我们只要看,原来的数量是谁?这个原来的数量就是单位“1”!比如水结成冰,原来的数量就是水,那么水就是单位“1”。冰融化成水,原来的数量是冰,所以冰的体积就是单位

工作总结范文精选:各种排序方法复杂度总结

各种排序方法复杂度总结 一、冒泡排序 主要思路是: 通过交换相邻的两个数变成小数在前大数在后,这样每次遍历后,最大的数就“沉”到最后面了。重复N次即可以使数组有序。 代码实现 voidbubble_sort(intarr[],intlen) for(inti=0;i=i;j――) if(arr[j]

冒泡排序改进2: 记录某次遍历时最后发生数据交换的位置,这个位置之后的数据显然已经有序。因此设置标志位记录每次遍历中最后发生数据交换的位置可以确定下次循环的范围。 二、直接插入排序 主要思路是: 每次将一个待排序的数组元素,插入到前面已排序的序列中这个元素应该在的位置,直到全部数据插入完成。类似扑克牌洗牌过程。 代码实现 void_sort(intarr[],intlen) for(inti=1;i―1&&k

三、直接选择排序 主要思路是: 数组分成有序区和无序区,初始时整个数组都是无序区,每次遍历都从无序区选择一个最小的元素直接放在有序区最后,直到排序完成。 代码实现 voidselect_sort(intarr[],intlen) for(inti=0;i

相关主题
文本预览
相关文档 最新文档