Programming Assignment 7 Solution

$40.00 $34.00

0. Create package prog07 and add Heap.java. 1. In Heap, go over all the methods up to and including offer. Make sure you understand them. Implement poll(). It uses ITERATION. For the final loop, what’s the condition on the while? The item at index is greater than one of its children. How do you say…

5/5 – (2 votes)

You’ll get a: zip file solution

 

Description

5/5 – (2 votes)

0. Create package prog07 and add Heap.java.

1. In Heap, go over all the methods up to and including offer. Make

sure you understand them. Implement poll(). It uses ITERATION.

For the final loop, what’s the condition on the while?

The item at index is greater than one of its children.

How do you say this in Java:

(The item at) index is greater than its left child or

index is greater than its right child

More specifically

index has a left child and is greater than that child

or

index has a right child and is greater than that child

Once you have this condition, then you need to do the inside of the loop:

swap index with the smaller child

More specifically

if right child is less than left child

then swap index with right

else swap index with left

Can you get the logic right? Remember, the parent might not HAVE a

right child. Who wins then? Make sure the if condition handles this case.

DUE Wednesday March 6 at 11am

8. Copy your WordStep.java from prog06 to prog07 and change the

package of the copy to prog07 at the top.

9. Add code to solve so it displays a message about how many times it

polls the queue. (Poll is expensive because you have the check the

entire dictionary for neighbors.) You should get 481 for “snow” to

“rain”.

10. Add a method

static int numSteps (int[] parents, int index)

that takes the parents array and an index as input and returns the

number of steps back to the start word index (which will have -1).

For example, if parents is

[0[ [1] [2] [3] [4] [5] [6] [7]

-1 -1 1 2 1 4 5 4

then numSteps(parents, 6) returns 3 because

parents[6] == 5

parents[5] == 4

parents[4] == 1

parents[1] == -1

so it takes 3 steps, 5, 4, 1, to get to a -1.

Add a message to solve that tells you how far the target is from

the start (when you have found the path).

11. Add a static method numDifferent that tells you the number of

letters that are different in two words. For example,

numDifferent(“snow”, “slot”) == 2

Test it.

12. Add a class IndexComparator (INSIDE the WordStep class!) that

implements Comparator<Integer>.

a. Its constructor IndexComparator(parents, target) should take

the parents array and the target word as arguments and store

them inside IndexComparator.

b. The method sumNums(index) returns the number of steps from

the index to the start index PLUS the number of differences

between the word at that index and the target word.

c. The method compare(index1, index2) (required by the Comparator

interface) should return < 0 if sumNums(index1) is smaller than

sumNums(index2), = 0 if they have the same value, and > 0

otherwise.

13. In solve, switch to using a PriorityQueue<Node> using

IndexComparator for the Queue. How many words does it dequeue

now? (Should be 117.)

14. Now switch to using your Heap using your Comparator. It should

run the same. Switch back to PriorityQueue for the next part.

13. Unfortunately, you will also notice that the solution for “snow”

to “rain” is LONGER than before. Here is how to fix this.

a. Implement the remove method in Heap.

b. When WordStep solve dequeues the current word index and looks

at all elements of the dictionary for neighbors, instead of

just words with parents[index] == -1, it it should also

consider words that have

numSteps(parents, currentIndex) + 1 < numSteps(parents, index)

If parents[index] != -1, it should remove it from the queue

before adding it to the queue. (Yes, REMOVE IT and then add it

as usual.)

solve() should now find the same length solution for snow to rain

but dequeue far fewer words than the prog06 solve(). (Should be 74.)

Switch back to Heap and make sure it still works right.

IN LAB on Wednesday March 6:

BST.java will be another implementation of a Java Map. The Node class

has data, left, and right. In a binary search tree, left is less and

right is greater.

The toString method prints tree sideways. You have to turn your head

to the left to get the traditional view. So for instance, when it

prints

n 4

l 2

c 5

b 0

a 3

it is really the tree

b

0

a l

3 2

c n

5 4

14. Download BST.java. Implement the private find method using the

notes. Methods in BST should use RECURSION not iteration.

15. Implement the private add method using the notes. Remember that

you need to say Node<K,V> instead of Node so it works generically.

Make sure you understand what every line does. The TA can do some

examples on the board. Now, implement the public put method using

add. What do you do with the value add returns?

Test the program. The output should be as in tree-output.txt, only

the removes won’t happen.

16. Delete the first two lines from the public remove method.

Implement the private remove method based on the notes. It will

call removeRoot.

17. Implement removeRoot. It will call getMinimum and removeMinimum.

The node returned by getMinimum becomes the root.

18. Implement getMinimum and removeMinimum.

Programming Assignment 7 Solution
$40.00 $34.00