操作数

算法第三章上机实践报告,编辑距离问题

偶尔善良 提交于 2019-12-01 17:29:32
实践报告任选一题进行分析。内容包括: 实践题目 问题描述 算法描述 算法时间及空间复杂度分析(要有分析过程) 心得体会(对本次实践收获及疑惑进行总结) 1.实践题目 7-3 编辑距离问题 (30 分) 2.问题描述 设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。 将字符串A变换为字符串B所用的最少字符操作数称为字符串A到 B的编辑距离,记为d(A,B)。 对于给定的字符串A和字符串B,计算其编辑距离 d(A,B)。 输入格式: 第一行是字符串A,文件的第二行是字符串B。 提示:字符串长度不超过2000个字符。 输出格式: 输出编辑距离d(A,B) 输入样例: 在这里给出一组输入。例如: fxpimu xwrs 输出样例: 在这里给出相应的输出。例如: 5 3.算法描述 这道题是类似于最长子串匹配的题目,不过要更深入一些,首先令m[a][b]为 字符串s1下标从0到a-1组成的字符串 与 字符串从s2下标0到b-1组成的字符串的最优编辑距离,接着用动态规划的思想分析m[a][b]与它的子问题是什么关系。通过分析,我们能分析出m[a][b]的表达式: 当s1[a-1] = s2[b-1] 当字符串s1[a-1]和s2[b-1]相等时,则不用对末位s1[a-1]和s2

Golang fmt Printf 格式化参数手册/详解/说明

本秂侑毒 提交于 2019-12-01 16:44:37
fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf. 格式“占位符”衍生自C,但比C更简单。 fmt 包的官方文档对Printing和Scanning有很详细的说明。这里就直接引用文档进行说明,同时附上额外的说明或例子,之后再介绍具体的函数使用。 以下例子中用到的类型或变量定义: type Website struct { Name string } // 定义结构体变量 var site = Website{Name:"studygolang"} 1.1. Printing 1.1.1. 占位符 普通占位符 占位符 说明 举例 输出 %v 相应值的默认格式。 Printf("%v", site),Printf("%+v", site) {studygolang},{Name:studygolang} 在打印结构体时,“加号”标记(%+v)会添加字段名 %#v 相应值的Go语法表示 Printf("#v", site) main.Website{Name:"studygolang"} %T 相应值的类型的Go语法表示 Printf("%T", site) main.Website %% 字面上的百分号,并非值的占位符 Printf("%%") % 布尔占位符 占位符 说明 举例 输出 %t 单词 true 或 false。 Printf("%t", true

谈JVM,字节码

不想你离开。 提交于 2019-12-01 16:10:36
谈谈JVM,最近在研究破解jar,有这方面经验的麻烦指导一下思路.. 参考 参考1 指令整理 常用指令 123 反编译查看`类文件`所有信息javap -verbose [class] 局部变量类型 特殊字符表示 类型 描述 c char char类型 i int int类型 l long long类型 s short short类型 b byte byte类型 f float float类型 z boolean 布尔类型 a reference 引用 方法信息 12345 L1 LOCALVARIABLE this LMain; L0 L1 0 LOCALVARIABLE a I L0 L1 1 MAXSTACK = 0 MAXLOCALS = 2 局部变量参数 LOCALVARIABLE 局部表大小 MAXLOCALS 操作数栈大小 MAXSTACK 指令 运算指令 算术指令用于对两个 操作数栈 上的值进行某种特定运算,并把结果重新存入到 操作栈 顶。 加法指令:iadd,ladd,fadd,dadd 减法指令:isub,lsub,fsub,dsub 乘法指令:imul,lmul,fmul,dmul 除法指令:idiv,ldiv,fdiv,ddiv 求余指令:irem,lrem,frem,drem 取反指令:ineg,leng,fneg,dneg 位移指令:ishl,ishr

结对编程(java实现)

寵の児 提交于 2019-12-01 14:18:56
1、GitHub地址: https://github.com/zhongxiao136/Myapp 队友:蔡莤玲 Github地址: https://github.com/caiyouling/Myapp 2.PSP表格 PSP Personal Software Process Stages 预计耗时(分钟) 实际耗时(分钟) Planning 计划 40 30 .Estimate .估计这个任务需要多少时间 40 30 Development 开发 1320 1330 .Analysis .需求分析 100 120 .Design Spec .生成设计文档 40 30 .Design Review .设计复审 15 20 .Coding Standard .代码规范 15 20 .Design .具体设计 90 100 .Coding .具体编码 850 950 .Code Review .代码复审 90 90 .Test .测试(自我测试,修改代码,提交修改) 120 130 Reporting 报告 180 160 .Test Report .测试报告 90 80 .Size Measurement .计算工作量 30 40 .Postmortem&Process Improvement Plan .事后总结,并提出过程改进计划 60 40 合计 1540 1520

结队编程--java实现

北城余情 提交于 2019-12-01 14:13:50
1、GitHub地址: https://github.com/caiyouling/Myapp 队友:钟小敏 GitHub地址: https://github.com/zhongxiao136/Myapp 2.PSP表格 PSP Personal Software Process Stages 预计耗时(分钟) 实际耗时(分钟) Planning 计划 40 30 .Estimate .估计这个任务需要多少时间 40 30 Development 开发 1320 1330 .Analysis .需求分析 100 120 .Design Spec .生成设计文档 40 30 .Design Review .设计复审 15 20 .Coding Standard .代码规范 15 20 .Design .具体设计 90 100 .Coding .具体编码 850 950 .Code Review .代码复审 90 90 .Test .测试(自我测试,修改代码,提交修改) 120 130 Reporting 报告 180 160 .Test Report .测试报告 90 80 .Size Measurement .计算工作量 30 40 .Postmortem&Process Improvement Plan .事后总结,并提出过程改进计划 60 40 合计 1540 1520

【数据结构】栈

删除回忆录丶 提交于 2019-12-01 13:24:48
关于栈,可以理解成一个操作受限的线性表,只允许在一端插入和删除数据。 事实上,从功能上来说,数组或者链表确实可以替代栈,但是从某种情况下,数组和链表暴露了更多的操作接口,使用时更容易出错。所以,当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出,先进后出的特性,就可以使用栈这种数据结构。 其中,用数组实现的栈叫做顺序栈,用链表实现的栈,叫做链式栈。不管是顺序栈和链式栈,入栈和出栈的空间复杂度均为o(1)。 栈在函数调用中的应用: 操作系统为每个线程分配了一块独立的内存空间,这块内存被组织成栈这种结构,用来存储函数调用的临时变量。每进入一个函数,就会将临时变量作为一个栈入帧,当被调用函数执行完成,返回以后,将这个函数对应的栈帧出栈。 栈在表达式求值中的应用: 如进行四则运算的时候,编译器时通过俩个栈来实现的。其中一个保持操作数的栈,另一个保存运算符的栈。我们从左向右遍历表达式,当遇上数字,我们就之家压入操作栈,如果遇上运算符,那就与运算符栈的栈顶元素进行比较。 如果比运算符栈顶的元素的优先级搞,就将当前运算符压入栈,如果低或者相同,从运算符栈中取栈顶运算符,从操作数栈的栈顶取2个操作数,然后进行计算,再把计算完的结果压入操作数栈,继续比较。 同理,如果出现了括号,那就再加一括号栈,当扫描到左括号时,将其压入栈中,当扫描到右括号时,从栈顶取出一个左括号,按 (),[],{}

MySql运算符

蓝咒 提交于 2019-12-01 11:31:33
MySql运算符 MySQL 数据库中的表结构确立后,表中的数据代表的意义就已经确定。而通过 MySQL 运算符进行运算,就可以获取到表结构以外的另一种数据。 1) 算术运算符 执行算术运算,例如:加、减、乘、除等。 2) 比较运算符 包括大于、小于、等于或者不等于,等等。主要用于数值的比较、字符串的匹配等方面。例如:LIKE、IN、BETWEEN AND 和 IS NULL 等都是比较运算符,还包括正则表达式的 REGEXP 也是比较运算符。 3) 逻辑运算符 包括与、或、非和异或等逻辑运算符。其返回值为布尔型,真值(1 或 true)和假值(0 或 false)。 4) 位运算符 包括按位与、按位或、按位取反、按位异或、按位左移和按位右移等位运算符。位运算必须先将数据转换为二进制,然后在二进制格式下进行操作,运算完成后,将二进制的值转换为原来的类型,返回给用户。 算术运算符 算术运算符 说明 + 加法运算 - 减法运算 * 乘法运算 / 除法运算,返回商 % 求余运算,返回余数 比较运算符 比较运算符 说明 = 等于 < 小于 <= 小于等于 > 大于 >= 大于等于 <=> 安全的等于,不会返回 UNKNOWN <> 或!= 不等于 IS NULL 或 ISNULL 判断一个值是否为 NULL IS NOT NULL 判断一个值是否不为 NULL LEAST

AT3575 101 to 010(DP)

折月煮酒 提交于 2019-12-01 11:25:48
满分做法: 这道题蛮难想的, \(dp[i]\) 表示到i位置的最大操作数, \(11111101\) 和 \(1011111\) 这两种情况我们可求出它的最大操作数为长度 \(-2\) ,并发现整个序列的操作数可以拆分成几个小序列的最大操作做次数之和。 所以我们要记录 \(l[i]\) 表示左边离 \(i\) 最近的 \(0\) 的位置,并得出转移: \(dp[i]=max(dp[i],dp[l[i-2]]+i-l[i-2]-2)\) , \(dp[i]=max(dp[i],dp[l[i-2]+1]+i-l[i-2]-1-2)\) ( \(s[i-1]=='0'&&s[i-2]=='1'\) )。为什么会是两个呢? 因为这个序列可能长这样: \(111111011111101\) ,这样对于第一个转移来说第二个明显更优,而对于 \(001111101\) 这样的序列,第一个更优. \(dp[i]=max(dp[i],dp[l[i]-2]+i-l[i]+2-2)\) ( \(l[i]>1&&s[l[i]-1]=='1'\) ),剩下的直接赋值即可。 #include<cstring> #include<algorithm> #include<cmath> #include<iostream> #include<cstdio> using namespace std; typedef

Java的运算符

▼魔方 西西 提交于 2019-12-01 09:59:41
运算符分类   运算符指明对操作数的运算方式.组成表达式的java操作符有很多种..运算符按照其要求的操作数数目来分,可以有单目运算符、双目运算符和三目运算符,他们分别对应1个、2个、3个操作数。运算符按其功能来分,有算术运算符、赋值运算符,关系运算符,逻辑运算符,位运算符和其他运算符    操作数数目来分      单目运算符       ~(按位取反)、!(取非)、-(负号运算符)、++(自增)、--(自减)         列如 1 ~5 //按位取反 2 3 -6 boolean flg=true; 4 5 !flg //取非false 6 7 -5 //负号运算符-5 8 9 int a=5; 10 11 //这里一定要注意自增++的位置很重要,++在前是先计算后应用,++在后是先应用后计算 12 13 a++; //5 14 15 ++a;//6 16 17 //这里一定要注意自减--的位置很重要,--在前是先计算后应用,--在后是先应用后计算 18 19 a--; //5 20 21 --a; //4      双目运算符       +、-、*、/、%(取余) 1 6+5; //+运算符11 2 6-5; //-运算符1 3 6*5; //*运算符30 4 6/5; ///运算符1 这里注意两个整型相除是会舍去小数点后面的数值 5 7.25/5; //1.45

牛客 C++刷题day42

做~自己de王妃 提交于 2019-12-01 08:48:17
1 .“优先使用对象组合,而不是继承”是面向对象设计的第二原则。 组合也叫“对象持有”,就是在类中定义另一类型的成员,继承会破坏类的独立性,增加系统的复杂性,一般系统的继承层次不超过3层。组合拥有良好的扩展性,支持动态组合,因此请优先考虑组合方法。 2 .编 译器在为类对象分配栈空间时,会先检查类的析构函数的访问性,其实不光是析构函数,只要是非静态的函数,编译器都会进行检查。如果类的析构函数是私有的,则编译器不会在栈空间上为类对象分配内存。 因此, 将析构函数设为私有,类对象就无法建立在栈(静态)上了,只能在堆上(动态new)分配类对象 。 3 .mutalbe的中文意思是“可变的,易变的”,跟constant(既 C ++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。 4.我了个大草。30也可以实数表示成30. 后面的0可以不用写,或者说小数点后的数字不写就是自动表示为整数。 5. 表达式会包含隐式类型转换,它由编译器自动执行,不需程序员介入。