Loading in 5 sec....

Advanced Data StructuresPowerPoint Presentation

Advanced Data Structures

- 110 Views
- Uploaded on

Download Presentation
## PowerPoint Slideshow about ' Advanced Data Structures' - laszlo

**An Image/Link below is provided (as is) to download presentation**

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript

### Advanced Data Structures

Chapter 16

Advanced Data Structures

- Data structures that take control of organizing elements
- Elements not in fixed positions
- Advantage – better performance
- Adding
- Removing
- Finding

Set

- Unordered collection of distinct elements
- Fundamental operations
- Adding an element
- Removing an element
- Containment testing (is something there)
- Listing – arbitrary order

- Duplicates
- Aren’t permitted
- Attempt to add – ignored
- Attempt to remove non existent data - ignored

Hash Set

- Create a Hash Set of Strings
Set<String> names = new HashSet<String>();

- Adding and deleting
names.add(“Romeo”);

names.remove(“Juliet”);

- Test to see if element is in set
if (names.contains(“Juliet”);

Hash Set Iterate

Iterator <String> iter=names.iterator();

while (iter.hasNext())

{

String name = iter.next();

do something with the string

………

}

Hash Set For Each Loop

for (String name: names)

{

do something with names

{

- Iterating through elements
- Does not visit in order inserted
- Set implementation rearranges for quick location
- Cannot add in iterator position
- Create a print method
- Should be usable by has or tree

Maps

- Data type
- Associates keys and values
- A function from one set(key) to another set(value)
- Every key has unique value
- A value may have multiple keys
- Two kinds of implementation
- Hash Map
- Tree Map
- Both implement Map Interface

Creating A Map

Values

Keys

Romeo

Adam

Eve

Juliet

Green

Red

Pink

Map<String,Color> favoriteColors = new

HashMap<String, Color?();

Map

- Add an association
- favorite.put(“Juliet”,Color.PINK);

- Change a value
- favorite.put(“Juliet”,Color.RED);

- Return the value
- Color julietFavoriteColor = favorite.get(“Juliet”);
- If you ask for a value with no key return a null

- Remove key and value
- favorite.remove(“Juliet”);

Map

Find all keys and values in map

Set<String> keySet = m.keySet();

For(String key: KeySet)

{

Color value=m.get(key);

System.out.println(Key + “->” + value);

}

Hash Table

- Find elements in a data structure quickly
- No linear search through all elements
- Can implement sets and maps
- Utilizes hash codes
- Function that computes an integer value from an object
- Integer value = has code
- Object class has a hashCode method
- Int h = x.hashCode();

- Collision – 2 objects with same hash code
- Good has functions minimizes collision
- Hash Code – index into hash table

Hash Table

- Simplest form
- Array index to hash table
- In array insert each object @ location of its hash code
- If anything already in array – object is present

- Problem with this idea
- Not possible to allocate an array that is large enough to hold all possible integer index positions
- Must reduce hash function to fit the array size
int h = x.hashCode();

if (h<0) h = -h;

position = h.%buckets.length;

- This approach increases likely hood of collisions

What to Do

[65]

Harry

Sue

Nina

[66]

Susannah

[67]

[68]

Larry

[69]

[70]

Adam

[71]

[72]

Juliet

Katherine

Tony

Create a hash table that is implemented as an array of buckets.

Buckets are a sequence of nodes that hold elements with the same hash code.

Algorithm Finding Object in Hash Table

- Compute hash code
- Reduce to table size using modulo
- Produces index into hash table
int h = x.hashCode();

if (h<0) h = -h;

position = h.%buckets.length;

- Iterate through the elements of the bucket at position h
- Check for match

Efficiency

Depends on number of collisions or buckets

Few buckets – quick O(1)

Many buckets – much slower

Computing Hash Codes

- From String
int h = 0;

for (int i=0; I < s.length(); i++)

h = h+s.charAt(i);

- What is the problem with this?
- Same hash code for permutations of same letters (eat tea)

Standard Library Method

final int HASH_MULTIPLIER = 31;

Int h=0;

for(int i=0;i<s.length();i++)

h = HASH_MULTIPLIER*h+s.charAt(i);

eat

31*(31*’e’ +’a’) + ‘t’ = 100184

31*(31*101+97) + 116

tea

31*(31*’t’ +’e’) + ‘a’ = 114704

31*(31*116+101) + 97

How to Create Hash Code for Your Object

- Example Coin class
public class Coin

{

final int HASH_MULTIPLIER = 29;

public int hashCode()

{

int h1 = name.hashCode();

int h2 – new Double(value.hashCode();

int h = HASH_MULTIPLIER*h1+h2;

return h;

}

- In a hash map only the keys are hashed.

Download Presentation

Connecting to Server..