SlideShare ist ein Scribd-Unternehmen logo
1 von 4
Downloaden Sie, um offline zu lesen
Coalesced hashing                                                                                                                   1



    Coalesced hashing
    Coalesced hashing, also called coalesced chaining, is a strategy of
    collision resolution in a hash table that forms a hybrid of separate chaining
    and open addressing. In a separate chaining hash table, items that hash to
    the same address are placed on a list (or "chain") at that address. This
    technique can result in a great deal of wasted memory because the table
    itself must be large enough to maintain a load factor that performs well
    (typically twice the expected number of items), and extra memory must be
    used for all but the first item in a chain (unless list headers are used, in
    which case extra memory must be used for all items in a chain).

    Given a sequence "qrj," "aty," "qur," "dim," "ofu," "gcl," "rhv," "clq,"
    "ecd," "qsu" of randomly generated three character long strings, the
    following table would be generated (using Bob Jenkins' One-at-a-Time
    hash algorithm [1]) with a table of size 10:




                                                                                    Coalesced Hashing example. For purposes of
                                                                                    this example, collision buckets are allocated
                                                                                     in increasing order, starting with bucket 0.




                                                    (null)

                                                    "clq"

                                                    "qur"

                                                    (null)

                                                    (null)

                                                    "dim"

                                                    "aty"    "qsu"

                                                    "rhv"

                                                    "qrj"    "ofu" "gcl" "ecd"

                                                    (null)

                                                    (null)


    This strategy is effective, efficient, and very easy to implement. However, sometimes the extra memory use might be
    prohibitive, and the most common alternative, open addressing, has uncomfortable disadvantages that decrease
    performance. The primary disadvantage of open addressing is primary and secondary clustering, in which searches
    may access long sequences of used buckets that contain items with different hash addresses; items with one hash
Coalesced hashing                                                                                                              2


    address can thus lengthen searches for items with other hash addresses.
    One solution to these issues is coalesced hashing. Coalesced hashing uses a similar technique as separate chaining,
    but instead of allocating new nodes for the linked list, buckets in the actual table are used. The first empty bucket in
    the table at the time of a collision is considered the collision bucket. When a collision occurs anywhere in the table,
    the item is placed in the collision bucket and a link is made between the chain and the collision bucket. It is possible
    for a newly inserted item to collide with items with a different hash address, such as the case in the example above
    when item "clq" is inserted. The chain for "clq" is said to "coalesce" with the chain of "qrj," hence the name of the
    algorithm. However, the extent of coalescing is minor compared with the clustering exhibited by open addressing.
    For example, when coalescing occurs, the length of the chain grows by only 1, whereas in open addressing, search
    sequences of arbitrary length may combine.
    An important optimization, to reduce the effect of coalescing, is to restrict the address space of the hash function to
    only a subset of the table. For example, if the table has size M with buckets numbered from 0 to M − 1, we can
    restrict the address space so that the hash function only assigns addresses to the first N locations in the table. The
    remaining M − N buckets, called the cellar, are used exclusively for storing items that collide during insertion. No
    coalescing can occur until the cellar is exhausted.
    The optimal choice of N relative to M depends upon the load factor (or fullness) of the table. A careful analysis
    shows that the value N = 0.86 × M yields near-optimum performance for most load factors.[2] Other variants for
    insertion are also possible that have improved search time. Deletion algorithms have been developed that preserve
    randomness, and thus the average search time analysis still holds after deletions.[2]
    Insertion in C:

    /* htab is the hash table,
       N is the size of the address space of the hash function, and
       M is the size of the entire table including the cellar.
       Collision buckets are allocated in decreasing order, starting with
    bucket M-1. */


    int insert ( char key[] )
    {
      unsigned h = hash ( key, strlen ( key ) ) % N;


       if ( htab[h] == NULL ) {
         /* Make a new chain */
         htab[h] = make_node ( key, NULL );
       } else {
         struct node *it;
         int cursor = M-1;


          /* Find the first empty bucket */
          while ( cursor >= 0 && htab[cursor] != NULL )
            --cursor;


          /* The table is full, terminate unsuccessfully */
          if ( cursor == -1 )
            return -1;


          htab[cursor] = make_node ( key, NULL );
Coalesced hashing                                                                                                                  3



            /* Find the last node in the chain and point to it */
            it = htab[h];


            while ( it->next != NULL )
              it = it->next;


            it->next = htab[cursor];
        }


        return 0;
    }

    One benefit of this strategy is that the search algorithm for separate chaining can be used without change in a
    coalesced hash table.
    Lookup in C:

    char *find ( char key[] )
    {
      unsigned h = hash ( key, strlen ( key ) ) % N;


        if ( htab[h] != NULL ) {
          struct node *it;


            /* Search the chain at index h */
            for ( it = htab[h]; it != NULL; it = it->next ) {
              if ( strcmp ( key, it->data ) == 0 )
                return it->data;
            }
        }


        return NULL;
    }


    Performance
    Coalesced chaining avoids the effects of primary and secondary clustering, and as a result can take advantage of the
    efficient search algorithm for separate chaining. If the chains are short, this strategy is very efficient and can be
    highly condensed, memory-wise. As in open addressing, deletion from a coalesced hash table is awkward and
    potentially expensive, and resizing the table is terribly expensive and should be done rarely, if ever.


    References
    [1] http:/ / burtleburtle. net/ bob/
    [2] J. S. Vitter and W.-C. Chen, Design and Analysis of Coalesced Hashing, Oxford University Press, New York, NY, 1987, ISBN
        0-19-504182-8
Article Sources and Contributors                                                                                                                                                           4



    Article Sources and Contributors
    Coalesced hashing  Source: http://en.wikipedia.org/w/index.php?oldid=339004477  Contributors: Algotime, Andreas Kaufmann, Basawala, CesarB's unpriviledged account, Cic, Confuzzled,
    Dcoetzee, Fresheneesz, Ian Pitchford, Jafet, Jll, Oleg Alexandrov, Pmdboi, Tassedethe, Zawersh, 8 anonymous edits




    Image Sources, Licenses and Contributors
    Image:CoalescedHash.jpg  Source: http://en.wikipedia.org/w/index.php?title=File:CoalescedHash.jpg  License: Public Domain  Contributors: Confuzzled, Nv8200p




    License
    Creative Commons Attribution-Share Alike 3.0 Unported
    //creativecommons.org/licenses/by-sa/3.0/

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Java Linked List Tutorial | Edureka
Java Linked List Tutorial |  EdurekaJava Linked List Tutorial |  Edureka
Java Linked List Tutorial | Edureka
 
queue & its applications
queue & its applicationsqueue & its applications
queue & its applications
 
Data Structures - Lecture 3 [Arrays]
Data Structures - Lecture 3 [Arrays]Data Structures - Lecture 3 [Arrays]
Data Structures - Lecture 3 [Arrays]
 
Presentation on queue
Presentation on queuePresentation on queue
Presentation on queue
 
Tree - Data Structure
Tree - Data StructureTree - Data Structure
Tree - Data Structure
 
Arrays searching-sorting
Arrays searching-sortingArrays searching-sorting
Arrays searching-sorting
 
Data structure and its types.
Data structure and its types.Data structure and its types.
Data structure and its types.
 
Applications of data structures
Applications of data structuresApplications of data structures
Applications of data structures
 
Queue
QueueQueue
Queue
 
Singly linked list
Singly linked listSingly linked list
Singly linked list
 
Trees (data structure)
Trees (data structure)Trees (data structure)
Trees (data structure)
 
Heap sort
Heap sort Heap sort
Heap sort
 
Arrays in Data Structure and Algorithm
Arrays in Data Structure and Algorithm Arrays in Data Structure and Algorithm
Arrays in Data Structure and Algorithm
 
Arrays
ArraysArrays
Arrays
 
Abstract data types (adt) intro to data structure part 2
Abstract data types (adt)   intro to data structure part 2Abstract data types (adt)   intro to data structure part 2
Abstract data types (adt) intro to data structure part 2
 
Doubly & Circular Linked Lists
Doubly & Circular Linked ListsDoubly & Circular Linked Lists
Doubly & Circular Linked Lists
 
Tree and Binary Search tree
Tree and Binary Search treeTree and Binary Search tree
Tree and Binary Search tree
 
html-table
html-tablehtml-table
html-table
 
Red black tree
Red black treeRed black tree
Red black tree
 
Polynomial reppresentation using Linkedlist-Application of LL.pptx
Polynomial reppresentation using Linkedlist-Application of LL.pptxPolynomial reppresentation using Linkedlist-Application of LL.pptx
Polynomial reppresentation using Linkedlist-Application of LL.pptx
 

Andere mochten auch

Seo analysis report template (1)
Seo analysis report template (1)Seo analysis report template (1)
Seo analysis report template (1)
Doiphode Vishal
 
Website analysis sample report
Website analysis sample reportWebsite analysis sample report
Website analysis sample report
Sukumar Jena
 

Andere mochten auch (20)

Hashing
HashingHashing
Hashing
 
08 Hash Tables
08 Hash Tables08 Hash Tables
08 Hash Tables
 
Design & Analysis Of Algorithm
Design & Analysis Of AlgorithmDesign & Analysis Of Algorithm
Design & Analysis Of Algorithm
 
algorithm Unit 3
algorithm Unit 3algorithm Unit 3
algorithm Unit 3
 
Hashing Algorithm
Hashing AlgorithmHashing Algorithm
Hashing Algorithm
 
algorithm Unit 5
algorithm Unit 5 algorithm Unit 5
algorithm Unit 5
 
Mea notes
Mea notesMea notes
Mea notes
 
Hashing
HashingHashing
Hashing
 
Cs6402 design and analysis of algorithms impartant part b questions appasami
Cs6402 design and analysis of algorithms  impartant part b questions appasamiCs6402 design and analysis of algorithms  impartant part b questions appasami
Cs6402 design and analysis of algorithms impartant part b questions appasami
 
CS 6402 – DESIGN AND ANALYSIS OF ALGORITHMS questio
CS 6402 – DESIGN AND ANALYSIS OF ALGORITHMS questioCS 6402 – DESIGN AND ANALYSIS OF ALGORITHMS questio
CS 6402 – DESIGN AND ANALYSIS OF ALGORITHMS questio
 
SEO Website Analysis - example report
SEO Website Analysis - example reportSEO Website Analysis - example report
SEO Website Analysis - example report
 
Seo analysis report template (1)
Seo analysis report template (1)Seo analysis report template (1)
Seo analysis report template (1)
 
Hash tables
Hash tablesHash tables
Hash tables
 
ADA complete notes
ADA complete notesADA complete notes
ADA complete notes
 
Html, CSS & Web Designing
Html, CSS & Web DesigningHtml, CSS & Web Designing
Html, CSS & Web Designing
 
Data Structure & Algorithms | Computer Science
Data Structure & Algorithms | Computer ScienceData Structure & Algorithms | Computer Science
Data Structure & Algorithms | Computer Science
 
Hashing PPT
Hashing PPTHashing PPT
Hashing PPT
 
Web Development on Web Project Report
Web Development on Web Project ReportWeb Development on Web Project Report
Web Development on Web Project Report
 
E commerce project report
E commerce project report E commerce project report
E commerce project report
 
Website analysis sample report
Website analysis sample reportWebsite analysis sample report
Website analysis sample report
 

Ähnlich wie Coalesced hashing / Hash Coalescido

Concurrent Hashing and Natural Parallelism : The Art of Multiprocessor Progra...
Concurrent Hashing and Natural Parallelism : The Art of Multiprocessor Progra...Concurrent Hashing and Natural Parallelism : The Art of Multiprocessor Progra...
Concurrent Hashing and Natural Parallelism : The Art of Multiprocessor Progra...
Subhajit Sahu
 
Open addressing &amp rehashing,extendable hashing
Open addressing &amp rehashing,extendable hashingOpen addressing &amp rehashing,extendable hashing
Open addressing &amp rehashing,extendable hashing
Haripritha
 
Algorithm chapter 7
Algorithm chapter 7Algorithm chapter 7
Algorithm chapter 7
chidabdu
 

Ähnlich wie Coalesced hashing / Hash Coalescido (20)

Hashing
HashingHashing
Hashing
 
Concurrent Hashing and Natural Parallelism : The Art of Multiprocessor Progra...
Concurrent Hashing and Natural Parallelism : The Art of Multiprocessor Progra...Concurrent Hashing and Natural Parallelism : The Art of Multiprocessor Progra...
Concurrent Hashing and Natural Parallelism : The Art of Multiprocessor Progra...
 
RecSplit Minimal Perfect Hashing
RecSplit Minimal Perfect HashingRecSplit Minimal Perfect Hashing
RecSplit Minimal Perfect Hashing
 
Hashing.pptx
Hashing.pptxHashing.pptx
Hashing.pptx
 
Hashing
HashingHashing
Hashing
 
Open addressing &amp rehashing,extendable hashing
Open addressing &amp rehashing,extendable hashingOpen addressing &amp rehashing,extendable hashing
Open addressing &amp rehashing,extendable hashing
 
Lec5
Lec5Lec5
Lec5
 
Hashing In Data Structure Download PPT i
Hashing In Data Structure Download PPT iHashing In Data Structure Download PPT i
Hashing In Data Structure Download PPT i
 
Seq db searching
Seq db searchingSeq db searching
Seq db searching
 
Presentation.pptx
Presentation.pptxPresentation.pptx
Presentation.pptx
 
Algorithm chapter 7
Algorithm chapter 7Algorithm chapter 7
Algorithm chapter 7
 
Pepe Vila - Cache and Syphilis [rooted2019]
Pepe Vila - Cache and Syphilis [rooted2019]Pepe Vila - Cache and Syphilis [rooted2019]
Pepe Vila - Cache and Syphilis [rooted2019]
 
Hashing in datastructure
Hashing in datastructureHashing in datastructure
Hashing in datastructure
 
Shell sort[1]
Shell sort[1]Shell sort[1]
Shell sort[1]
 
Hash Tables in data Structure
Hash Tables in data StructureHash Tables in data Structure
Hash Tables in data Structure
 
Finding similar items in high dimensional spaces locality sensitive hashing
Finding similar items in high dimensional spaces  locality sensitive hashingFinding similar items in high dimensional spaces  locality sensitive hashing
Finding similar items in high dimensional spaces locality sensitive hashing
 
Дмитрий Селиванов, OK.RU. Finding Similar Items in high-dimensional spaces: L...
Дмитрий Селиванов, OK.RU. Finding Similar Items in high-dimensional spaces: L...Дмитрий Селиванов, OK.RU. Finding Similar Items in high-dimensional spaces: L...
Дмитрий Селиванов, OK.RU. Finding Similar Items in high-dimensional spaces: L...
 
Bigdata analytics
Bigdata analyticsBigdata analytics
Bigdata analytics
 
presentation on important DAG,TRIE,Hashing.pptx
presentation on important DAG,TRIE,Hashing.pptxpresentation on important DAG,TRIE,Hashing.pptx
presentation on important DAG,TRIE,Hashing.pptx
 
Presentation1
Presentation1Presentation1
Presentation1
 

Mehr von CriatividadeZeroDocs (11)

Aquece Para a prova de EDA3
Aquece Para a prova de EDA3Aquece Para a prova de EDA3
Aquece Para a prova de EDA3
 
Introdução a estrutura de dados
Introdução a estrutura de dadosIntrodução a estrutura de dados
Introdução a estrutura de dados
 
Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)
Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)
Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)
 
Listas em C
Listas em CListas em C
Listas em C
 
Pilhas e Filas
Pilhas e FilasPilhas e Filas
Pilhas e Filas
 
Implementação do Hash Coalha/Coalesced
Implementação do Hash Coalha/CoalescedImplementação do Hash Coalha/Coalesced
Implementação do Hash Coalha/Coalesced
 
Exercício sobre hashing
Exercício sobre hashingExercício sobre hashing
Exercício sobre hashing
 
Aula sobre Tabela Hash
Aula sobre Tabela HashAula sobre Tabela Hash
Aula sobre Tabela Hash
 
Operadores Lineares
Operadores LinearesOperadores Lineares
Operadores Lineares
 
Machado de assis
Machado de assisMachado de assis
Machado de assis
 
áLbum de fotografias
áLbum de fotografiasáLbum de fotografias
áLbum de fotografias
 

Kürzlich hochgeladen

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Kürzlich hochgeladen (20)

GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 

Coalesced hashing / Hash Coalescido

  • 1. Coalesced hashing 1 Coalesced hashing Coalesced hashing, also called coalesced chaining, is a strategy of collision resolution in a hash table that forms a hybrid of separate chaining and open addressing. In a separate chaining hash table, items that hash to the same address are placed on a list (or "chain") at that address. This technique can result in a great deal of wasted memory because the table itself must be large enough to maintain a load factor that performs well (typically twice the expected number of items), and extra memory must be used for all but the first item in a chain (unless list headers are used, in which case extra memory must be used for all items in a chain). Given a sequence "qrj," "aty," "qur," "dim," "ofu," "gcl," "rhv," "clq," "ecd," "qsu" of randomly generated three character long strings, the following table would be generated (using Bob Jenkins' One-at-a-Time hash algorithm [1]) with a table of size 10: Coalesced Hashing example. For purposes of this example, collision buckets are allocated in increasing order, starting with bucket 0. (null) "clq" "qur" (null) (null) "dim" "aty" "qsu" "rhv" "qrj" "ofu" "gcl" "ecd" (null) (null) This strategy is effective, efficient, and very easy to implement. However, sometimes the extra memory use might be prohibitive, and the most common alternative, open addressing, has uncomfortable disadvantages that decrease performance. The primary disadvantage of open addressing is primary and secondary clustering, in which searches may access long sequences of used buckets that contain items with different hash addresses; items with one hash
  • 2. Coalesced hashing 2 address can thus lengthen searches for items with other hash addresses. One solution to these issues is coalesced hashing. Coalesced hashing uses a similar technique as separate chaining, but instead of allocating new nodes for the linked list, buckets in the actual table are used. The first empty bucket in the table at the time of a collision is considered the collision bucket. When a collision occurs anywhere in the table, the item is placed in the collision bucket and a link is made between the chain and the collision bucket. It is possible for a newly inserted item to collide with items with a different hash address, such as the case in the example above when item "clq" is inserted. The chain for "clq" is said to "coalesce" with the chain of "qrj," hence the name of the algorithm. However, the extent of coalescing is minor compared with the clustering exhibited by open addressing. For example, when coalescing occurs, the length of the chain grows by only 1, whereas in open addressing, search sequences of arbitrary length may combine. An important optimization, to reduce the effect of coalescing, is to restrict the address space of the hash function to only a subset of the table. For example, if the table has size M with buckets numbered from 0 to M − 1, we can restrict the address space so that the hash function only assigns addresses to the first N locations in the table. The remaining M − N buckets, called the cellar, are used exclusively for storing items that collide during insertion. No coalescing can occur until the cellar is exhausted. The optimal choice of N relative to M depends upon the load factor (or fullness) of the table. A careful analysis shows that the value N = 0.86 × M yields near-optimum performance for most load factors.[2] Other variants for insertion are also possible that have improved search time. Deletion algorithms have been developed that preserve randomness, and thus the average search time analysis still holds after deletions.[2] Insertion in C: /* htab is the hash table, N is the size of the address space of the hash function, and M is the size of the entire table including the cellar. Collision buckets are allocated in decreasing order, starting with bucket M-1. */ int insert ( char key[] ) { unsigned h = hash ( key, strlen ( key ) ) % N; if ( htab[h] == NULL ) { /* Make a new chain */ htab[h] = make_node ( key, NULL ); } else { struct node *it; int cursor = M-1; /* Find the first empty bucket */ while ( cursor >= 0 && htab[cursor] != NULL ) --cursor; /* The table is full, terminate unsuccessfully */ if ( cursor == -1 ) return -1; htab[cursor] = make_node ( key, NULL );
  • 3. Coalesced hashing 3 /* Find the last node in the chain and point to it */ it = htab[h]; while ( it->next != NULL ) it = it->next; it->next = htab[cursor]; } return 0; } One benefit of this strategy is that the search algorithm for separate chaining can be used without change in a coalesced hash table. Lookup in C: char *find ( char key[] ) { unsigned h = hash ( key, strlen ( key ) ) % N; if ( htab[h] != NULL ) { struct node *it; /* Search the chain at index h */ for ( it = htab[h]; it != NULL; it = it->next ) { if ( strcmp ( key, it->data ) == 0 ) return it->data; } } return NULL; } Performance Coalesced chaining avoids the effects of primary and secondary clustering, and as a result can take advantage of the efficient search algorithm for separate chaining. If the chains are short, this strategy is very efficient and can be highly condensed, memory-wise. As in open addressing, deletion from a coalesced hash table is awkward and potentially expensive, and resizing the table is terribly expensive and should be done rarely, if ever. References [1] http:/ / burtleburtle. net/ bob/ [2] J. S. Vitter and W.-C. Chen, Design and Analysis of Coalesced Hashing, Oxford University Press, New York, NY, 1987, ISBN 0-19-504182-8
  • 4. Article Sources and Contributors 4 Article Sources and Contributors Coalesced hashing  Source: http://en.wikipedia.org/w/index.php?oldid=339004477  Contributors: Algotime, Andreas Kaufmann, Basawala, CesarB's unpriviledged account, Cic, Confuzzled, Dcoetzee, Fresheneesz, Ian Pitchford, Jafet, Jll, Oleg Alexandrov, Pmdboi, Tassedethe, Zawersh, 8 anonymous edits Image Sources, Licenses and Contributors Image:CoalescedHash.jpg  Source: http://en.wikipedia.org/w/index.php?title=File:CoalescedHash.jpg  License: Public Domain  Contributors: Confuzzled, Nv8200p License Creative Commons Attribution-Share Alike 3.0 Unported //creativecommons.org/licenses/by-sa/3.0/