导航:首页 > 源码编译 > Pc28稳定算法

Pc28稳定算法

发布时间:2022-05-06 08:52:00

㈠ 高中计算机奥林匹克竞赛考什么

一、考试内容主要有:

NOI 竞赛的题目以考查选手对算法编程能力的掌握为主。题目类型有以下三种:

1、传统型:

传统型题目要求选手提交答案程序的源文件。该程序从一个正文文件中读入数据,并向指定的输出文件中写入计算结果。非交互式程序题的题面包括下列内容:

(1)求解问题的描述;

(2)输入文件名和输出文件名(可以是标准输入/输出);

(3)输入数据格式、输出数据格式、以及输入数据范围;

(4)对程序使用计算资源的限制,以及其它可能的限制。

2、交互型:

交互型题目要求选手提交答案程序的源文件。该程序通过调用所提供的库函数实现数据的输入和输出。交互式程序题的题面包括下列内容:

(1)求解问题的描述;

(2)库函数的功能、函数原型、以及获取和链接方式;

(3)输入数据格式、输出数据格式、以及输入数据范围;

(4)对程序使用计算资源的限制,以及其它可能的限制。

3、提交答案型:

提交答案型题目不要求选手提交程序的源文件。选手需要按题目要求,根据给定的输入数据文件生成一组输出数据文件。该组数据文件既可以是由选手的程序输出的,也可以是由选手手工构造的。当选手使用自行设计的程序生成题目答案时,其所使用的程序不应提交。答案提交题的题面包括下列内容:

(1)求解问题的描述;

(2)输入数据格式、输出数据格式;

(3)输入数据文件的获取方法。

二、报名地:

所有省市自治区都可以报名参加。

三、编译系统:

gcc ≥3.2.2, g++ ≥3.2.2, Free Pascal ≥2.0.1 ,主要用 C++ 和 Pascal 。

四、靠前复习应以考试内容为侧重,到达熟练掌握的程度,很有可能拿到好成绩。

(1)Pc28稳定算法扩展阅读:

1、竞赛前的练习和标准化笔试题:

选手在正式竞赛前应有不少于2个小时的练习时间,以熟悉竞赛场地、设备和软件环境、以及答案提交方式。竞赛前的练习应安排在第一场竞赛的前一天。在赛前练习结束后,应安排不少于30分钟的时间进行标准化笔试题的测试。

标准化笔试题包含单选题、多选题和填空题,题目涉及的内容包括计算机和编程的基本知识、NOI竞赛所使用的操作系统、编程工具等的使用方法,以及基本竞赛规则。标准化笔试题的成绩计入选手竞赛的总成绩。

2、竞赛时间:

NOI 的竞赛分为两场,每场竞赛的时间为5小时。两场竞赛之间应间隔一天。

㈡ 新加坡28算法急求答案

遇到不会的题就上网找答案照抄,根本不想动脑筋,会让学生养成,在网上是问不到答案的哈
不思考的习惯,改正吧,多思考 做题不怕做错,就怕不思考

㈢ 请介绍下SLI

SLI的全称是Scalable Link Interface,它是通过一种特殊的接口连接方式,在一块支持双PCI Express X 16的主板上,同时使用两块同型号的PCIE显卡。 以增强nVIDIA在工作站产品中的竞争力,毕竟ATi凭借FireGL系列在该领域不断蚕食nVIDIA的市场。在未来的产品线中,SLI将成为新的至高点。那么,SLI是一项什么样的技术?它与过去的多GPU技术有何差异?SLI能否在市场上获得佳绩?要回答这些问题,我们有必要对SLI进行全面的分析介绍,同时也将回顾多GPU技术的发展历史。

多显卡并行机制的历史最早可以追溯到1997年,当时的显卡市场可以说是3Dfx一家独大,该公司在1996年下半年所推出的Voodoo加速卡成为发烧友疯狂追捧的一代经典产品。1998年初,3Dfx推出了它们的第二代3D图形卡产品—Voodoo 2,当时Voodoo 2拥有90Mps的像素填充率,具备Z-Buffering、Anti-Aliasing、单周期双纹理等当时最先进的3D特性,大幅超越其上一代产品,其他对手更是被远远甩在了后头。不过,最令发烧友疯狂的是Voodoo 2所具有的“SLI交错互连技术”,这项技术可以让两块Voodoo 2显卡连接起来并行运作,获得近乎翻倍的3D效能。如此一来,其他竞争者更是望尘莫及。
我们知道,CPU的并行运作是通过指令并行执行获得的,但对显卡来说情况有所区别。显卡最终生成的是所渲染的3D画面,这项工作包含大量的指令,而如何将工作均等分配就成为问题,3Dfx选择了按画面帧线进行渲染的方式。SLI技术将一幅渲染的画面分为一条条扫描帧线(Scanline),若Voodoo 2采用双显卡运行模式,那么就由一个显卡负责渲染画面的奇数帧线部分,另一块显卡渲染偶数帧线,然后将同时渲染完毕的帧线进行合并后写入到帧缓冲中,接下来显示器就可以显示出一个完整的渲染画面。不难看出,SLI技术让渲染工作被平均分担,每块显卡只需要完成1/2的工作量。理论上说,渲染效率自然也可以提高1倍,这就是双显卡并行大幅提升效能的奥秘所在。SLI在技术上极为成功,而发烧友们对Voodoo 2也抱有莫大的热情。在当时,你如果希望在1024×768的“高分辨率”下流畅地玩3D游戏,唯一的解决方案就是使用两块Voodoo 2显卡并让它们工作在SLI模式下。

在Voodoo 2之后的Voodoo 3,3Dfx没有效仿这个SLI双显卡技术,但在Voodoo 4/5/6时代,3Dfx重新恢复了SLI,但应用的形式已有所区别。Voodoo 2倡导双显卡并行运作,两块显卡插在PCI槽里再用专用的线缆连接起来,但这并非必需的,单个Voodoo 2显卡也可以独自工作,只是速度较慢而已。2000年春,3Dfx推出VSA100图形芯片,当时nVIDIA已经压过3Dfx成为领先者,为了夺回自己的领导地位,3Dfx让SLI技术重装上阵。VSA100可支持单芯片、双芯片和四芯片并行运作,单芯片版本就是Voodoo 4,双芯片显卡为Voodoo 5 5500,而四芯片显卡则是着名的Voodoo 5 6000。此时,SLI技术演变为单显卡多图形芯片的形式,不需占用两个插槽,但内部的工作机制并没有发生多大的变化,依然是通过划分渲染帧的方式各自执行,然后在帧缓冲中统一合成。出于众所周知的原因,这些显卡都没获得广泛认可,3Dfx也从衰落走向死亡。2001年初,nVIDIA收购了3Dfx,SLI技术也随之成为了历史,尽管nVIDIA掌握了3Dfx的所有技术,但它并没有将之发扬光大,而是继续按照自己的道路走下去,收购3Dfx的目的也许只是消灭一个竞争对手而已。
在这之后,我们看到了nVIDIA顺利一统江湖,接着就是ATi逐渐发起挑战,GeForce和Radeon是人们最常挂在嘴边的名词,至于3Dfx和它的SLI已经逐渐被人淡忘了,即便偶尔有人谈起,也多是说那是一个策略糟糕的企业和一项昂贵不切实际的技术。在显卡的历史中,除了Voodoo 2之外没有哪一项多显卡、多芯片技术曾获得成功,虽然ATi尝试过,新生的XGI也勇闯该领域,然而事实证明这个方案并不受用户们的欢迎。不过,谁也没有想到nVIDIA重新拾起3Dfx的SLI技术。2004年6月29日,nVIDIA大张旗鼓发布了“SLI Multi-GPU技术”,并将该技术引入最新发布的GeForce 6800和Quadro FX4000系列显卡上。沿用“SLI”这个名称或多或少让人联想到3Dfx,nVIDIA想要的也许正是这个效果,它更希望被用户认为是3Dfx技术的一脉相承。但如果我们深入分析,便会发现它与3Dfx的SLI技术没有多少相同的地方,基本上就是一套nVIDIA新搞出来的多显卡方案。
SLi技术是实现了两款显卡同时出现在一块板子,构成一套SLI双显卡并行系统,这一技术的应用更大程度的满足了用户对高品质画质的需求。这一技术还是今年6月在台北电脑展上首次出现的,这次电脑展上同时还展现了NV45核心显卡,随着NV45的曝光,这一技术也随着曝光,这一技术自出现以来就陪受世人的关注。

这一接口出现在显卡的端部,卡上的接口类似于PCI Express ×1,通过这一接口实现两块NV45显卡的连接,实现SLi的并行运作。同时NV官方表示,选择PCB卡连接可充分保证信号通讯的质量与速度,显卡间的数据传输采用数字形式进行,这样可有效防止因信号干扰而导致画面不同步的弊端。Voodoo 2所采用的技术是模拟传输方式,数字信号先被转换为模拟信号后才进行合成,因为干扰的影响,在某些时候会出现数据不匹配的问题,导致合成后的画面往往难以同步或出现其他问题,这也是Voodoo 2 SLi技术的主要缺陷。而改用数字信号传输,显然就不存在这个问题,显卡处理完的帧数据被集合起来合成,然后才转为模拟信号输出,从而确保画面的完整性。
nVIDIA将SLi控制功能直接的集成到在显卡的GPU芯片内部,从上图的芯片的逻辑图中可以很容易的看到,在NV45的左侧左侧偏下的位置有一个很小的区域专门负责SLI运作,该区域所掌管的职能包括两块显卡的连接、通讯,渲染任务的指派以及画面的合成等等。由于指令的传输工作相对简单,在芯片的FCBGA封装中也只有极少几根针脚用于SLI模式。但由于别的GPU并没有集成这一控制逻辑,所以别的显卡并不支持这一技术,但由于特殊的原理的所以SLi技术并不支持AGP总线,SLi技术只可运行在PCI-E模式下,对主板提出了新的要求。同时nVIDIA官方还透露,SLi最多可以支持高达8块的GPU并行运行,但是对于目前的市场来看,8块GPU的并行运作并没有什么实际的意义。
对于SLi技术,两款显卡并不是对等的,在运行工用中,一块显卡做为主卡,另一款做为副卡,其中副卡只是接收来自主卡的任务进行相关处理,然后将结果传关回主卡,同时不要声名的是在传送数据的两个途径,两块显卡都是通过PCI-E接口与主板相连接,而这两块显卡之间还要有一个通讯的PCB卡(即SLi桥接卡),其中,连接两块显卡的PCB卡用于任务指派指令以及后期处理结果的传送,这部分的数据量不会很大,所以PCB卡所使用的接口和自身结构都较为简单。但是,显卡在渲染过程中必须调用大量的数据,这部分数据只能通过PCI-E接口从系统中获取。换言之,在SLI系统中有两部分不同的数据流向,一部分为主卡将任务指令通过PCB连接卡传送给副卡,副卡将渲染完毕的结果数据返回给主卡合成,另一部分为处理过程中从PCI-E接口得到的原始数据。

SLi技术采用帧线方式划分任务,想把一幅画完全的渲染出来,一副画面将被渲被分成奇数渲染帧和偶数渲染帧两个部分,然后交给两块显卡分别渲染,完毕之后再统一合成。虽然nVIDIA继续沿用了“Scalable Link Interface”的名号,但在工作的方式上已有了本质性的改变。在nVIDIA的SLi系统中,一幅渲染的画面被划分为上下两个部分,主显卡完成上部分画面,副显卡则完成下半部分的画面,然后副显卡将渲染完毕的画面传输给主显卡,主显卡再将它与自己渲染的上半部分画面合成为一幅完整的画面。这样,一个完整的SLi并行渲染任务就完成了。同理相推,如果有四块显卡并行运作,那么画面会被分成四个部分分别渲染,8个GPU并行也是如此
技术难题

奇偶帧数分配也有一些弊端,首先,主显卡或是主GPU必须承担额外的控制、任务分配、画面合成及输出等工作,用于渲染的运算资源较少,但它必须完成与副卡一样多的任务,显然的副卡的工作效率要比主卡快,副卡率先的将自己的任务处理完,把结果数据回传后便处于等待状态,直到主卡将它的任务处理完毕之后才可以继续进行任务入出指派,同时,同一幅画不同区域的复杂并不相同,所需的运算也不一样,如果使用Voodoo 2的帧线划分方式那也没什么,但是nVIDIA的SLi采用划分上下画面的方式,如果在一些常见的游戏中画面上半部分几乎是静态的,而下半部分就非常复杂,需要处理的数据量很大,如果单纯将画面作均等的划分也不科学。

为此nVIDIA另外开发了一套动态负载平衡技术来解决这一情况,画面的上下划分并不是按照固定的一半一半方式,而是根据画面的复杂情况进行划分,这样的分配并不是为了保证工作量在两块卡间的绝对平均分配,而是要将两块显卡完成渲染任务的时间保持一致,以此达到效能的最优化。同时考虑到主显卡需要承担额外的控制任务,同于实际渲染运算的资源较少,动态负载平衡算法就可以根据这一前提,将任务量适合多给副卡,让其分担来减少主卡的负担,这样动态负载平衡算法并不是集成在GPU芯片内部,而是在驱动程序中整合,nVIDIA可以方便对其进行修改,以达到更好的性能。

但是,动态平衡技术也不是万能的,SLi无法支持在不同的显卡间构建并行系统,用户在选择时可以选择PCI-E接口的GF6800标、6800U及是Quadro FX4000显卡,对于不同版本的GF6800显卡或是同时使用不是同一版本的显卡像6800和Quadro FX4000显卡,将不能被实用。同时两块卡在协同工作时上下两部分画面的垂直同步也是一个问题,如果打开该功能势必会对游戏的性能产生影响。但是您还是不用太担心的,NV已采用了缓存技术来针对于这一技术进行进一步的解决。用户大可不必担心SLi系统会受显示器刷新率的影响。而建立SLI工作模式后的两块显卡也都支持超频,但用户一定要记住,两块显卡的频率必须要保持一致。

SLi的门槛:

毫无疑问,SLI可以构建出一套无敌的强悍图形系统,但前提是你得找到相应主板的支持。SLI系统要求使用两块PCI Express显卡,也就要求主板必须提供两个PCI Express×16插槽,这与当年Voodoo 2 SLI要占用两条PCI槽是一样的。不同之处在于,现有的PC主板最多也只提供一条PCI Express×16图形插槽,显然无法构建基于GeForce 6800或Quadro FX4000的SLI系统,用户必须寻求另外的渠道。 新趋向就是,如果你想获得SLI系统,AMD64的Nforce4平台将会成为最好的选择,这在无形之中将提升AMD产品在工作站市场的影响力。

解决了主板的支持问题,应对双显卡的高功耗便提上日程。GeForce 6800集成了多达2亿2000万枚晶体管,堪称是当前规模最大的集成电路芯片。尽管nVIDIA借助冗余电路技术明显提高了产品的良品率,但并没有解决功耗过高的问题—GeForce 6800的最高功耗超过100W,甚至比Prescott还要惊人,即便在正常模式下,其功耗也高达70W到90W之多,nVIDIA甚至建议PC用户使用460W的高功率电源。而现在的SLI系统面临的问题显然更加糟糕,两块GeForce 6800/Quadro FX4000显卡至少要耗费将近200瓦的电能,加上双CPU和其他部件,至少要为整套系统准备500到600瓦的大功率电源才会够用,普通PC用户注定是无福消受。

成本过高也是SLI系统要面对的一个问题。一块GeForce 6800显卡最便宜也要3000多元人民币,Ultra版显卡可达到5000元,而一块Quadro FX4000专业显卡超过万元,双显卡的高昂代价毋庸置疑。另外,SLI系统只能同工作站主板和高阶CPU搭配,这又是非常庞大的开支。粗略估计,组建一套SLI系统最少都要超过1万元人民币,最多可超过5万元,任何人都会对此掂量再三。

获得可支持的主板,装载了高功率电源,同时愿意付出高昂的代价,那么你便可以感受到SLI系统所拥有的超强图形性能了。根据nVIDIA所提供的数据,在3DMark 2003(1600×1200分辨率,32位色开启4×AA、8×AF模式)以及最新的 Unreal 3 Engine(1024×768分辨率,32位色) 的测试中,SLI双显卡的成绩可达到单显卡运作的1.87倍之多,3DMark 2003的得分也轻松超过20000分大关,表现极为强悍。nVIDIA透露,SLI系统尚有一定的提升空间,比如向游戏开发者公布SLI算法,使得开发出的游戏可为SLI系统作优化。当然,不管怎么优化,SLI系统的最高性能都不可能达到单显卡的两倍,包括RAID 0、双CPU之类的并行运作系统也都是如此,与常理完全相符。但无论怎样,SLi的性能永远让玩家兴奋,向往!

㈣ 加拿大pc算法教程

1.三级流水线:其实对于PC = PC +8这个问题很简单,这两个PC其实代表着不同的意义,第一个PC是对于CPU而言,而第二个PC而言是我们通过编译器看到的PC(PC指向程序正在运行的那一条指令),但是对于CPU的PC是永远指向取指那个步,故PC = PC +8。

2.五级流水线; ARM9流水线包括取指(fetch)、译码(decode)、执行(excute)、缓冲/数据(buffer/data)、回写(write-back)寄存器堆。ARM9流水线在译码阶段已经开始读取操作数寄存器,因此译码阶段的PC值和取指阶段的PC值关系为:PC(decode)=PC(fetch)+4。因此执行阶段的PC值和译码阶段的PC值关系为:PC(excute)=PC(decode)+4。

3.对于软中断函数的返回时的PC:如下

ARM Thumb

SWI PC-8 PC-4

xxx 》 PC -4 PC-2 (异常返回将执行这条指令)

yyy PC PC

因此返回指令为: MOV PC , LR

原因:异常是由指令本身引起的,因此内核在计算LR时的PC值并没有被更新。对于ARM状态,因为SWI指令表示将跳到异常处理函数,此时SWI这条指令的PC = PC -8,当进入异常处理函数之前,硬件会自动把PC-4保存到LR寄存器中,所以异常处理函数结束后直接MOV PC, LR就行,就会跳到xxx这一条指令去执行。对于Thumb状态同理。

4.对于IRQ和FIQ中断函数返回时的PC:

ARM Thumb

xxx PC-12 PC-6 (程序在运行这条代码时就产生了中断信号)

yyy 》 PC-8 PC-4 (异常返回将执行这条指令)

zzz PC-4 PC-2

www PC PC

返回指令为: SUBS PC, LR, #4

原因:异常在当前指令执行完成后才会被响应,因此内核在计算LR时的PC值已被更新。对于ARM状态,程序在执行xxx这条指令时,中断信号产生,但是由于中断必须在这一条指令执行完之后才会被响应,执行完后,则此时对于CPU的PC已经指向了www这条指令的取指,在中断函数函数时应该执行yyy这条指令,虽然硬件会把PC-4的值赋值给LR寄存器,但是这是指向zzz这条指令的,所以返回时应该SUBS PC, LR, #4。对于Thumb状态同理。

㈤ 什么是算法的稳定性

算法的稳定性一般是指复杂度的稳定性。

一般的算法都具有稳定性的,也就是说有固定的多项式时间。而一般的np问题和np完全问题有可能没有多项式的复杂度,所以可能有些问题很快,有些问题慢。

㈥ 博弈均衡的进化稳定策略的算法

计算进化稳定策略的方法主要有两大类:一是从动态过程出发,求出系统的平衡点,然后,再根据进化稳定策略的定义进行验证就可以了;另一种方法就是直接用进化稳定策略定义来求。第一种方法涉及到具体的动态过程,并且只要知道动态过程就很容易求出进化稳定策略,本文略(可以参考张良桥2001)。第二种方法就是通过定义来求,下面给出一种简单的处理方法。
根据纳什均衡的定义可以知道,如果策略 是博弈的纳什均衡,那么,所有以正概率进入最优混合策略的纯策略都是最优的,参与人在所有这些纯策略所得的支付都是无差异的(见《博弈论与信息经济学》102-103页,张维迎),即有:
表示混合策略中非零概率的纯策略。假定存在 且下标为 的纯策略满足 ,令B是矩阵A中对应于非零纯策略的 阶子矩阵。且令C为 矩阵,其中代表元素为: 。那么当且仅当C是负定的, 就是进化稳定策略(见John Haigh 1974)。
证明:假定 ,并且存在 ,有 ,那么很明显有 ,其中 是第 个纯策略,即在与稳定策略者群体博弈时,突变策略者得到的支付比稳定策略者还要大,所以策略 不是进化稳定策略,所以式(6)是进化稳定策略的必要条件。因此,对应于非零概率的纯策略满足: ,对满足条件的策略 有(注意 ):
对任意 ,当且仅当
有: 。综上所述,利用该方法来求进化稳定策略的步骤如下:
首先,令 个非零混合策略,然后解 个方程: ,定义B,C再考察矩阵C的所有特征根是否都为负,若都是负则所得的策略就是进化稳定策略。
如求对称博弈 ,它有两个进化稳定策略: 。
如果某策略组合是严格纳什均衡策略,那么就可以直接得出它就是进化稳定策略,但如果是弱纳什均衡策略,那么就可运用上述的方法来进行判定。由此,可得到求博弈的进化稳定策略步骤:一是求出博弈所有的纳什均衡;二是由支付判断出其中的严格纳什均衡;三对非严格纳什均衡而言就代入上述方程,并判断是否为负定即可以求出博弈中所有进化稳定策略。

㈦ 数据结构的排序算法中,哪些排序是稳定的,哪些排序是不稳定的

一、稳定排序算法

1、冒泡排序

2、鸡尾酒排序

3、插入排序

4、桶排序

5、计数排序

6、合并排序

7、基数排序

8、二叉排序树排序

二、不稳定排序算法

1、选择排序

2、希尔排序

3、组合排序

4、堆排序

5、平滑排序

6、快速排序

排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。

一个排序算法是稳定的,就是当有两个相等记录的关键字R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。

不稳定排序算法可能会在相等的键值中改变纪录的相对次序,但是稳定排序算法从来不会如此。不稳定排序算法可以被特别地实现为稳定。

做这件事情的一个方式是人工扩充键值的比较,如此在其他方面相同键值的两个对象间之比较,就会被决定使用在原先数据次序中的条目,当作一个同分决赛。然而,要记住这种次序通常牵涉到额外的空间负担。

(7)Pc28稳定算法扩展阅读:

排序算法的分类:

1、通过时间复杂度分类

计算的复杂度(最差、平均、和最好性能),依据列表(list)的大小(n)。

一般而言,好的性能是 O(nlogn),且坏的性能是 O(n^2)。对于一个排序理想的性能是 O(n)。

而仅使用一个抽象关键比较运算的排序算法总平均上总是至少需要 O(nlogn)。

2、通过空间复杂度分类

存储器使用量(空间复杂度)(以及其他电脑资源的使用)

3、通过稳定性分类

稳定的排序算法会依照相等的关键(换言之就是值)维持纪录的相对次序。

㈧ 排序算法稳定性的常见排序算法的稳定性


堆排序、快速排序、希尔排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。
首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj, Ai原来在位置前,排序后Ai还是要在Aj位置前。
其次,说一下稳定性的好处。排序算法如果是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。基数排序就 是这样,先按低位排序,逐次按高位排序,低位相同的元素其顺序再高位也相同时是不会改变的。
回到主题,现在分析一下常见的排序算法的稳定性,每个都给出简单的理由。
(1)冒泡排序
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无 聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改 变,所以冒泡排序是一种稳定排序算法。
(2)选择排序
选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个 元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么 交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。
(3)插入排序
插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开 始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相 等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳 定的。
(4)快速排序
快速排序有两个方向,左边的i下标一直往右走,当a[i] <= a[center_index],其中center_index是中枢元素的数组下标,一般取为数组第0个元素。而右边的j下标一直往左走,当a[j] > a[center_index]。如果i和j都走不动了,i <= j, 交换a[i]和a[j],重复上面的过程,直到i>j。 交换a[j]和a[center_index],完成一趟快速排序。在中枢元素和a[j]交换的时候,很有可能把前面的元素的稳定性打乱,比如序列为 5 3 3 4 3 8 9 10 11, 现在中枢元素5和3(第5个元素,下标从1开始计)交换就会把元素3的稳定性打乱,所以快速排序是一个不稳定的排序算法,不稳定发生在中枢元素和a[j] 交换的时刻。
(5)归并排序
归并排序是把序列递归地分成短序列,递归出口是短序列只有1个元素(认为直接有序)或者2个序列(1次比较和交换),然后把各个有序的段序列合并成一个有 序的长序列,不断合并直到原序列全部排好序。可以发现,在1个或2个元素时,1个元素不会交换,2个元素如果大小相等也没有人故意交换,这不会破坏稳定 性。那么,在短的有序序列合并的过程中,稳定是是否受到破坏?没有,合并过程中我们可以保证如果两个当前元素相等时,我们把处在前面的序列的元素保存在结 果序列的前面,这样就保证了稳定性。所以,归并排序也是稳定的排序算法。
(6)基数排序
基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优 先级排序,最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。基数排序基于分别排序,分别收集,所以其是稳定的排序算法。
(7)希尔排序(shell)
希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小, 插入排序对于有序的序列效率很高。所以,希尔排序的时间复杂度会比o(n^2)好一些。由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元 素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。
(8)堆排序
我们知道堆的结构是节点i的孩子为2*i和2*i+1节点,大顶堆要求父节点大于等于其2个子节点,小顶堆要求父节点小于等于其2个子节点。在一个长为n 的序列,堆排序的过程是从第n/2开始和其子节点共3个值选择最大(大顶堆)或者最小(小顶堆),这3个元素之间的选择当然不会破坏稳定性。但当为n /2-1, n/2-2, ...1这些个父节点选择元素时,就会破坏稳定性。有可能第n/2个父节点交换把后面一个元素交换过去了,而第n/2-1个父节点把后面一个相同的元素没 有交换,那么这2个相同的元素之间的稳定性就被破坏了。所以,堆排序不是稳定的排序算法。
综上,得出结论: 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。

㈨ 密文是什么 具体给我讲解一下

密文是相对于明文说的,明文其实就是你要传达的消息,而明文通过加密之后就成了密文,密文其实是信息安全的一个词汇。帮你介绍一下。

信息安全的发展历史

通信保密科学的诞生
古罗马帝国时期的Caesar密码:能够将明文信息变换为人们看不懂的字符串,(密文),当密文传到伙伴手中时,又可方便的还原为原来的明文形式。 Caesar密码由明文字母循环移3位得到。
1568年,L.Battista发明了多表代替密码,并在美国南北战争期间有联军使用。例:Vigenere密码和Beaufort密码
1854年,Playfair发明了多字母代替密码,英国在第一次世界大战中使用了此密码。例:Hill密码,多表、多字母代替密码成为古典密码学的主流。
密码破译技术(密码分析)的发展:例:以1918年W.Friedman使用重合指数破译多表代替密码技术为里程碑。 1949年C.Shannon的《保密系统的通信理论》文章发表在贝尔系统技术杂志上。这两个成果为密码学的科学研究奠定了基础。从艺术变为科学。实际上,这就是通信保密科学的诞生,其中密码是核心技术。

公钥密码学革命
25年之后,20世纪70年代,IBM公司的DES(美国数据加密标准)和1976年Diffie-Hellman,提出了公开密钥密码思想,1977年公钥密码算法RSA的提出为密码学的发展注入了新的活力。
公钥密码掀起了一场革命,对信息安全有三方面的贡献:首次从计算复杂性上刻画了密码算法的强度,突破了Shannon仅关心理论强度的局限性;他将传统密码算法中两个密钥管理中的保密性要求,转换为保护其中一格的保密性及另一格的完整性的要求;它将传统密码算法中密钥归属从通信两方变为一个单独的用户,从而使密钥的管理复杂度有了较大下降。
公钥密码的提出,注意:一是密码学的研究逐步超越了数据的通信保密范围,开展了对数据的完整性、数字签名等技术的研究;二是随着计算机和网络的发展,密码学一逐步成为计算机安全、网络安全的重要支柱,使得数据安全成为信息安全的全新内容,超越了以往物理安全占据计算机安全的主导地位状态。

访问控制技术与可信计算机评估准则
1969年,B.Lampson提出了访问控制模型。
1973年,D.Bell 和L.Lapala,创立了一种模拟军事安全策略的计算机操作模型,这是最早也是最常用的一种计算机多级安全模型。
1985年,美国国防部在Bell-Lapala模型的基础上提出了可信计算机评估准则(通常称为橘皮书)。按照计算机系统的安全防护能力,分成8个等级。
1987年,Clark-Wilson模型针对完整性保护和商业应用提出的。
信息保障
1998年10月,美国国家安全局(NSA)颁布了信息保障技术框架1.1版,2003年2月6日,美国国防部(DOD)颁布了信息保障实施命令8500.2,从而信息保障成为美国国防组织实施信息化作战的既定指导思想。
信息保障(IA:information assurance):通过确保信息的可用性、完整性、可识别性、保密性和抵赖性来保护信息系统,同时引入保护、检测及响应能力,为信息系统提供恢复功能。这就是信息保障模型PDRR。
protect保护、detect检测、react响应、restore 恢复
美国信息保障技术框架的推进使人们意识到对信息安全的认识不要停留在保护的框架之下,同时还需要注意信息系统的检测和响应能力。
2003年,中国发布了《国家信息领导小组关于信息安全保障工作的意见》,这是国家将信息安全提到战略高度的指导性文件

信息保密技术的研究成果:
发展各种密码算法及其应用:
DES(数据加密标准)、RSA(公开密钥体制)、ECC(椭圆曲线离散对数密码体制)等。
计算机信息系统安全模型和安全评价准则:
访问监视器模型、多级安全模型等;TCSEC(可信计算机系统评价准则)、ITSEC(信息技术安全评价准则)等。

加密(Encryption)
加密是通过对信息的重新组合,使得只有收发双方才能解码并还原信息的一种手段。
传统的加密系统是以密钥为基础的,这是一种对称加密,也就是说,用户使用同一个密钥加密和解密。
目前,随着技术的进步,加密正逐步被集成到系统和网络中,如IETF正在发展的下一代网际协议IPv6。硬件方面,Intel公司也在研制用于PC机和服务器主板的加密协处理器。

身份认证(Authentication)

防火墙是系统的第一道防线,用以防止非法数据的侵入,而安全检查的作用则是阻止非法用户。有多种方法来鉴别一个用户的合法性,密码是最常用的,但由于有许多用户采用了很容易被猜到的单词或短语作为密码,使得该方法经常失效。其它方法包括对人体生理特征(如指纹)的识别,智能IC卡和USB盘。

数字签名(Digital Signature)
数字签名可以用来证明消息确实是由发送者签发的,而且,当数字签名用于存储的数据或程序时,可以用来验证数据或程序的完整性。
美国政府采用的数字签名标准(Digital Signature Standard,DSS)使用了安全哈希运算法则。用该算法对被处理信息进行计算,可得到一个160位(bit)的数字串,把这个数字串与信息的密钥以某种方式组合起来,从而得到数字签名。

内容检查(Content Inspection)
即使有了防火墙、身份认证和加密,人们仍担心遭到病毒的攻击。有些病毒通过E-mail或用户下载的ActiveX和Java小程序(Applet)进行传播,带病毒的Applet被激活后,又可能会自动下载别的Applet。现有的反病毒软件可以清除E-mail病毒,对付新型Java和ActiveX病毒也有一些办法,如完善防火墙,使之能监控Applet的运行,或者给Applet加上标签,让用户知道他们的来源。

介绍一些加密的知识

密钥加/解密系统模型
在1976年,Diffie及Hellman发表其论文“New Directions in Cryptography”[9]之前,所谓的密码学就是指对称密钥密码系统。因为加/解密用的是同一把密钥,所以也称为单一密钥密码系统。

这类算法可谓历史悠久,从最早的凯撒密码到目前使用最多的DES密码算法,都属于单一密钥密码系统。

通常,一个密钥加密系统包括以下几个部分:
① 消息空间M(Message)
② 密文空间C(Ciphertext)
③ 密钥空间K(Key)
④ 加密算法E(Encryption Algorithm)
⑤ 解密算法D(Decryption Algorithm)
消息空间中的消息M(称之为明文)通过由加密密钥K1控制的加密算法加密后得到密文C。密文C通过解密密钥K2控制的解密算法又可恢复出原始明文M。即:
EK1(M)=C
DK2(C)=M
DK2(EK1(M))=M
概念:
当算法的加密密钥能够从解密密钥中推算出来,或反之,解密密钥可以从加密密钥中推算出来时,称此算法为对称算法,也称秘密密钥算法或单密钥算法;

当加密密钥和解密密钥不同并且其中一个密钥不能通过另一个密钥推算出来时,称此算法为公开密钥算法。

1.凯撒密码变换
更一般化的移位替代密码变换为
加密:E(m)=(m+k) mod 26
解密:D(c)=(c-k) mod 26

2.置换密码
在置换密码中,明文和密文的字母保持相同,但顺序被打乱了。在简单的纵行置换密码中,明文以固定的宽度水平地写在一张图表纸上,密文按垂直方向读出;解密就是将密文按相同的宽度垂直地写在图表纸上,然后水平地读出明文。例如:
明文:encryption is the transformation of data into some unreadable form
密文:eiffob nsodml ctraee rhmtuf yeaano pttirr trinem iaota onnod nsosa

20世纪40年代,Shannon提出了一个常用的评估概念。特认为一个好的加密算法应具有模糊性和扩散性。
模糊性:加密算法应隐藏所有的局部模式,即,语言的任何识别字符都应变得模糊,加密法应将可能导致破解密钥的提示性语言特征进行隐藏;
扩散性:要求加密法将密文的不同部分进行混合,是任何字符都不在其原来的位置。

加密算法易破解的原因是未能满足这两个Shannon条件。

数据加密标准(DES)

DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,经过16次迭代运算后。得到L16、R16,将此作为输入,进行逆置换,即得到密文输出。逆置换正好是初始置的逆运算.

具体方法 需要图 我放不上去对不起了
可以将DES算法归结如下:
子密钥生成:
C[0]D[0] = PC–1(K)
for 1 <= i <= 16
{C[i] = LS[i](C[i−1])
D[i] = LS[i](D[i−1])
K[i] = PC–2(C[i]D[i])}
加密过程:
L[0]R[0] = IP(x)
for 1 <= i <= 16
{L[i] = R[i−1]
R[i] = L[i−1] XOR f (R[i−1], K[i])}
c= IP−1(R[16]L[16])v
解密过程:
R[16]L[16] = IP(c)
for 1 <= i <= 16
{R[i−1] = L[i]
L[i−1] = R[i] XOR f (L[i], K[i])}
x= IP−1(L[0]R[0])
DES使用56位密钥对64位的数据块进行加密,并对64位的数据块进行16轮编码。与每轮编码时,一个48位的“每轮”密钥值由56位的完整密钥得出来。DES用软件进行解码需要用很长时间,而用硬件解码速度非常快,但幸运的是当时大多数黑客并没有足够的设备制造出这种硬件设备。
在1977年,人们估计要耗资两千万美元才能建成一个专门计算机用于DES的解密,而且需要12个小时的破解才能得到结果。所以,当时DES被认为是一种十分强壮的加密方法。 但是,当今的计算机速度越来越快了,制造一台这样特殊的机器的花费已经降到了十万美元左右,所以用它来保护十亿美元的银行间线缆时,就会仔细考虑了。另一个方面,如果只用它来保护一台服务器,那么DES确实是一种好的办法,因为黑客绝不会仅仅为入侵一个服务器而花那么多的钱破解DES密文。由于现在已经能用二十万美圆制造一台破译DES的特殊的计算机,所以现在再对要求“强壮”加密的场合已经不再适用了

DES算法的应用误区

DES算法具有极高安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每一秒种检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间,可见,这是难以实现的,当然,随着科学技术的发展,当出现超高速计算机后,我们可考虑把DES密钥的长度再增长一些,以此来达到更高的保密程度。
由上述DES算法介绍我们可以看到:DES算法中只用到64位密钥中的其中56位,而第8、16、24、......64位8个位并未参与DES运算,这一点,向我们提出了一个应用上的要求,即DES的安全性是基于除了8,16,24,......64位外的其余56位的组合变化256才得以保证的。因此,在实际应用中,我们应避开使用第8,16,24,......64位作为有效数据位,而使用其它的56位作为有效数据位,才能保证DES算法安全可靠地发挥作用。如果不了解这一点,把密钥Key的8,16,24,..... .64位作为有效数据使用,将不能保证DES加密数据的安全性,对运用DES来达到保密作用的系统产生数据被破译的危险,这正是DES算法在应用上的误区,留下了被人攻击、被人破译的极大隐患。

A5 算 法

序列密码简介
序列密码又称流密码,它将明文划分成字符(如单个字母)或其编码的基本单元(如0、1),然后将其与密钥流作用以加密,解密时以同步产生的相同密钥流实现。
序列密码强度完全依赖于密钥流产生器所产生的序列的随机性和不可预测性,其核心问题是密钥流生成器的设计。而保持收发两端密钥流的精确同步是实现可靠解密的关键技术。

A5算法
A5算法是一种序列密码,它是欧洲GSM标准中规定的加密算法,用于数字蜂窝移动电话的加密,加密从用户设备到基站之间的链路。A5算法包括很多种,主要为A5/1和A5/2。其中,A5/1为强加密算法,适用于欧洲地区;A5/2为弱加密算法,适用于欧洲以外的地区。这里将详细讨论A5/1算法。
A5/1算法的主要组成部分是三个长度不同的线性反馈移位寄存器(LFSR)R1、R2和R3,其长度分别为19、22和23。三个移位寄存器在时钟的控制下进行左移,每次左移后,寄存器最低位由寄存器中的某些位异或后的位填充。各寄存器的反馈多项式为:
R1:x18+x17+x16+x13
R2:x21+x20
R3:x22+x21+x20+x7
A5算法的输入是64位的会话密钥Kc和22位的随机数(帧号)。

IDEA
IDEA即国际数据加密算法,它的原型是PES(Proposed Encryption Standard)。对PES改进后的新算法称为IPES,并于1992年改名为IDEA(International Data Encryption Algorithm)。

IDEA是一个分组长度为64位的分组密码算法,密钥长度为128位,同一个算法即可用于加密,也可用于解密。
IDEA的加密过程包括两部分:
(1) 输入的64位明文组分成四个16位子分组:X1、X2、X3和X4。四个子分组作为算法第一轮的输入,总共进行八轮的迭代运算,产生64位的密文输出。
(2) 输入的128位会话密钥产生八轮迭代所需的52个子密钥(八轮运算中每轮需要六个,还有四个用于输出变换)

子密钥产生:输入的128位密钥分成八个16位子密钥(作为第一轮运算的六个和第二轮运算的前两个密钥);将128位密钥循环左移25位后再得八个子密钥(前面四个用于第二轮,后面四个用于第三轮)。这一过程一直重复,直至产生所有密钥。
IDEA的解密过程和加密过程相同,只是对子密钥的要求不同。下表给出了加密子密钥和相应的解密子密钥。
密钥间满足:
Zi(r) ⊙ Zi(r) −1=1 mod (216+1)
−Zi(r)  +  Zi(r) =0 mod (216+1)

Blowfish算法
Blowfish是Bruce Schneier设计的,可以免费使用。
Blowfish是一个16轮的分组密码,明文分组长度为64位,使用变长密钥(从32位到448位)。Blowfish算法由两部分组成:密钥扩展和数据加密。

1. 数据加密
数据加密总共进行16轮的迭代,如图所示。具体描述为(将明文x分成32位的两部分:xL, xR)
for i = 1 to 16
{
xL = xL XOR Pi
xR = F(xL) XOR xR
if
{
交换xL和xR

}
}
xR = xR XOR P17
xL = xL XOR P18
合并xL 和xR
其中,P阵为18个32位子密钥P1,P2,…,P18。
解密过程和加密过程完全一样,只是密钥P1,P2,…,P18以逆序使用。
2. 函数F
把xL分成四个8位子分组:a, b, c 和d,分别送入四个S盒,每个S盒为8位输入,32位输出。四个S盒的输出经过一定的运算组合出32位输出,运算为
F(xL) =((S1,a + S2,b mod 232) XOR S3,c) + S4,d mod 232
其中,Si,x表示子分组x(x=a、b、c或d)经过Si (i=1、2、3或4)盒的输出。

没有太多地方写了,不把整个过程列上面了,就简单介绍一下好了。

GOST算法
GOST是前苏联设计的分组密码算法,为前苏联国家标准局所采用,标准号为:28147–89[5]。
GOST的消息分组为64位,密钥长度为256位,此外还有一些附加密钥,采用32轮迭代。

RC5算法
RC5是一种分组长度、密钥长度和加密迭代轮数都可变的分组密码体制。RC5算法包括三部分:密钥扩展、加密算法和解密算法。

PKZIP算法
PKZIP加密算法是一个一次加密一个字节的、密钥长度可变的序列密码算法,它被嵌入在PKZIP数据压缩程序中。
该算法使用了三个32位变量key0、key1、key2和一个从key2派生出来的8位变量key3。由密钥初始化key0、key1和key2并在加密过程中由明文更新这三个变量。PKZIP序列密码的主函数为updata_keys()。该函数根据输入字节(一般为明文),更新三个32位的变量并获得key3。

重点:单向散列函数

MD5 算 法

md5的全称是message-digestalgorithm5(信息-摘要算法),在90年代初由和rsadatasecurityinc的ronaldl.rivest开发出来,经md2、md3和md4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是md2、md4还是md5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但md2的设计与md4和md5完全不同,那是因为md2是为8位机器做过设计优化的,而md4和md5却是面向32位的电脑。
rivest在1989年开发出md2算法。在这个算法中,首先对信息进行数据补位,使信息的字节长度是16的倍数。然后,以一个16位的检验和追加到信息末尾。并且根据这个新产生的信息计算出散列值。后来,rogier和chauvaud发现如果忽略了检验和将产生md2冲突。md2算法的加密后结果是唯一的--既没有重复。 为了加强算法的安全性,rivest在1990年又开发出md4算法。md4算法同样需要填补信息以确保信息的字节长度加上448后能被512整除(信息字节长度mod512=448)。然后,一个以64位二进制表示的信息的最初长度被添加进来。信息被处理成512位damg?rd/merkle迭代结构的区块,而且每个区块要通过三个不同步骤的处理。denboer和bosselaers以及其他人很快的发现了攻击md4版本中第一步和第三步的漏洞。dobbertin向大家演示了如何利用一部普通的个人电脑在几分钟内找到md4完整版本中的冲突(这个冲突实际上是一种漏洞,它将导致对不同的内容进行加密却可能得到相同的加密后结果)。毫无疑问,md4就此被淘汰掉了。 尽管md4算法在安全上有个这么大的漏洞,但它对在其后才被开发出来的好几种信息安全加密算法的出现却有着不可忽视的引导作用。除了md5以外,其中比较有名的还有sha-1、ripe-md以及haval等。

一年以后,即1991年,rivest开发出技术上更为趋近成熟的md5算法。它在md4的基础上增加了"安全-带子"(safety-belts)的概念。虽然md5比md4稍微慢一些,但却更为安全。这个算法很明显的由四个和md4设计有少许不同的步骤组成。在md5算法中,信息-摘要的大小和填充的必要条件与md4完全相同。denboer和bosselaers曾发现md5算法中的假冲突(pseudo-collisions),但除此之外就没有其他被发现的加密后结果了。 vanoorschot和wiener曾经考虑过一个在散列中暴力搜寻冲突的函数(brute-forcehashfunction),而且他们猜测一个被设计专门用来搜索md5冲突的机器(这台机器在1994年的制造成本大约是一百万美元)可以平均每24天就找到一个冲突。但单从1991年到2001年这10年间,竟没有出现替代md5算法的md6或被叫做其他什么名字的新算法这一点,我们就可以看出这个瑕疵并没有太多的影响md5的安全性。上面所有这些都不足以成为md5的在实际应用中的问题。并且,由于md5算法的使用不需要支付任何版权费用的,所以在一般的情况下(非绝密应用领域。但即便是应用在绝密领域内,md5也不失为一种非常优秀的中间技术),md5怎么都应该算得上是非常安全的了。

算法
MD表示消息摘要(Message Digest)。MD5是MD4的改进版,该算法对输入的任意长度消息产生128位散列值(或消息摘要。MD5算法可用图4-2表示。
对md5算法简要的叙述可以为:md5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

1) 附加填充位
首先填充消息,使其长度为一个比512的倍数小64位的数。填充方法:在消息后面填充一位1,然后填充所需数量的0。填充位的位数从1~512。
2) 附加长度
将原消息长度的64位表示附加在填充后的消息后面。当原消息长度大于264时,用消息长度mod 264填充。这时,消息长度恰好是512的整数倍。令M[0 1…N−1]为填充后消息的各个字(每字为32位),N是16的倍数。

3) 初始化MD缓冲区
初始化用于计算消息摘要的128位缓冲区。这个缓冲区由四个32位寄存器A、B、C、D表示。寄存器的初始化值为(按低位字节在前的顺序存放):
A: 01 23 45 67
B: 89 ab cd ef
C: fe dc ba 98
D: 76 54 32 10

4) 按512位的分组处理输入消息
这一步为MD5的主循环,包括四轮,如图4-3所示。每个循环都以当前的正在处理的512比特分组Yq和128比特缓冲值ABCD为输入,然后更新缓冲内容。
四轮操作的不同之处在于每轮使用的非线性函数不同,在第一轮操作之前,首先把A、B、C、D复制到另外的变量a、b、c、d中。这四个非线性函数分别为(其输入/输出均为32位字):
F(X,Y,Z) = (XY)((~X) Z)
G(X,Y,Z) = (XZ)(Y(~Z))
H(X,Y,Z) = XYZ
I(X,Y,Z) = Y(X(~Z))
其中,表示按位与;表示按位或;~表示按位反;表示按位异或。
此外,由图4-4可知,这一步中还用到了一个有64个元素的表T[1..64],T[i]=232×abs(sin(i)),i的单位为弧度。
根据以上描述,将这一步骤的处理过程归纳如下:
for i = 0 to N/16−1 do
/* 每次循环处理16个字,即512字节的消息分组*/
/*把第i个字块(512位)分成16个32位子分组拷贝到X中*/
for j = 0 to 15 do
Set X[j] to M[i*16+j]
end /*j 循环*/
/*把A存为AA,B存为BB,C存为CC,D存为DD*/
AA = A
BB = B
CC = C
DD = D
/* 第一轮*/
/* 令[abcd k s i]表示操作
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s)
其中,Y<<<s表示Y循环左移s位*/
/* 完成下列16个操作*/
[ABCD 0 7 1  ] [DABC 1 12 2  ] [CDAB 2 17 3  ] [BCDA 3 22 4  ]
[ABCD 4 7 5  ] [DABC 5 12 6  ] [CDAB 6 17 7  ] [BCDA 7 22 8  ]
[ABCD 8 7 9  ] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]
/* 第二轮*/
/*令[abcd k s i]表示操作
a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s)*/
/*完成下列16个操作*/
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]

/*第三轮*/
/*令[abcd k s t]表示操作
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s)*/
/*完成以下16个操作*/
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]
/*第四轮*/
/*令[abcd k s t]表示操作
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s) */
/*完成以下16个操作*/
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
A = A + AA
B = B + BB
C = C + CC
D = D + DD
end /*i循环*/
5) 输出
由A、B、C、D四个寄存器的输出按低位字节在前的顺序(即以A的低字节开始、D的高字节结束)得到128位的消息摘要。
以上就是对MD5算法的描述。MD5算法的运算均为基本运算,比较容易实现且速度很快。

安全散列函数(SHA)

算法
SHA是美国NIST和NSA共同设计的安全散列算法(Secure Hash Algorithm),用于数字签名标准DSS(Digital Signature Standard)。SHA的修改版SHA–1于1995年作为美国联邦信息处理标准公告(FIPS PUB 180–1)发布[2]。

㈩ 小菜求学 PID

- sptr->Integral * sptr->LastError //E[k-1]项

+ sptr->Derivative * sptr->PrevError; //E[k-2]项

//存储误差,用于下次计算

sptr->PrevError = sptr->LastError;

sptr->LastError = iError;

//返回增量值

return(iIncpid);

}

====================================================================================================

自动控制算法的学习笔记 (PID控制)待续
2009-04-28 11:13

最近被逼无奈要搞ROBOCUP的路径规划,在控制上遇到这个经典的算法,故总结了书上以及网上的资料......

1. PID调试步骤

没有一种控制算法比PID调节规律更有效、更方便的了。现在一些时髦点的调节器基本源自PID。甚至可以这样说:PID调节器是其它控制调节算法的基础。

为什么PID应用如此广泛、又长久不衰?

因为PID解决了自动控制理论所要解决的最基本问题,既系统的稳定性、快速性和准确性。调节PID的参数,可实现在系统稳定的前提下,兼顾系统的带载能力和抗扰能力,同时,在PID调节器中引入积分项,系统增加了一个零积点,使之成为一阶或一阶以上的系统,这样系统阶跃响应的稳态误差就为零。

由于自动控制系统被控对象的千差万别,PID的参数也必须随之变化,以满足系统的性能要求。这就给使用者带来相当的麻烦,特别是对初学者。下面简单介绍一下调试PID参数的一般步骤:

1.负反馈

自动控制理论也被称为负反馈控制理论。首先检查系统接线,确定系统的反馈为负反馈。例如电机调速系统,输入信号为正,要求电机正转时,反馈信号也为正(PID算法时,误差=输入-反馈),同时电机转速越高,反馈信号越大。其余系统同此方法。

2.PID调试一般原则

a.在输出不振荡时,增大比例增益P。

b.在输出不振荡时,减小积分时间常数Ti。

c.在输出不振荡时,增大微分时间常数Td。

3.一般步骤

a.确定比例增益P

确定比例增益P 时,首先去掉PID的积分项和微分项,一般是令Ti=0、Td=0(具体见PID的参数设定说明),使PID为纯比例调节。输入设定为系统允许的最大值的60%~70%,由0逐渐加大比例增益P,直至系统出现振荡;再反过来,从此时的比例增益P逐渐减小,直至系统振荡消失,记录此时的比例增益P,设定PID的比例增益P为当前值的60%~70%。比例增益P调试完成。

b.确定积分时间常数Ti

比例增益P确定后,设定一个较大的积分时间常数Ti的初值,然后逐渐减小Ti,直至系统出现振荡,之后在反过来,逐渐加大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。积分时间常数Ti调试完成。

c.确定积分时间常数Td

积分时间常数Td一般不用设定,为0即可。若要设定,与确定 P和Ti的方法相同,取不振荡时的30%。

d.系统空载、带载联调,再对PID参数进行微调,直至满足要求。

2.PID控制简介

目前工业自动化水平已成为衡量各行各业现代化水平的一个重要标志。同时,控制理论的发展也经历了古典控制理论、现代控制理论和智能控制理论三个阶段。智能控制的典型实例是模糊全自动洗衣机等。自动控制系统可分为开环控制系统和闭环控制系统。一个控制系统包括控制器﹑传感器﹑变送器﹑执行机构﹑输入输出接口。控制器的输出经过输出接口﹑执行机构﹐加到被控系统上﹔控制系统的被控量﹐经过传感器﹐变送器﹐通过输入接口送到控制器。不同的控制系统﹐其传感器﹑变送器﹑执行机构是不一样的。比如压力控制系统要采用压力传感器。电加热控制系统的传感器是温度传感器。目前,PID控制及其控制器或智能PID控制器(仪表)已经很多,产品已在工程实际中得到了广泛的应用,有各种各样的PID控制器产品,各大公司均开发了具有PID参数自整定功能的智能调节器(intelligent regulator),其中PID控制器参数的自动调整是通过智能化调整或自校正、自适应算法来实现。有利用PID控制实现的压力、温度、流量、液位控制器,能实现PID控制功能的可编程控制器(PLC),还有可实现PID控制的PC系统等等。 可编程控制器(PLC) 是利用其闭环控制模块来实现PID控制,而可编程控制器(PLC)可以直接与ControlNet相连,如Rockwell的PLC-5等。还有可以实现PID控制功能的控制器,如Rockwell 的Logix产品系列,它可以直接与ControlNet相连,利用网络来实现其远程控制功能。
1、开环控制系统

开环控制系统(open-loop control system)是指被控对象的输出(被控制量)对控制器(controller)的输出没有影响。在这种控制系统中,不依赖将被控量反送回来以形成任何闭环回路。

2、闭环控制系统

闭环控制系统(closed-loop control system)的特点是系统被控对象的输出(被控制量)会反送回来影响控制器的输出,形成一个或多个闭环。闭环控制系统有正反馈和负反馈,若反馈信号与系统给定值信号相反,则称为负反馈( Negative Feedback),若极性相同,则称为正反馈,一般闭环控制系统均采用负反馈,又称负反馈控制系统。闭环控制系统的例子很多。比如人就是一个具有负反馈的闭环控制系统,眼睛便是传感器,充当反馈,人体系统能通过不断的修正最后作出各种正确的动作。如果没有眼睛,就没有了反馈回路,也就成了一个开环控制系统。另例,当一台真正的全自动洗衣机具有能连续检查衣物是否洗净,并在洗净之后能自动切断电源,它就是一个闭环控制系统。

3、阶跃响应

阶跃响应是指将一个阶跃输入(step function)加到系统上时,系统的输出。稳态误差是指系统的响应进入稳态后﹐系统的期望输出与实际输出之差。控制系统的性能可以用稳、准、快三个字来描述。稳是指系统的稳定性(stability),一个系统要能正常工作,首先必须是稳定的,从阶跃响应上看应该是收敛的﹔准是指控制系统的准确性、控制精度,通常用稳态误差来(Steady-state error)描述,它表示系统输出稳态值与期望值之差﹔快是指控制系统响应的快速性,通常用上升时间来定量描述。

4、PID控制的原理和特点

在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。PID控制器问世至今已有近70年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。即当我们不完全了解一个系统和被控对象﹐或不能通过有效的测量手段来获得系统参数时,最适合用PID控制技术。PID控制,实际中也有PI和PD控制。PID控制器就是根据系统的误差,利用比例、积分、微分计算出控制量进行控制的。

比例(P)控制

比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。 比例调节作用:是按比例反应系统的偏差,系统一旦出现了偏差,比例调节立即产生调节作用用以减少偏差。比例作用大,可以加快调节,减少误差,但是过大的比例,使系统的稳定性下降,甚至造成系统的不稳定。

积分(I)控制

在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(System with Steady-state Error)。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。积分调节作用:是使系统消除稳态误差,提高无差度。因为有误差,积分调节就进行,直至无差,积分调节停止,积分调节输出一常值。积分作用的强弱取决与积分时间常数Ti,Ti越小,积分作用就越强。反之Ti大则积分作用弱,加入积分调节可使系统稳定性下降,动态响应变慢。积分作用常与另两种调节规律结合,组成PI调节器或PID调节器。

微分(D)控制

在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。 自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳。其原因是由于存在有较大惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差的作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入“比例”项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势,这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例+微分(PD)控制器能改善系统在调节过程中的动态特性。微分调节作用:微分作用反映系统偏差信号的变化率,具有预见性,能预见偏差变化的趋势,因此能产生超前的控制作用,在偏差还没有形成之前,已被微分调节作用消除。因此,可以改善系统的动态性能。在微分时间选择合适情况下,可以减少超调,减少调节时间。微分作用对噪声干扰有放大作用,因此过强的加微分调节,对系统抗干扰不利。此外,微分反应的是变化率,而当输入没有变化时,微分作用输出为零。微分作用不能单独使用,需要与另外两种调节规律相结合,组成PD或PID控制器。

5、PID控制器的参数整定

PID控制器的参数整定是控制系统设计的核心内容。它是根据被控过程的特性确定PID控制器的比例系数、积分时间和微分时间的大小。PID控制器参数整定的方法很多,概括起来有两大类:一是理论计算整定法。它主要是依据系统的数学模型,经过理论计算确定控制器参数。这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改。二是工程整定方法,它主要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。PID控制器参数的工程整定方法,主要有临界比例法、反应曲线法和衰减法。三种方法各有其特点,其共同点都是通过试验,然后按照工程经验公式对控制器参数进行整定。但无论采用哪一种方法所得到的控制器参数,都需要在实际运行中进行最后调整与完善。现在一般采用的是临界比例法。利用该方法进行 PID控制器参数的整定步骤如下:(1)首先预选择一个足够短的采样周期让系统工作﹔(2)仅加入比例控制环节,直到系统对输入的阶跃响应出现临界振荡,记下这时的比例放大系数和临界振荡周期﹔(3)在一定的控制度下通过公式计算得到PID控制器的参数。

3.PID控制器参数的工程整定,各种调节系统中PID参数经验数据以下可参照:

温度T: P=20~60%,T=180~600s,D=3-180s
压力P: P=30~70%,T=24~180s,
液位L: P=20~80%,T=60~300s,
流量L: P=40~100%,T=6~60s。

4. PID常用口诀:

参数整定找最佳,从小到大顺序查
先是比例后积分,最后再把微分加
曲线振荡很频繁,比例度盘要放大
曲线漂浮绕大湾,比例度盘往小扳
曲线偏离回复慢,积分时间往下降
曲线波动周期长,积分时间再加长
曲线振荡频率快,先把微分降下来
动差大来波动慢。微分时间应加长
理想曲线两个波,前高后低4比1
一看二调多分析,调节质量不会低

====================================================================================================

很多兄弟姐妹来问关于PID控制器的情况,偶就结合自己的理解,尽可能浅显的讲述一下PID控制的概念和如何设计一个简单的PID控制器的设计。其目的就是有兴趣朋友们可以跟这个设计一个简单的PID控制器
所谓的控制首先分有反馈控制和无反馈控制,我们当然讨论的PID当然是有反馈控制了。所谓的有反馈控制无非是要根据被控量的情况参与运算来决定操纵量的大小或者方向,那么到底如何根据被控两来决定操纵量的大小呢,唉,这就有很多分类了,所谓的高级的控制方式也就是“高级”在这个节骨眼上,有什么“自适应控制、模糊控制、预测控制、神经网络控制、专家智能控制”等等(至于到底这些控制方式有什么优点,唉,我只用过PID,别的也说不清楚,去抄书的话也没有说服力,关键是也懒的去抄。那位老弟如果要作论文,可以在这里发挥一下,资料到处都是)。但是就目前而言,在工业控制领域尤其是控制系统的底层,PID控制算法仍然独霸鳌头,占领着80%左右的市场份额,当然,这里所说的PID控制算法不是侠义上的固定PID,现在不是讲究多学科融合吗?人们在PID控制规律中吸取了其他“高级”的控制规律的优点,出现了诸多的新颖的控制器如自校正PID、专家自适应PID、预估PID、模糊PID、神经网络PID、非线性 PID等新型PID控制器。至于所谓的变种的PID算法如什么“遇限削弱微分”微分先行,积分分离“bangbang+PID”等等,已经不算是什么高级的控制方式了作控制器的厂商大多都会或多等等或少的采取一些,至于是神经网络PID,模糊PID,自适应PID是如何实现的,我所知道的就是利用对应的控制算法,适时的调节PID的参数。还是举个例子吧。传统PID的算法公式是:
⊿U(n)=Kp[e(n)-e(n-1)]+Kie(n)+Kd[e(n)-2e(n-1)+e(n-2)]
U(n)=⊿U(n)+U(n-1)
e(n) ,e(n-1), e(n-2)就是历史上的三个设定值跟过程值之间的偏差了。
这是一个增量式的PID算式(如果有谁不明白什么式增量是算式,呵呵,可能以后会提到,偶的写作水平有限,不会组织内容,再说我是想到哪,写道哪,呵呵,见凉)。
所谓的新型PID控制器,就是根据e(n)的不同,利用那些先进的控制规律来适当的调整Kp,Ki,Ke。至于怎么调整,呵呵,这就太罗嗦了,也不是这篇内容所该介绍的,(关键是我也不太清楚,呵呵,见笑),需要这些功能的大侠应该是我的前辈,还请指教哟。
好了,现在正式介绍一下所谓的PID各个参数吧。
所谓的PID大家在大学期间都应该学过,就是比例(P)、积分(I)、微分(D)。
比例控制:就是对偏差进行控制,偏差一旦产生,控制器立即就发生作用即调节控制输出,使被控量朝着减小偏差的方向变化,偏差减小的速度取决于比例系数Kp, Kp越大偏差减小的越快,但是很容易引起振荡,尤其是在迟滞环节比较大的情况下,Kp减小,发生振荡的可能性减小但是调节速度变慢。但单纯的比例控制存在静差不能消除的缺点。这里就需要积分控制。
积分控制:实质上就是对偏差累积进行控制,直至偏差为零。积分控制作用始终施加指向给定值的作用力,有利于消除静差,其效果不仅与偏差大小有关,而且还与偏差持续的时间有关。简单来说就是把偏差积累起来,一起算总帐。
微分控制:它能敏感出误差的变化趋势,可在误差信号出现之前就起到修正误差的作用,有利于提高输出响应的快速性,减小被控量的超调和增加系统的稳定性。但微分作用很容易放大高频噪声,降低系统的信噪比,从而使系统抑制干扰的能力下降。因此,在实际应用中,应慎用微分控制,尤其是当你开始作实验时,不防将微分控制项去掉,看看行不行,呵呵,不行啊?还是看看别的地方吧,肯定行的。
行了,这三个参数说明白了,再来说说怎么确定这几个参数的数值吧。这几个参数的确定比较先进的方式是自整定,但是如果是开始涉及这部分还是先不要讲了,按照经验值吧。估计大家用来控制温度比较多。大家按照这个规律来选吧。
Kp=100/P
Ki= kp*T/I
Kd= kp*D/T
分别介绍一下各个参数的意义:
T:计算周期,就是各多少时间计算一次
⊿U(n)=Kp[e(n)-e(n-1)]+Kie(n)+Kd[e(n)-2e(n-1)+e(n-2)],单位是秒。一般1秒或者0.5秒甚至5秒都行。
P:比例带
I:积分时间
D:微分时间
P、I、D跟kp,ki,kd有什么关系呢?
Kp=100/P,
Ki=kp*T/I
Kd=kp*D/T
然后就可以计算
⊿U(n)=Kp[e(n)-e(n-1)]+Kie(n)+Kd[e(n)-2e(n-1)+e(n-2)]
算出来⊿U(n)之后再怎么办呢?怎么把这一个数据跟控制输出联系在一起呢?说道这里我们先说说PID控制方式大体都有那些?
其一为线形连续PID输出,也就是说,PID运算的结果以模拟电压,电流或者可控硅导通角的形式按比例输出。
其二为时间-比例PID输出,也就是说,事先定一个时间长度,T1,然后PID运算的结果就在控制周期内以ON-OFF的形式输出出来,比如你控制一个炉子的温度,用电热丝来加热,就可以控制电热丝的一个控制周期内通电占整个控制周期的比例来实现,电路上可以用继电器或者过零触发的方式来切断或者接通电热丝供电。
起三为位置比例PID,PID运算的结果主要是对应于调节阀的阀门开度。

再回到前面,我们以第二种控制方式为例,计算出⊿U(n)后,一般首先将其归一化,也就是说除以你所要控制的温度的量程。
⊿U(n)0_1=⊿U(n)/(hh-ll)
而时间比例PID输出对应的是“位置式PID运算”的结果
所以呢,我们要讲结果累积起来,
U(n)0_1+=⊿U(n)0_1
然后将次结果换算成对应于控制周期的占空比。来输出

===========================================================================================

PID控制的原理和特点

阅读全文

与Pc28稳定算法相关的资料

热点内容
喷油螺杆制冷压缩机 浏览:579
python员工信息登记表 浏览:377
高中美术pdf 浏览:161
java实现排列 浏览:513
javavector的用法 浏览:982
osi实现加密的三层 浏览:233
大众宝来原厂中控如何安装app 浏览:916
linux内核根文件系统 浏览:243
3d的命令面板不见了 浏览:526
武汉理工大学服务器ip地址 浏览:149
亚马逊云服务器登录 浏览:525
安卓手机如何进行文件处理 浏览:71
mysql执行系统命令 浏览:930
php支持curlhttps 浏览:143
新预算法责任 浏览:444
服务器如何处理5万人同时在线 浏览:251
哈夫曼编码数据压缩 浏览:426
锁定服务器是什么意思 浏览:385
场景检测算法 浏览:617
解压手机软件触屏 浏览:350