直接地址表是一种数据结构,具有使用数组将记录映射到其对应键的能力。在直接地址表中,记录使用它们的键值直接作为索引放置。它们有助于快速搜索、插入和删除操作。
我们可以通过下面的例子来理解这个概念。我们创建一个大小等于最大值加一(假设索引为 0)的数组,然后将值用作索引。例如,在下图中,键 21 直接用作索引。
好处:
- 在 O(1) 时间内搜索:直接地址表使用数组是随机访问数据结构,因此可以轻松地使用键值(也是数组的索引)在 O(1) 时间内搜索记录。
- 在 O(1) 时间内插入:我们可以在 O(1) 时间内轻松地在数组中插入一个元素。同样的事情也出现在直接地址表中。
- 删除 O(1) 时间:删除数组中的元素需要 O(1) 时间。类似地,要删除直接地址表中的元素,我们需要 O(1) 时间。
限制:
- 最大键值的先验知识
- 仅当最大值非常小时才实际有用。
- 如果总记录数和最大值之间存在显着差异,则会导致内存空间的浪费。
散列可以克服直接地址表的这些限制。
如何处理碰撞?
碰撞可以像散列一样处理。我们可以使用链接或开放寻址来处理冲突。与这里散列的唯一区别是,我们不使用散列函数来查找索引。我们宁愿直接使用值作为索引。
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。