背包问题实验报告

背包问题实验报告
背包问题实验报告

0-1背包问题实验报告

一:0-1背包问题

给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为c。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大?

在选择装入背包的物品时,对每种物品i只有两种选择,装入或者不装入背包。不能将物品i多次装入,也不能装入部分的物品i。因此,该问题被称为0-1背包问题。

本次针对0-1背包问题的实验,主要使用动态规划的方法、贪心算法、回溯法以及分支限界法。

测试用例为:

n=50,

c=1000,

每个物品重量为

{220,208,198,192,180,180,165,162,160,158,155,130,125,122,120,118,115,110,105,1 01,100,100,98,96,95,90,88,82,80,77,75,73,70,69,66,65,63,60,58,56,50,30,20,15,10,8,5 ,3,1,1}

每个物品价值为

{80,82,85,70,72,70,66,50,55,25,50,55,40,48,50,32,22,60,30,32,40,38,35,32,25,28 ,30,22,50,30,45,30,60,50,20,65,20,25,30,10,20,25,15,10,10,10,4,4,2,1} 下面将分别谈论。

二:动态规划法

1:基本思想:

动态规划算法的基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。其经过分解得到的子问题往往不是相互独立的,可以用一张表来记录所有已解决的子问题的答案,而不论该子问题以后是否会用到。从而使得子问题避免重复计算。

2:设计步骤:

动态规划算法适用于解最优化问题,通常可按以下几步设计:

(1)找出最优解的特性,并刻画其结构特征。

(2)递归地定义最优值。

(3)以自底向上的方式计算出最优值。

(4)根据计算最优值时得到的信息,构造最优解。

步骤(1)~(3)是动态规划算法的基本步骤。在只需要求出最优值的情形,步骤(4)可以省去。若需要求出问题的最优解,则必须执行步骤(4)。

3:动态规划算法在0-1背包问题中的应用分析

0-1背包问题是一个特殊的整数规划问题。其最优子结构性质具有下述性质:当从最优解中剔除掉一个物品的时候,相应的背包剪掉这个物品的重量的剩余容量构成次级0-1背包子问题,此时在最优解中剩余下的物品应该为这个次级0-1背包问题的最优解。可以递归的定义这一子结构。

可以使用二维矩阵来存储计算子结构背包的最优值。程序单列。

实验结果为:3090。

4:算法分析

使用动态规划算法,需要O(nc)的计算时间,时间复杂度与物品数量和背包容量成比例。大量使用的二维矩阵,也使得整个程序的空间规模较大。在能够较为准确的得到解的同时,该算法存在着到背包容量很大,算法需要的计算时间较多的问题。

三:贪心算法

1:算法思路:

贪心算法在解决问题的时候,总是做出当前看来是最好的选择,并不从整体上最优加以考虑。在做出局部意义上的最优选择之后,我们能得到一个近似的最优解,即使它不一定是最优的,但在要求不那么精确地情况下,往往能较为便捷地得到结果。

2:基本要素:

可以用贪心算法求解的问题一般具备两个重要的性质:

(1)贪心选择性质:所求问题的整体最优解可以通过一系列局部最优的选择来达到。

(2)最优子结构性质:一个问题的最优解包含着其子问题的最优解。

3:算法设计:

在解0-1背包问题的过程中,借鉴了贪心算法解背包问题的过程。

(1)计算每种物品单位重量的价值Vi/Wi;

(2)依贪心选择策略,按照物品性价比的高低依次将物品装入背包。

(3)当剩余背包容量不足以装入尚未装入的最高性价比的物品,则选择次优物品。

直到背包无法再装为止。

实验结果为:3087。

4:算法分析:

使用贪心算法,时间复杂度为O(n*logn)。优于动态规划算法,空间占有也较动态规划少。其缺点在于最终解并不是最优解。

四:回溯法

1:基本思想:

首先明确问题的解空间,可以用一定的方法组织起来,使得回溯法能够方便地搜索整个解空间。例如是一颗解空间树。从根节点出发,以深度优先方式搜索解空间。这个开始的节点成为活结点,同时也成为当前的扩展节点。从当前节点,搜索向纵深方向移至一个新节点。是新节点成为活结点和可扩展节点。如果当前的扩展节点不能再向纵深方向移动,则当前扩展节点成为死结点。此时,往回移动到最近的活结点,使之成为扩展节点。直到整个解空间无活结点。找出解空间中满足约束条件的所有解。比较得出最优。

可以使用剪枝函数使得不符合要求的子树被减去。

2:算法设计:

(1)以物品单位性价比排序,构建状态树

(2)从根节点开始,进入左子树,搜索子空间树,计算当前价值;

(3)计算右子树上界,当右子树有可能包含最优解时,进入右子树,搜索子空间;

否则剪去右子树

(4)重复(2)(3),直到整个解空间搜索完毕。

实验结果:3090。

3:算法分析:

回溯法在最坏的情况下有O(2^n)个右儿子节点需要计算上界,计算上界的时间为O (n),所以回溯法时间复杂度为O(n*2^n)。需要栈来存储中间值,故空间复杂度大。其优点在于适应性好,大多数问题都能使用这种方法。但是随着问题规模的扩大,也会使得问题

处理起来的时间花销增大,故而构建良好的剪枝函数成为回溯法的关键所在。

五:分支限界法

1:基本思想:

类似于回溯法,也是基于解空间树的方法。求解目标为找出满足约束条件的一个解,记在某种意义下的最优。以广度优先或以最小耗费优先的方式搜索解空间。在扩展节点处,先生成其所有儿子的分支,再从当前活结点表中选择下一个扩展节点。为了有效地选择,在每一活结点处,计算一个函数值,据此从当前活节点表中选出最有利的节点作为扩展节点,使搜索向解空间树上有最优解的分支推进。

2:算法设计:

(1)各物品按性价比有大到小排序,构建解空间树;

(2)由根节点出发,检查当前左儿子结点的可行性,如果可行,将它加入到子集树和活动队列中;

(3)仅当右儿子结点满足上界约束,才将它加入子集树和活结点优先序列。

(4)重复(2)(3)至整个解空间结束。

实验结果:3087。

3:算法分析:

分支限界法运用优先队列扩展了活结点的运行空间。使得算法在广域中可以较为快捷的剪掉冗余枝。整个解空间较之于回溯法是快速聚类的,故其时间复杂度较回溯法优,但在空间上却需要相当一部分的处理能力。对于离散的最优化方法较为适宜,这是分支法好处,却也是其局限所在。

背包问题解法

使用穷举法解决0—1背包问题 问题描述:有不同价值、不同重量的物品n件,求从这n件物品中选取一部分物品的选择方案,使选中物品的总重量不超过指定的限制重量,但选中物品的价值之和最大。 设n个物品的重量和价值分别存储于数组w[ ]和v[ ]中,限制重量为tw.考虑一个n元组(x0,x1,…,xn-1),其中xi=0 表示第i个物品没有选取,而xi=1则表示第i个物品被选取。用枚举法解决背包问题,需要枚举所有的选取方案,而根据上述方法,我们只要枚举所有的n元组,就可以得到问题的解。 显然,每个分量取值为0或1的n元组的个数共为2n个。而每个n元组其实对应了一个长度为n的二进制数,且这些二进制数的取值范围为0~2n-1.因此,如果把0~2n-1分别转化为相应的二进制数,则可以得到我们所需要的2n 个n元组。 下面是我据此思路编的一个小程序。

程序在VC6.0,win xp下编译运行成功。

程序测试结果,截图如下: 背包问题的递归算法 #include //物品总种数不是常量,没法根据它来决定数组的长度,只有先定义个长度了#define N 100 int n ; //物品总种数 double limitW ; //限制的总重量 double totV ; //全部物品的总价值 double maxv ; //解的总价值 int option[N]; //解的选择 int cop[N]; //当前解的选择 struct { //物品结构 double weight ;

double value ; }a[N]; //参数为物品i,当前选择已经达到的重量和tw,本方案可能达到的总价值void find(int i,doubletw,double tv) { int k ; //物品i包含在当前方案的可能性 if(tw+a.weight<=limitW) { cop=1 ; if(i { find(i+1,tw+a.weight,tv); } else { for(k=0;k option[k]=cop[k]; maxv=tv ; } } cop=0 ; //物品i不包含在当前方案的可能性 if(tv-a.value>maxv) {

信息安全加密实验报告

重庆交通大学实验报告 班级:计信专业2012级2班 学号: 631206060232 姓名:娄丽梅 实验项目名称:DES加解密程序设计与实现 实验项目性质:设计性(验证性) 实验所属课程:信息安全 实验室(中心):软件实验室 指导教师:米波 实验完成时间: 2014 年12月11日

一、实验目的 1、理解DES加密与解密的程序设计算法思想。 2、编写DES加密与解密程序,实现对明文的加密与解密,加深对数据加密与解密的理解,掌握DES加密算法思想,提高网络安全的编程能力。 二、实验主要内容及原理 (一)实验内容 1、掌握DES算法; 2、编写DES算法。 (二)实验原理 1、初始置换 初始置换在第一轮运算之前执行,对输入分组实施如下表所示的变换。此表应从左向右、从上向下读。在将这64位数据分为左右两部分,每部分分别为32位,将左32位留下,将右32位按照下表进行排列 2、密钥置换 一开始,由于不考虑每个字节的第8位,DES的密钥由64位减至56位。每个字节第8位可作为奇偶校验位以确保密钥不发生错误。接着,56位密钥被分成两部分,每部分28位。然后,根据轮数,这两部分分别循环左移l位或2位。在DES的每一轮中,从56位密钥选出48位子密钥(Sub Key)。 3、S盒置换 当产生了48位密钥后就可以和右边32位明文进行异或运算了,得到48位的密文。 再经过下论的S盒跌带,其功能是把6bit数据变为4bit数据,每个S盒是一个4行、16列的表。盒中的每一项都是一个4位的数。S盒的6个位输入确定了其对应的输出在哪一行哪一列。 4、P盒置换 S盒代替运算后的32位输出依照P盒进行置换。该置换把每输入位映射到输出位,任意一位不能被映射两次,也不能被略去,这个置换叫做直接置换。 5、再次异或运算 最后,将P盒置换的结果与最初的64位分组的左半部分异或,然后左、右半部分交换,接着开始另一轮。 6、当进行到16轮后,最终进行一次末置换,形成密文

文件加密与解密实验报告

HUNAN UNIVERSITY 程序设计训练——文件加密与解密 报告 学生姓名X X X 学生学号20110102308 专业班级建环308 指导老师何英 2012-07-01至 2012-07-13

一、程序设计目的和要求 (3) 二、程序设计内容 (4) 1、总体设计 (4) 1.1主控选择模块 (4) 1.2加密模块 (4) 1.3解密模块 (4) 2、流程图 (5) 三模块详细说明 (6) 四、测试数据及其结果 (7) 五、课程设计总结 (8) 六、附录 (9) 附录1:参考文献 (9) 附录2:程序源代码 (9)

一、程序设计目的和要求 1、目的:为保证个人数据资料不被他人窃取使用,保护个人隐私及个人文件。设计一个基于c语言的文本文件加密及解密软件,可以方便对文本文件的加密与解密。本设计实现了文本文件的解密及解密,运行软件之后只需输入任意一个文本文件的文件名及后缀名即可对该文本文件进行加密或解密操作。本设计的加密与解密系统,使用了面向各类文件的方法,运用Microsoft Visual C++ 6.0实现具有加密、解密、帮助信息、读取文本文件、显示结果、退出等功能的文件加密与解密系统。 2、要求: (1)从键盘输入要进行加密的一行字符串或者需要加密的文件名。 (2)显示菜单: (3)选择菜单,进行相应的操作。加密方法是设置一加密字符串以及对文件的哪些部分进行加密;加密是将原始文件加密并保存到文件中;解密是将加了密的文件还原并保存到文件中,同时应比较与原始文件的一致性; 3、其他要求 (1)变量、函数命名符合规范。 (2)注释详细:每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释。

数据加密实验报告

实验报告 课程:计算机保密_ _ 实验名称:数据的加密与解密_ _ 院系(部):计科院_ _ 专业班级:计科11001班_ _ 学号: 201003647_ _ 实验日期: 2013-4-25_ _ 姓名: _刘雄 _ 报告日期: _2013-5-1 _ 报告评分:教师签字:

一. 实验名称 数据加密与解密 二.运行环境 Windows XP系统 IE浏览器 三.实验目的 熟悉加密解密的处理过程,了解基本的加密解密算法。尝试编制基本的加密解密程序。掌握信息认证技术。 四.实验内容及步骤 1、安装运行常用的加解密软件。 2、掌握加解密软件的实际运用。 *3、编写凯撒密码实现、维吉尼亚表加密等置换和替换加解密程序。 4、掌握信息认证的方法及完整性认证。 (1)安装运行常用的加解密软件,掌握加解密软件的实际运用 任务一:通过安装运行加密解密软件(Apocalypso.exe;RSATool.exe;SWriter.exe等(参见:实验一指导))的实际运用,了解并掌握对称密码体系DES、IDEA、AES等算法,及非对称密码体制RSA等算法实施加密加密的原理及技术。 ?DES:加密解密是一种分组加密算法,输入的明文为64位,密钥为56位,生成的密文为64位。 ?BlowFish:算法用来加密64Bit长度的字符串或文件和文件夹加密软件。 ?Gost(Gosudarstvennyi Standard):算法是一种由前苏联设计的类似DES算法的分组密码算法。它是一个64位分组及256位密钥的采用32轮简单迭代型加密算法. ?IDEA:国际数据加密算法:使用128 位密钥提供非常强的安全性; ?Rijndael:是带有可变块长和可变密钥长度的迭代块密码(AES 算法)。块长和密钥长度可以分别指定成128、192 或256 位。 ?MISTY1:它用128位密钥对64位数据进行不确定轮回的加密。文档分为两部分:密钥产生部分和数据随机化部分。 ?Twofish:同Blowfish一样,Twofish使用分组加密机制。它使用任何长度为256比特的单个密钥,对如智能卡的微处理器和嵌入在硬件中运行的软件很有效。它允许使用者调节加密速度,密钥安装时间,和编码大小来平衡性能。 ?Cast-256:AES 算法的一种。 (同学们也可自己下载相应的加解密软件,应用并分析加解密过程) 任务二:下载带MD5验证码的软件(如:https://www.360docs.net/doc/924759084.html,/downloads/installer/下载(MySQL):Windows (x86, 32-bit), MSI Installer 5.6.11、1.5M;MD5码: 20f788b009a7af437ff4abce8fb3a7d1),使用MD5Verify工具对刚下载的软件生成信息摘要,并与原来的MD5码比较以确定所下载软件的完整性。或用两款不同的MD5软件对同一文件提取信息摘要,而后比较是否一致,由此可进行文件的完整性认证。

密码技术竞赛测试题

全国密码技术竞赛模拟练习题一?单项选择题(共40题,每题1分) 1 ?首次提出公钥密码体制的概念的着作是()。 A.《破译者》 B.《密码学新方向》 C.《保密系统的通信理论》 D.《学问的发展》n 2?利用椭圆曲线实现ElGamal密码体制,设椭圆曲线是Ell(l,6),生成元G=(2, 7),接收方A的私钥钥nA二7,公钥PA二(7, 2),发送方B欲发送消息Pm二(10, 9),选择随机数23,求密文Cm二()□ 「A. { (2,3), (5, 2) } 「B. { (3,2), (6, 2) } r C. { (& 3), (10, 2) } 「D. { (6,5), (2, 10) } 3.线性密码分析方法本质上是一种()的攻击方法 A.唯密文攻击 B.已知明文攻击 C.选择明文攻击 D.选择密文攻击戸

4.()算法抵抗频率分析攻击能力最强,而对已知明文攻击最弱。 厂A.仿射密码 C B.维吉利亚密码 「C.轮转密码 厂D.希尔密码 5.从事国家秘密载体制作、复制、维修、销毁,涉密信息系统集成,或者武器装备科研生产等涉及国家秘密业务的企业事业单位,应当经过保密审查,具体办法由____ 规定。() 厂A.法院 厂B.检察院 「C.密码管理机构 r D.国务院 6.下面的说法中错误的是()。 「A.传统的密钥系统的加密密钥和解密密钥相同r B.公开密钥系统的加密密钥和解密密钥不相同 C C.报文摘要适合数字签名但不适合数据加密 C D.数字签名系统一定具有数据加密功能— 7.下列()算法不具有雪崩效应。 加密

B.序列密码的生成 f C.哈希函数 r加密 使用不方便的最大问题是()。 「A.产生密钥需要强大的计算能力 C B.算法中需要大数 r C.算法中需要素数 「D.被攻击过许多次 9.可证明安全属于下列()范畴中 厂A.加密安全性 C B.解密安全性 「C.计算安全性 厂D.实际安全性 年,()发表题为《保密系统的通信理论》的文章,为密码系统建立了理论基础, 从此密码学成了一门科学。

AES加密解密实验报告

信息安全工程课程 实验报告 AES加密解密的实现 课程名称:信息安全工程 学生姓名:黄小菲 学生学号: 3112041006 专业班级:系统工程2038班 任课教师:蔡忠闽 2012年11月22日

目录 1.背景 (1) 1.1 Rijndael密码的设计标准: (1) 1.2 设计思想 (1) 2.系统设计 (2) 2.1系统主要目标 (2) 2.2功能模块与系统结构 (2) 2.2.1字节替换SubByte (2) 2.2.2行移位ShiftRow (2) 2.2.3 列混合MixColumn (3) 2.2.4 轮密钥加AddRoundKey (4) 2.2.5 逆字节替换 (4) 2.2.6逆行移位InvShiftRow (4) 2.2.7 逆列混淆 (4) 3 加密模式 (5) 3.1 电子密码本ECB模式 (5) 3.2加密块链模式CBC模式 (6) 4 系统功能程序设计 (8) 4.1基本加密部分 (8) 4.1.1字节替换 (8) 4.1.2行移位 (8) 4.1.3列混合 (9) 4.1.4轮密钥加 (9) 4.1.5密钥扩展 (10) 4.1.6逆字节替换 (11) 4.1.7逆行移位 (11) 4.1.8逆列混合 (12) 4.1.9加密 (12) 4.1.10解密 (13) 5 实验结果 (14) 5.1 需要加密文件 (14) 5.2 实验加密解密结果 (15) 6 参考资料 (16)

1.背景 AES,密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。AES 有一个固定的128位的块大小和128,192或256位大小的密钥大小。Rijndael算法汇聚了安全性、效率高、易实现性和灵活性等优点,是一种较DES更好的算法。 该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael之命名之,投稿高级加密标准的甄选流程。(Rijdael的发音近于"Rhine doll"。)AES在软体及硬件上都能快速地加解密,相对来说较易于实作,且只需要很少的记忆体。作为一个新的加密标准,目前正被部署应用到更广大的范围. 1.1 Rijndael密码的设计标准: ①抵抗所有已知的攻击。 ②在多个平台上速度快,编码紧凑。 ③设计简单。 当前的大多数分组密码,其轮函数是Feistel结构。 Rijndael没有这种结构。 Rijndael轮函数是由3个不同的可逆均匀变换 1.2 设计思想 ?分组和密钥长度可变,各自可独立指定为128、192、256比特。 ?状态 ?算法中间的结果也需要分组,称之为状态,状态可以用以字节为元素的矩阵 阵列表示,该阵列有4行,列数N b为分组长度除32 ?种子密钥 ?以字节为元素的矩阵阵列描述,阵列为4行,列数N k为密钥长度除32

《算法设计与分析》实验指导

《算法分析与设计》实验指导.

实验一锦标赛问题 [实验目的] 1.基本掌握分治算法的原理. 2.能用程序设计语言求解锦标赛等问题的算法; [预习要求] 1.认真阅读数据结构教材和算法设计教材,了解分治算法原理; 2.设计用分治算法求解背包问题的数据结构与程序代码. [实验题] 【问题描述】设有n=2k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次; (2)每个选手一天只能参赛一次; (3)循环赛在n-1天内结束。 请按此要求将比赛日程表设计成有n行和n-1列的一个表。在表中的第i行,第j列处填入第i个选手在第j天所遇到的选手。其中1≤i≤n,1≤j≤n-1。 [实验提示] 我们可以按分治策略将所有的选手分为两半,则n个选手的比赛日程表可以通过n/2个选手的比赛日程表来决定。递归地用这种一分为二的策略对选手进行划分,直到只剩下两个选手时,比赛日程表的制定就变得很简单。这时只要让这两个选手进行比赛就可以了。 1 2 3 4 5 6 7 1 (1)(2)(3) 图1 2个、4个和8个选手的比赛日程表 图1所列出的正方形表(3)是8个选手的比赛日程表。其中左上角与左下角的两小块分别为选手1至选手4和选手5至选手8前3天的比赛日程。据此,将左上角小块中的所有数字按其相对位置抄到右下角,又将左下角小块中的所有数字按其相对位置抄到右上角,这

样我们就分别安排好了选手1至选手4和选手5至选手8在后4天的比赛日程。依此思想容易将这个比赛日程表推广到具有任意多个选手的情形。 [实验步骤] 1.设计并实现算法并准备测试用例,修改并调试程序,直至正确为止; 2.应用设计的算法和程序求锦标赛问题; 3.去掉测试程序,将你的程序整理成功能模块存盘备用. [实验报告要求] 1.阐述实验目的和实验内容; 2.阐述分治算法原理; 3.提交实验程序的功能模块; 4.记录最终测试数据和测试结果。 [思考与练习] 【金块问题】老板有一袋金块(共n块,n是2的幂(n>=2)),将有两名最优秀的雇员每人得到其中的一块,排名第一的得到最重的那块,排名第二的雇员得到袋子中最轻的金块。假设有一台比较重量的仪器,请用最少的比较次数找出最重和最轻的金块。

发送数字签名和加密邮件-实验报告

一、实验目的 ●了解什么是数字签名与加密 ●掌握用Outlook Express发送签名的方法 ●掌握用Outlook Express 发送加密的方法。 二、实验环境 ●实验室所有机器安装了Windows 操作系统,并附带Outlook Express。 三、实验容和步骤 1、设置Outlook Express收发QQ (1)打开OUTLOOK EXSPRESS方法为开始/所有程序/OUTLOOK EXPRESS; (2)申请方法:OUTLOOK EXSPRESS的工具//添加//输入显示名/输入你的QQ地址/设置电子服务器名pop.qq. smtp.qq./输入电子的名称和密码/下一步/完成 2、申请免费数字证书

查看证书: 3、在 Outlook Express 设置数字证书 (1)在 Outlook Express 中,单击“工具”菜单中的“”(2)选取“”选项卡中用于发送安全的,然后单击“属性”。

(3)选取安全选项卡中的签名标识复选框,然后单击选择按健 (4)在弹出的“选择默认数字标识”窗口中,选择要使用的数字证书,就选择你刚才申请的个人电子保护证书 (5)点击“确定”按钮,完成证书设置。至此,你可以发送带数字签名的。 4、发送签名 发送时从“工具”菜单中选择“签名”,收件人地址栏后面出现“签名”标志。

本次实验我给为 qq. 发送一个签名。 发送成功: 5、发送加密 发送加密前必须正确安装了对方的“电子保护证书”,只要请对方用他的“电子保护证书”给你发送一个签名,证书会自动安装,并与对方Email地址绑定,否则就要手工安装对方“电子保护证书”。(1)从Outlook Express“工具”菜单中选择“选项”。 (2)鼠标单击“数字标识”按钮。

回溯法实验(0-1背包问题)

算法分析与设计实验报告第五次附加实验

附录: 完整代码(回溯法) //0-1背包问题回溯法求解 #include using namespace std; template class Knap //Knap类记录解空间树的结点信息 { template friend Typep Knapsack(Typep [],Typew [],Typew,int); private: Typep Bound(int i); //计算上界的函数 void Backtrack(int i); //回溯求最优解函数

Typew c; //背包容量 int n; //物品数 Typew *w; //物品重量数组| Typep *p; //物品价值数组 Typew cw; //当前重量 Typep cp; //当前价值 Typep bestp; //当前最后价值 }; template Typep Knapsack(Typep p[],Typew w[],Typew c,int n); //声明背包问题求解函数template inline void Swap(Type &a,Type &b); //声明交换函数 template void BubbleSort(Type a[],int n); //声明冒泡排序函数 int main() { int n ;//物品数 int c ;//背包容量 cout<<"物品个数为:"; cin>>n; cout<<"背包容量为:"; cin>>c; int *p = new int[n];//物品价值下标从1开始 int *w = new int[n];//物品重量下标从1开始 cout<<"物品重量分别为:"<>w[i]; } cout<<"物品价值分别为:"<>p[i]; } cout<<"物品重量和价值分别为:"<

DES加密算法实验报告

苏州科技学院 实验报告 学生姓名:杨刘涛学号:1220126117 指导教师:陶滔 刘学书1220126114 实验地点:计算机学院大楼东309 实验时间:2015-04-20 一、实验室名称:软件实验室 二、实验项目名称:DES加解密算法实现 三、实验学时:4学时 四、实验原理: DES算法由加密、子密钥和解密的生成三部分组成。现将DES算法介绍如下。1.加密 DES算法处理的数据对象是一组64比特的明文串。设该明文串为m=m1m2…m64 (mi=0或1)。明文串经过64比特的密钥K来加密,最后生成长度为64比特的密文E。其加密过程图示如下:

图2-1:DES算法加密过程 对DES算法加密过程图示的说明如下: 待加密的64比特明文串m,经过IP置换(初始置换)后,得到的比特串的下标列表如下: 表2-1:得到的比特串的下标列表

该比特串被分为32位的L0和32位的R0两部分。R0子密钥K1(子密钥的生成将在后面讲)经过变换f(R0,K1)(f变换将在下面讲)输出32位的比特串 f1,f1与L0做不进位的二进制加法运算。运算规则为: f1与L0做不进位的二进制加法运算后的结果赋给R1,R0则原封不动的赋给L1。L1与R0又做与以上完全相同的运算,生成L2,R2……一共经过16次运算。最后生成R16和L16。其中R16为L15与f(R15,K16)做不进位二进制加法运算的结果,L16是R15的直接赋值。 R16与L16合并成64位的比特串。值得注意的是R16一定要排在L16前面。R16与L16合并后成的比特串,经过置换IP-1(终结置换)后所得比特串的下标列表如下: 表2-2:置换后所得比特串的下标列表 经过置换IP-1后生成的比特串就是密文e。 变换f(Ri-1,Ki): 它的功能是将32比特的输入再转化为32比特的输出。其过程如图2-2所示:

加密技术及密码破解实验报告

第九章、实验报告 实验一、设置Windows启动密码 一、实验目的:利用Windows启动密码保存重要文件。 二、实验步骤: 1、在Windows XP系统中选择开始——运行,在打开输入框中“syskey.exe”,点击确定,打开“保证Windows XP账户数据库的安全”对话框。 2、单击【更新】,打开【启动密码】对话框,然后输入密码,在【确认】文本框中再次输入密码,单击【确定】

实验二、为word文档加密解密 一、实验目的:保护数据的安全 二、实验步骤: 1、打开一个需要加密的文档,选择【工具】——【选项】——【安全性】然后输入想要设置打开文件时所需的密码 2、单击【高级(A)】打开加密类型对话框,选中【加密文档属性】复选框,单击【确定】。

3、打开文件的【确认密码】对话框,输入打开文件时需要的密码,单击【确定】,随即打开【确认密码】对话框,输入密码。 4、保存文件后,重新打开Word文档,打开【密码】,输入打开文件所需的密码,单击【确定】输入修改的密码,单击【确定】 破解word密码 (1)安装Advanced Office Password Recovery软件,安装完成后打开需要破解的word 文档,进行暴力破解,结果如图所示: 实验三、使用WinRAR加密解密文件

一.实验目的:加密文件,保证文件的安全性。 二.实验步骤: 1、在需要加密的文件夹上右击,选中【添加到压缩文件】打开【压缩文件名和参数】 2、选中【压缩文件格式】组合框中的【RAR】并在【压缩选项】中选中【压缩后删除源文件】然后切换到【高级】,输入密码,确认密码。 3、关闭对话框,单击确定,压缩完成后,双击压缩文件,系统打开【输入密码对话框】 破解WinRAR加密的文件 (1)安装Advanced RAR Password Recovery软件,打开WinRAR加密文件,进行暴力破解,获得密码。结果如图:

信息学奥赛注意事项

潍坊信息学竞赛注意事项 一、复赛内容与要求: 在初赛的内容上增加以下内容: A.数据结构: 1.指针类型 2.多维数组 3.单链表及循环链表 4.二叉树 5.文件操作(从文本文件中读入数据,并输出到文本文件中) B.程序设计 1.算法的实现能力 2.程序调试基本能力 3.设计测试数据的基本能力 4.程序的时间复杂度和空间复杂度的估计 C.算法处理 1.离散数学知识的应用(如排列组合、简单图论、数理逻辑) 2.分治思想 3.模拟法 4.贪心法 5.简单搜索算法(深度优先广度优先)搜索中的剪枝 6.动态规划的思想及基本算法 二:注意事项 1. 务必看清题目,严格按照所要求的格式输入、输出。 2. 在调试程序时请先使用题目中的示例数据,然后再自行设计多组测试数据进行调试。特别注意最大值与最小值(极值)。 3. 测试有严格的时间限制,请尽可能优化算法。 4. 命名规则:各题都规定了该题的英文名称。要求提交程序的文件名一律采用小写。程序文件和数据文件的主文件名都是该题的英文名字。程序文件扩展名采用语言环境的默认扩展名。数据文件都是文本文件,输入数据文件和输出数据文件的扩展名分别是.in和.out。 5. 程序应从输入文件中读取数据,然后把结果严格地按照规定的输出格式输出到输出文件中。 6. 考试题目在考试微机的D:/盘下“prlblem”文件夹中,考试结束请将程序放到以“你的考号+姓名”(中间无空格)命名的文件夹中,并将此文件夹放到D:/盘下“test”文件夹中,考试结束后此文件夹要处于打开状态方可离开考场。

选手请认真核对提交的源程序的文件名,写错的文件名的题得0分。 如何骗分: 对于一个约定无解输出-1的题目,骗分者只写一行代码就可以把无解的部分分数拿到,有时把示例输出也可能拿到10分。这只是万不得已的情况。最好是依靠实力拿分。 空间复杂度不能超过内存限制,一般情况下数组不宜开的过大。如果开一个10数组将会出现内存不足的情况,这时就要设计一个优秀的算法来优化空间性能只找出实际有用的信息。

AES加密算法实验报告

实验报告 学号:姓名:专业:班级:第10周

简介 #in elude vstri ng> #in elude class pla in text { public : plai ntext(); static void createplaintext( unsigned char a[]); 实验内容(算法、 程 序、 步骤 和方 法)

static void SubBytes( unsigned char p[16]); static void inSubBytes( unsigned char p[16]); static void ShiftRows( unsigned char e[]); static void inShiftRows( unsigned char e[]); static void MatrixToByte( unsigned char e[]); static void inMatrixToByte( unsigned char e[]); static unsigned char FFmul( unsigned char a, unsigned char b); static void KeyAdding( unsigned char state[16], unsigned char k[][4]); static void KeyExpansion( unsigned char* key, unsigned char w[][4][4]); ~plai ntext(); private : }; #in elude "" using namespacestd; static unsigned char sBox[] = {}; /定义加密S盒/ unsigned char insBox[256] ={}; //定义解密S盒 pla in text ::plai ntext() { unsigned int p[16]; for (int j = 0; j<200; j++) { p[i] = a[i]; a[i] = a[i + 16]; } void pla in text ::createpla in text( un sig ned char a[]) // 仓U建明文 int i = 0; if ( a[j] == 0) for (; i<16; i++)

实验二(贪心算法)

华东师范大学计算机科学技术系上机实践报告 课程名称:算法设计与分析年级:05上机实践成绩: 指导教师:柳银萍姓名:张翡翡 上机实践名称:贪心算法学号:10052130119上机实践日期:2007-4-10 上机实践编号:NO.2组号:上机实践时间:10:00-11:30 一、目的 了解熟悉掌握贪心算法实质并学会灵活运用,从而解决生活中一些实际问题。 二、内容与设计思想 1.超市的自动柜员机(POS)要找给顾客各种数值的现金,表面上看,这是一个很简单的任务,但交给机器办就不简单了。你作为一个计算机专家,要求写一个程序来对付这个“简单”的问题。 你的自动柜员机有以下的币种:100元,50元,20元,10元,5元,2元,1元。你可以假设每种钱币的数量是无限的。现在有一笔交易,需要找个客户m元,请你设计一个算法,使得找给顾客的钱币张数最少。 要求: 输入:第一行仅有一个整数n(0

古典加密实验报告

古典密码算法 一、实验目的 学习常见的古典密码学算法,通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。 二、实验要求 分析替代密码算法和置换密码算法的功能需求,详细设计实现替代密码算法和置换密码算法的数据结构和流程,给出测试用例和测试步骤,得出测试和结论。替代密码算法和置换密码算法的实现程序必须提供加密和解密两个接口:int encrypt()和int decrypt()。当加密或者解密成功时返回CRYPT_OK,失败时返回CRYPT_ERROR。 三、实验原理 古典密码算法曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。下面介绍两种算法:替代密码和置换密码。 1.替代密码的原理是使用替代法进行加密,就是将明文由其它的字母、数字或符合所代替后形成密文。这里每个明文字母对应的密文字母可能是一个,也可能是多个。接收者对密文进行逆向替换即可得到明文。 2.置换密码算法的原理是不改变明文字符,而是按照某一规则重新排列消息中的比特或字符顺序,才而实现明文信息的加密。置换密码有时又称为换位密码。 我实验过程中替代密码是单表替换,用字母的下一个字母代替:for(j = 0; j < i; j++)

{ if(96 < Mingwen[j]&&Mingwen[j] < 123) { Miwen[j] = 'a' + (Mingwen[j] - 'a' + 1) % 26; } else { Miwen[j] = 'A' + (Mingwen[j] - 'A' + 1) % 26; } } 置换加密主要是对密钥进行整理,还有就是动态分配二维数组,将明文和密文填充置的过程,换密码关键代码如下: for(a = 0; a < k; a++) { for(b = 0; b < hang; b++) { Miwen[i] = p[b][ord[j]]; i++; } j++; } for(a = 0; a < 26; a++) { for(b = 0; b < k; b++) { if(key1[b] == alphatable[a]) { ord[b] = ind++; } } } 具体加密见下图:

DES加密与解密C实现+实验报告

DES加密与解密算法 课程名称:工程实践 学生姓名: xxxx 学生学号: xxxx 专业班级: xxxx 任课教师: xxxx 论文提交日期: xxxx

DES加密与解密算法 摘要 本世纪五十年代以来,密码学研究领域出现了最具代表性的两大成就。其中之一就是1971年美国学者塔奇曼(Tuchman)和麦耶(Meyer)根据信息论创始人香农(Shannon)提出的“多重加密有效性理论”创立的,后于1977年由美国国家标准局颁布的数据加密标准。 DES密码实际上是Lucifer密码的进一步发展。它是一种采用传统加密方法的区组密码。它的算法是对称的,既可用于加密又可用于解密。 1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES枣Data Encryption Standard)。 目前在这里,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。 关键词:DES算法,加密,解密

Abstract This century since fifty time, cryptography research field is the most representative of the two Achievement. One was the 1971 USA scholar Tuchman (Tuchman) and Meyer (Meyer) based on information theory founder Shannon (Shannon) proposed "multiple encryption effectiveness theory" was founded, in 1977 after the National Bureau of standards promulgated by the America data encryption standard.The DES password is actually a further development of the Lucifer password. It is a traditional encryption method of block cipher. The algorithm is symmetric, which can be used for encryption and decryption can be used. In 1977 January, the government promulgated American: adopted IBM design as a non official data confidential data encryption standard (DES - Data Encryption Standard). At present here, along with three gold project especially golden card project startup, DES algorithm in POS, ATM, magnetic card and intelligent card (IC card), gas station, highway toll station and other fields are widely used, so as to realize the security of key data encryption transmission, such as credit card holders PIN, IC card and POS mutual authentication, financial transaction data package of MAC check and so on, are used in DES algorithm. Keywords: DES algorithm, encryption, decryption

背包问题

课程设计报告 课程名称数据结构课程设计 课题名称背包问题 专业信息与计算科学 班级1001班 学号22 姓名王锐 指导教师刘洞波张晓清郭芳 2012年6月9日

课程设计任务书 课程名称数据结构课程设计课题背包问题 专业班级信科1001班 学生姓名王锐 学号22 指导老师刘洞波张晓清郭芳 审批刘洞波张晓清郭芳 任务书下达日期:2012年6月9日 任务完成日期:2012年6月16日

一、设计内容与设计要求 1.设计内容: 1)问题描述 假设有一个能装入总体积为T的背包和n件体积分别为W1,W2,···,Wn的物品,能否从n件物品中挑选若干件恰好装满背包,即使W1+W2+···+Wn=T,要求找出所有满足 上述条件的解。例如:当T=10,共6件物品,物品的体积为{1,2,3,4,5,8},那么 可找到下列4组解:(1,2,3,4)、(1,4,5)、(2,3,5)、(2、8)。 2)实现提示 可利用回溯法的设计思想来解决背包问题。首先,将物品排成一列,然后顺序选取物品装入背包,假设已选取了前i件物品之后背包还没有装满,则继续选取第i+1件物品, 若该件物品“太大”不能装入,则丢弃而继续选取下一件,直至背包装满为止。但如果在 剩余的物品中找不到合适的物品以填满背包,则说明“刚刚”装入背包的那件物品“不合 适”,应将它取出“丢弃一边”,继续再从“它之后”的物品中选取,如此重复,直至求得 满足条件的解,或者无解。 由于回溯求解的规则是“后进先出”,因此要用到栈。 2.设计要求: 课程设计报告规范 1)需求分析 a.程序的功能。 b.输入输出的要求。 2)概要设计 a.程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能。 b.课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构, 它们之间有什么关系等。 3)详细设计 a.采用C语言定义相关的数据类型。 b.写出各模块的类C码算法。 c.画出各函数的调用关系图、主要函数的流程图。

数据结构课程设计实验大题

《数据结构》课程设计 课程名称:数据结构 完成时间:3周学分: 1 一、课程设计的目的与任务 课程设计是学生对课程所学知识的综合运用,它与课堂听讲、上机实验、课外练习、自学研究相辅相成,构成一个完整的课程教学体系。《数据结构》是一门实践性强的课程,其中对算法设计和程序编写的掌握尤为重要。学生虽然可以通过与课堂教学同步的上机实验完成相关内容的练习,但却往往局限于一些功能简单、彼此之间关系独立的算法和程序。课程设计是一种综合训练,致力于培养学生全面、灵活的算法设计思想和较高的编程能力,为今后从事计算机开发与应用打下基础。新世纪需要具有丰富科学知识、独立解决实际问题、有创造能力的新型人才,这也是该课程设计的最终目的。 二、本课程设计的基本理论 《数据结构》课程设计中牵涉到本课程中的六个主要章节的基本理论,包括基本数据结构(线性结构(线性表、栈、队列)、图、树)的特点、存储方式、运算原理和方法、典型应用和两种重要操作查找、排序的基本原理与方法。 三、课程设计的基本要求 基本要求:通过这次设计,要求在分析计算机处理对象的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面加深对课程基本内容的理解。要求每个学生在规定的时间内完成一组中2个应用问题,并根据所选问题分析设计思路、选择数据结构描述、确立算法过程、用一种计算机语言(例如C++、Java)(最好是C++)编写出详细的实现程序,然后通过上机反复调试与修改,直到获得满意的结果为止。对于要解决的同一问题,由于所采用的数据结构可能不同、所选择的算法可能不同、编写的程序也不仅相同,但只要结果正确且有效(具有较好的时间复杂度和空间复杂度)即可,即不要求编写的算法和程序完全一致,但力求编写的算法和程序更优秀、综合指标更好。 注意:杜绝抄袭,一经查证一律0分 四、课程设计的内容 1. 文本处理 【问题描述】打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘 【基本要求】 (1)完成上述功能,数据结构不限 (2)尽量高效

加密解密程序实验报告

程序设计实践 加密解密程序实验报告 课题概述 1.1课题目标和主要内容: 利用MFC类或者win32编写windows程序,实现加密解密的功能。 1.2系统的主要功能: 1.实现用户界面友好的操作。 2.具有对称编码体制,可以实现: i.凯撒密码:能够自定义密钥,自由输入明文,进行加密、解密,在对话框中返回加密和 解密后的内容。

ii.置换密码:能够自定义密钥,自由输入明文,经矩阵变换进行加密、解密,在对话框中返回加密和解密后的内容 iii.对称加密DES:用MFC调用WIN32编写的程序,在用户友好界面操作的同时显示程序加密,解密结果。 3.具有非对称编码体制: i. RSA加密解密:随机产生p,q,经检验是否互质,若不互质接着产生两个随机数,直 到二者互质为止。自动生成p,q,N及加密解密的密钥,可以自由输入明文,返回加密、 解密的内容。 ii. MD5消息摘要计算:用MFC调用WIN32编写的程序,在用户友好界面操作的同时显示程序的加密结果。 4.信息隐藏技术: 用LSB在图片(bmp格式,任意位置的图片)中写入信息,读取信息并显示出来,可 以擦除信息。可以自定义密钥。 5. AES加密解密:用MFC调用WIN32编写的程序,在用户友好界面操作的同时显示程序 加密,解密结果。 6. 以上的所有对文字加密解密的方法(除LSB以外其余所有方法),都可以用于文件加 密,解密,并能够及时保存加密,解密的信息到一个TXT文档,可以存在用户想存放 的地方。 7.更多: 链接了一个可加密解密,功能更为齐全的网站,若是上述方法不能满足用户需求, 可以在程序运行的窗口中点击相应按钮,在联网的条件下进行在线加密解密。 一、系统设计 2.1系统总体框架: 2.2主要的层次逻辑为:

相关文档
最新文档