程序代写代做代考 Java 作业

作业

1.

抽象类Expression(表达式)既可以表达算术运算,⼜又可以表达逻辑运算,但两种运算不不能
混合。Expression还有两个抽象⼦子类BinOp(⼆二元运算)和UnOp(⼀一元运算)。还有另⼀一
个⾮非抽象⼦子类Const(常量量)可以表达Integer和Boolean。Expression要有两个抽象⽅方法
evaluate()和toString()。

算术运算处理理的都是Integer,⽽而逻辑运算处理理的都是Boolean。因为Expression这两类都可
以处理理,所以请声明类型参数。然后给这四个类都添⼊入构造函数。

为BinOp(⼆二元运算)加上6个⼦子类,四个算术运算:+,-,*,/,和两个逻辑运算:∧ 与,
∨ 或。

为UnOp(⼀一元运算)加上两个⼦子类,⼀一个算术运算:-(既是⼆二元运算⼜又是⼀一元运算),和⼀一
个逻辑运算:¬ 否。尽可能让这8个⼦子类的构造函数简单。

evaluate()的⼯工作就是运算输⼊入的表达式然后输出结果。

如:(new MulOp(new Const(3), new AddOp(new
Const(1), new Const(2)))).evaluate()

输出的结果应该是9

(new AndOp(new Const(true),new OrOp(new 

Const(false), new Const(true)))).evaluate() 

输出的结果则是true

toString()的⼯工作是将算术表达式都正确地print出来

如:(new MulOp(new Const(3), new AddOp(new
Const(1), new Const(2)))).toString()

结果是3*(1+2)

在⼀一个新的ATest类中的main中⽤用三个包含⾄至少5个Expression的object的表达式测试
evaluate和toString

结束时应有的⽂文件:Expression.java, Const.java, BinOp.java, UnOp.java, AddOp.java,
MulOp.java, DivOp.java, SubOp.java, AndOp.java, NegOp.java, OrOp.java, ATest.java

2.

现在要加⼊入新的三个类:ZAGTOp 为>,ZALTOp为<,ZAEQOp为==。请注意这三个类返 回的值和给予的参数Integer不不是⼀一个类型,⽽而不不像另外的运算,参数和返回值的类型都⼀一 样。 在⼀一个新的ZATest类中的main中⽤用三个包含⾄至少5个Expression的object(有新编写的三个 类)的表达式测试evaluate和toString。 如:(new ZAEQOp(new ZAMulOp(new ZAConst(3), new
ZAAddOp(new ZAConst(1), new ZAConst(2))), new
ZAConst(9)).evaluate()

结果是true

在除了了ATest的其他⽂文件前加上前缀ZA,并改得适应新的三个类。

结束时应有的⽂文件:ZAExpression.java, ZAConst.java, ZABinOp.java, ZAUnOp.java,
ZAAddOp.java, ZAMulOp.java, ZADivOp.java, ZASubOp.java, ZAAndOp.java,
ZANegOp.java, ZAOrOp.java, ZAGTOp.java, ZALTOp.java, ZAEQOp.java, ZATest.java

3.

PageRank 佩奇排名

我们想要计算在LinkedDocumentCollection⾥里里每⼀一个LinkedDocument的PageRank

在LinkedDocumentCollection⾥里里编写public double[] pageRankRec(double d)⽅方法。

d为阻尼系数,我们⼀一般代⼊入0.85。

此⽅方法将呼出递归⽅方法public double pageRankRec(int[][] C, int i, double d, int recDepth)

i表示的是当前所在计算的LinkedDocument的Index,d为阻尼系数,recDepth为当前递归的
深度。

矩阵C表示了了在这个LinkedDocumentCollection⾥里里的所有LinkedDocument的关系。

如:我们有abcd四个LinkedDocument,他们的link在下⼀一⾏行行列列出。

那么矩阵C应为左图所示。

⼀一列列⼀一列列地阅读C:A列列:A到B有
link,那C2,1记为1。A到C有link,
C3,1记为1。LinkedDocument不不指向
⾃自身,A到D也没有link,所以C1,1和
C4,1都记为0。以此类推。

注:若A没有任何指向其他⻚页⾯面的
link,那就相当于A指向所有除了了⾃自⼰己
本身的⻚页⾯面!

PageRank的公式如上图所示。n为LinkedDocumentCollection⾥里里LinkedDocument数量量,Li
是所有指向Index为i的LinkedDocument的其他LinkedDocument的集合。PR最开始的时候
是1/n。如上例例的ABCD,他们初始的PR都为0.25。

这个递归⽅方法将⼀一直持续到当前计算出的PR和上⼀一次的PR差值⼩小于10的-6次⽅方。

注:此⽅方法的运⾏行行时间不不能超过⼀一分钟!

结束时应有的⽂文件:Author.java, Date.java, DocumentCollectionCell.java,
DocumentCollection.java, Document.java, LinkedDocumentCollection.java,
LinkedDocument.java, Review.java, WordCount.java, WordCountsArray.java

4.

在LinkedDocumentCollection⾥里里的LinkedDocument都有similarity。⽽而上题我们⼜又计算出了了
⼀一个LinkedDocument的PageRank。我们要⽤用这两个数值来计算⼀一个LinkedDocument在这
个LinkedDocumentCollection的Relevance⼤大⼩小。

在LinkedDocumentCollection类中编写⽅方法

private double[] sortByRelevance(double dampingFactor, double weightingFactor) 

dampingFactor就是上题的d阻尼系数。weightingFactor g我们⼀一般取0.6来计算。

公式:relevance=g*similarity+(1-g)*pageRank

这个⽅方法将计算出在这个LinkedDocumentCollection⾥里里每个LinkedDocument的relevance,
按照递减的顺序排列列LinkedDocument(List顺序),并将他们的relevance以⼀一个array的形
式返回。

更更改类TestIt⾥里里query的调⽤用,让它使⽤用sortByRelevance⽅方法。

结束时应有的⽂文件:Author.java, Date.java, DocumentCollectionCell.java,
DocumentCollection.java, Document.java, LinkedDocumentCollection.java,
LinkedDocument.java, Review.java, WordCount.java, WordCountsArray.java

5.

在类TestIt⾥里里⽤用附件⾥里里的⽂文件acde来测试之前写的⽅方法。

TestIt中加⼊入新的代码:若输⼊入pageRank,将print出当前LinkedDocumentCollection中所有
LinkedDocument的pageRank

依次输⼊入add b.txt:link a.txt
link:e.txt

crawl

pageRank

query einmal

exit

来和左图进⾏行行结果的⽐比较

6.

写⼀一个新的类RecursiveDeterminant。我们⽤用它来通过递归的⽅方式算⾏行行列列式

⽅方法:public static int det2x2(int[][] matrix) 可以计算2×2矩阵的⾏行行列列式

⽅方法:public static int det3x3(int[][] matrix) 可以计算3×3矩阵的⾏行行列列式

这⾥里里需调⽤用两个新⽅方法

public static int[][] removeRow(int[][] matrix, int rowIndex)

public static int[][] removeColumn(int[][] matrix, int colIndex)

这两个⽅方法可以将⼀一个NxN的矩阵缩⼩小为(N-1)x(N-1)⼤大⼩小的矩阵

⽅方法:public static int detNxN(int[][] matrix)可以计算NxN矩阵的⾏行行列列式

此⽅方法必须通过递归⽅方式实现。它不不停地调⽤用本身计算(N-1)x(N-1)⼤大⼩小矩阵的⾏行行列列式

请在main中测试你所写的⽅方法