Advanced data structures
This presentation is the property of its rightful owner.
Sponsored Links
1 / 22

Advanced Data Structures PowerPoint PPT Presentation


  • 70 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

Advanced Data Structures

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

Advanced Data Structures

Chapter 16


Advanced data structures1

Advanced Data Structures

  • Data structures that take control of organizing elements

  • Elements not in fixed positions

  • Advantage – better performance

    • Adding

    • Removing

    • Finding


Advanced data structures

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


Advanced data structures

Set


Data structures for sets

Data Structures for Sets

Hash tables

Trees

Uses set interface


Hash set

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

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

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


Advanced data structures

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

Creating A Map

Values

Keys

Romeo

Adam

Eve

Juliet

Green

Red

Pink

Map<String,Color> favoriteColors = new

HashMap<String, Color?();


Advanced data structures

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”);


Advanced data structures

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

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 table1

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


Hash table2

Hash Table

[70068]

[74478]

[74656]


Advanced data structures

  • 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

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

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

Efficiency

Depends on number of collisions or buckets

Few buckets – quick O(1)

Many buckets – much slower


Computing hash codes

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

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

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.


  • Login