zoukankan      html  css  js  c++  java
  • Rehashing

    The size of the hash table is not determinate at the very beginning. If the total size of keys is too large (e.g. size >= capacity / 10), we should double the size of the hash table and rehash every keys. Say you have a hash table looks like below:

    size=3, capacity=4

    [null, 21, 14, null]
           ↓    ↓
           9   null
           ↓
          null
    

    The hash function is:

    int hashcode(int key, int capacity) {
        return key % capacity;
    }
    

    here we have three numbers, 9, 14 and 21, where 21 and 9 share the same position as they all have the same hashcode 1 (21 % 4 = 9 % 4 = 1). We store them in the hash table by linked list.

    rehashing this hash table, double the capacity, you will get:

    size=3, capacity=8

    index:   0    1    2    3     4    5    6   7
    hash : [null, 9, null, null, null, 21, 14, null]
    

    Given the original hash table, return the new hash table after rehashing .

    rehash意思是重hash, 即原来的key的数目太高,需要将hash table的大小扩大二倍,然后重新获得key值.

    了解概念的题目.

    代码如下:

    """
    Definition of ListNode
    class ListNode(object):
    
        def __init__(self, val, next=None):
            self.val = val
            self.next = next
    """
    class Solution:
        """
        @param hashTable: A list of The first node of linked list
        @return: A list of The first node of linked list which have twice size
        """
        def rehashing(self, hashTable):
            if not hashTable:
                return []
            capacity = len(hashTable)*2
            rehash = [None]*capacity
            #insert on the head of linked list
            for i in xrange(len(hashTable)):
                cur = hashTable[i]
                while cur:
                    key = cur.val%capacity
                    if not rehash[key]:
                        rehash[key] = ListNode(cur.val)
                    else:
                        tmp = rehash[key]
                        while tmp.next:
                            tmp = tmp.next
                        tmp.next = ListNode(cur.val)
                    cur = cur.next
            return rehash
                
  • 相关阅读:
    JSR 303
    Spring JSR-250注解
    java 内部类
    爬虫
    多线程异步编程示例和实践-Task
    多线程异步编程示例和实践-Thread和ThreadPool
    线程机制、CLR线程池以及应用程序域
    二维码的生成与识别
    Unicode 和 UTF-8 有何区别?
    json转换为自定义类型的集合
  • 原文地址:https://www.cnblogs.com/sherylwang/p/5590242.html
Copyright © 2011-2022 走看看