Question: * CS 301 Homework Assignment 3 verison 1.0 * * Instructions: * * This class is a simple variation on the BinarySearchST class from section

* CS 301 Homework Assignment 3 verison 1.0 * * Instructions: * * This class is a simple variation on the BinarySearchST class from section 3.1 * Like the BinarySearchST, this class stores a sybmol table in ordered form in two parallel arrays * many of the basic API functions are provided for you. For example: contains, get. * put and delete rely on two functions shiftright, shiftleft that you need to complete . See the * Misc. Note below * * Your assignment is to complete the ToDo items:some are coding questions, the others require you * to construct test cases. Search for ToDo. The header comment for each ToDo contain more * specific instructions for that function * As provided, the program will run, but the most of the test cases will fail. * One exception is the rank function tests. These should all pass because a linear-time * version of the rank function is supplied. One of the ToDos is to replace the linear-time rank * function with a logarithmic time version (i.e. binary search). Since the rank function is used by other functions in the class, * if your new version of rank is incorrect, other parts of the program may break. * * Misc. Note. put *may* increase the size of the symbol table. You will need add code to record this fact * There are two 'reasonable' places to put such code; one of these places would be the put function * Likewise, delete will decrease the size of the table and you will need to add code for this as well. * One place (of the two places) to do this would be in the delete function * * Your code may have to resize the underlying arrays - a resize function has been provided for you - look through the file! * You may not modify methods in this file except as indicated. If you are unsure, ask. * You may add additional methods for modularity * You may not use other Java data structures (e.g. ArrayList, HashSet, etc)

The class:

package CSC301SP18Homework; // change the package if you want

import stdlib.StdOut;

public class SortedArrayST, Value> {

private static final int MIN_SIZE = 2;

private Key[] keys; // the keys array

private Value[] vals; // the values array

private int N = 0; // size of the symbol table,

// may be less than the size of the arrays

/**

* Constructor

*

* Initializes an empty symbol table.

*/

public SortedArrayST() {

this(MIN_SIZE);

}

/**

* Constructor

*

* Initializes an empty symbol table of given size.

*/

@SuppressWarnings("unchecked")

public SortedArrayST(int size) {

keys = (Key[])(new Comparable[size]);

vals = (Value[])(new Object[size]);

}

/**

* Constructor

*

* Initializes a symbol table with given sorted key-value pairs.

* If given keys list is not sorted in (strictly) increasing order,

* then the input is discarded and an empty symbol table is initialized.

*/

public SortedArrayST(Key[] keys, Value[] vals) {

this(keys.length < MIN_SIZE ? MIN_SIZE : keys.length);

N = (keys.length == vals.length ? keys.length : 0);

int i;

for (i = 1; i < N && keys[i].compareTo(keys[i - 1]) > 0; i++);

if (i < N) { // input is not sorted

System.err.println("SortedArrayST(Key[], Value[]) constructor error:");

System.err.println("Given keys array of size " + N + " was not sorted!");

System.err.println("Initializing an empty symbol table!");

N = 0;

} else {

for (i = 0; i < N; i++) {

this.keys[i] = keys[i];

this.vals[i] = vals[i];

}

}

}

/**

* keysArray

*

* Returns the keys array of this symbol table.

*/

public Comparable[] keysArray() {

return keys;

}

/**

* valsArray

*

* Returns the values array of this symbol table.

*/

public Object[] valsArray() {

return vals;

}

/**

* size

*

* Returns the number of keys in this symbol table.

*/

public int size() {

return N;

}

/**

* checkFor

*

* Returns whether the given key is contained in this symbol table at index r.

*/

private boolean checkFor(Key key, int r) {

return (r >= 0 && r < N && key.equals(keys[r]));

}

/**

* get

*

* Returns the value associated with the given key in this symbol table.

*/

public Value get(Key key) {

int r = rank(key);

if (checkFor(key, r)) return vals[r];

else return null;

}

/**

* put

*

* Inserts the specified key-value pair into the symbol table, overwriting the old

* value with the new value if the symbol table already contains the specified key.

* Deletes the specified key (and its associated value) from this symbol table

* if the specified value is null.

*/

public void put(Key key, Value val) {

int r = rank(key);

if (!checkFor(key, r)) {

shiftRight(r); // make space for new key/value pair

keys[r] = key; // put the new key in the table

}

vals[r] = val; // ?

}

/**

* delete

*

* Removes the specified key and its associated value from this symbol table

* (if the key is in this symbol table).

*/

public void delete(Key key) {

int r = rank(key);

if (checkFor(key, r)) {

shiftLeft(r); // remove the specified key/value

}

}

/**

* contains

*

* return true if key is in the table

*/

public boolean contains(Key key) {

return ( this.get(key)!= null);

}

/**

* resize

*

* resize the underlying arrays to the specified size

* copy old contents to newly allocated storage

*/

@SuppressWarnings("unchecked")

private void resize(int capacity) {

if (capacity <= N) throw new IllegalArgumentException ();

Key[] tempk = (Key[]) new Comparable[capacity];

Value[] tempv = (Value[]) new Object[capacity];

for (int i = 0; i < N; i++) {

tempk[i] = keys[i];

tempv[i] = vals[i];

}

vals = tempv;

keys = tempk;

}

/**

* rank returns the number of keys in this symbol table that is less than the given key.

*/

public int rank(Key key) {

return linearTimeRank(key);

// ToDo3 : replace the above call to linearTimeRank with

// a logarithmic time implementation

}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!