java javajava ! ISortedMap方法的树图实现

ISortedMap方法的树图实现

wx:help-assignment
code price 300RMB

源代码包含dsa.impl包中基于AVL树(在名为AVLTreeMap.java的文件中)和SplayTree(称为SplayTreeMap.java)的映射的框架实现。本节中的所有工作都必须在该类中,并且必须使用提供的接口。
这些类都扩展了使用二进制搜索树实现的排序映射。您的任务是使用包含相关AVL和张开树操作(检查平衡、三节点重构、张开)的适当实现替换以下方法。
正如你在《数据结构与算法1》中所学到的,地图是ADT包含键/值对(称为“条目”)。键用于唯一地标识值。默认情况下,射中的条目没有特定的顺序。提供了ISortedMap<K,V>接口(其中K是键的泛型类型)V是值的泛型类型)并包含以下方法:
·公共V put(K键,V值)-向映射添加一个新的键/值对。如果此键已经包含在映射中,则返回与之关联的旧值,并将新值存储在映射中。否则返回空值。
publicvget(kkey)-获取与给定密钥相关联的值,如果该密钥不包含在映射中,则为null。
·公共V移除(K键)-从地图中移除带有给定键的条目。如果该键包含在映射中,则返回与该键关联的值,否则返回null。
如果你愿意,你可以创建其他的方法来帮助你完成这个任务(例如:restructure(…),rightRotate(.),leftRotate(…),splay()等)。
些提示和技巧
·记住你的AVLTreeMap和Play Tree Map扩展了几个其他的类,所以你可以使用它们的一些有用的方法(例如expandExternal(),remove(_))。
expandExternal()方法使用newPosition(…)来创建所有的位置对象,因此对于AVL树,树中的所有位置都将是AVLPosition实例(以便存储高度)。在PlayTree Map中,树中的所有位置都是BTPosition实例。
您可以使用与前面工作表中相同的方式将IPosition转换为AVLPosition或BTPosition。
请记住,每个父母/孩子的关系都是双向的。每次更改其中一个引用时,必须同时更改这两个引用。
在讲座中,我们讨论了附加子树。但是当我们对此进行编程时,我们注意到子树结构根本没有改变。我们只需要把子树的根放在正确的位置。
AVLPosition对象具有高度属性。当树发生变化时,您将需要有效地计算树中位置的高度。

测试实现
您还必须编写一些代码来检查您的实现是否正确。好的方法是使用你的实现来执行一些操作,然后检查结果是否正确。最好是用程序来完成,而不是每次都手动操作。
dsa.example包中的AVL Tree Structure Test类给出了一个示例。这将在AVL树图上执行一些操作(仅插入)。为了检查最终的AVL树是否正确,它将其与具有最终预期形状的二叉搜索树进行比较(我手动完成了这一过程)。
AVL tree Speed Test类中显示了另一个示例。它在AVL树图上执行几个操作,并测量它的运行速度。这是测试实现效率的好方法。
强制性测试:调整AVLTreeStructureTest,以便在运行时调用所有键操作(即,有不同类型的三节点重构,在根节点和树中更深处的重构将以不同的方式进行)。
创建一个类似的Play Tree structureTest,对PlayTree Map实现执行相同的操作。
其他测试:
为您的实现创建一些测试类(称为Test1,测试2等)。在你的测试中,你应该测试所有你已经实现的方法的行为是否在不同的环境下正确工作(例如,插入一个新的关键字的新条目,替换一个现有关键字的值,等等)。
每个测试类必须有一个评论,解释测试的目的和结果是什么。

介绍

这个作业的目的是让你体验使用AVL树和Splay树来实现不同类型的数据结构(一种被称为树映射的排序映射)。这也是一个很好的练习,可以获得Java中泛型、继承和对象引用是如何工作的经验。
必须从其开始的源代码已经发布到Brightspace的Assignment1-Source.zip文件中。它还包含了提供的类和接口的Javadoc(在doc文件夹中)。以通常的方式将该项目导入到Intellij中。
您必须使用所提供的接口和数据结构实现。不要使用内置JavaCollectionsFramework中的任何接口或实现。

任务

本作业的主要任务是:
根据提供的接口和基类,使用AVLTree存储条目,创建排序映射的高效实现。
根据提供的接口和基类,使用扩展树来存储条目,创建排序映射的有效实现。
制定一个策略来测试你的实现是否正确
每次树变化时计算所有位置的高度最多为0(n)。当调用insert(…)或remove(_)操作时,一个有效的实现在最坏的情况下是0(h)。
提供了TreePrinter类,因此您可以打印树的内容并查看它包含了什么内容。
使用任何类型的二叉搜索树(通常称为“树映射”)实现的映射可以说是一种排序映射,其中所有条目都可以根据其键的自然顺序来访问。
例如,考虑存储在映射中的以下键/值条目:{“zh”,“chinese”},{“ga”,“lrish”},(“de”,“German"),{“en”,“English”)
当选代这些键时,顺序是(即按字母顺序):
“de”,“en”, “ga”,"zh"当选代这些值时,顺序是(即按键的顺序).
.*德语”、“英语”、“爱尔兰语”、“中文当选代这些条目时,顺序是相同的,即:
德文,德文,英文,爱尔兰文,中文(zh,中文)
这是因为树存储使用键来决定存储条目的位置,所以对树的inorder遍历按键顺序生成条目

wx:help-assignment

code price 300RMB

code price 300RMB在这里插入图片描述

code price 300RMB

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值