...

数据结构与算法-06散列表

散列表

散列表(Hash Table),也称为哈希表,是一种基于哈希函数(Hash Function)实现的数据结构,它支持快速的插入、删除和查找操作。
散列表将每个元素的关键字(Key)通过哈希函数映射到一个固定的位置,称为散列值(Hash Value),然后将元素存储在该位置上。
散列表

散列表的核心是哈希函数,它将任意长度的输入(例如字符串、数字等)映射为固定长度的输出,通常是一个整数。

哈希函数应该满足以下要求:

  • 一致性:对于相同的输入,哈希函数应该产生相同的输出。
  • 均匀性:哈希函数应该将输入均匀地映射到输出空间中的不同位置。
  • 高效性:哈希函数应该能够在常数时间内计算出输出。

散列表的冲突(Collision)是指不同的元素映射到了同一个位置上,这时需要解决冲突的方法。常见的解决冲突的方法有以下几种:

  • 链接法(Chaining):将散列值相同的元素存储在同一个链表中。
  • 开放地址法(Open Addressing):将冲突的元素存储在散列表中的其他位置,例如线性探测、二次探测、双重散列等。

散列表的时间复杂度取决于哈希函数的均匀性和解决冲突的方法。如果哈希函数和解决冲突的方法都很好,散列表的插入、删除和查找操作的时间复杂度可以达到O(1)。

以下是Python实现一个散列表的示例

class HashTable:
    def __init__(self):
        self.size = 10
        self.table = [[] for _ in range(self.size)]

    def hash_function(self, key):
        return key % self.size

    def insert(self, key, value):
        hash_value = self.hash_function(key)
        for pair in self.table[hash_value]:
            if pair[0] == key:
                pair[1] = value
                return
        self.table[hash_value].append([key, value])

    def search(self, key):
        hash_value = self.hash_function(key)
        for pair in self.table[hash_value]:
            if pair[0] == key:
                return pair[1]
        return None

    def delete(self, key):
        hash_value = self.hash_function(key)
        for i, pair in enumerate(self.table[hash_value]):
            if pair[0] == key:
                del self.table[hash_value][i]
                return

这个散列表使用一个列表来存储元素,每个元素是一个键值对,包括键和值。散列表使用一个哈希函数将键映射为散列值,然后将键值对存储在散列表的对应位置上。散列表支持插入元素、查找元素、删除元素等操作,其中插入和查找操作的时间复杂度为O(1)。你可以根据自己的需求对这个示例代码进行修改和扩展。

Python集合操作的时间复杂度

操作 时间复杂度
添加元素 O(1)
删除元素 O(1)
判断元素是否在集合中 O(1)
集合并集 O(len(s1) + len(s2))
集合交集 O(min(len(s1), len(s2)))
集合差集 O(len(s1))
集合对称差集 O(len(s1))

Python字典操作的时间复杂度

操作 时间复杂度
获取元素 O(1)
添加元素 O(1)
删除元素 O(1)
遍历字典 O(n)
posted @ 2023-06-07 20:09  韩志超  阅读(35)  评论(0编辑  收藏  举报