是否可以在不使用数组的情况下进行O(1)搜索的数据结构实现?

时间:2011-04-15 02:05:53

标签: data-structures theory performance

我目前正在攻读数据结构的大学课程,这个主题一直困扰着我一段时间(这不是一个家庭作业,只是一个纯粹的理论问题)。

我们假设您要实现字典。当然,字典应该有一个搜索功能,接受一个键并返回一个值

现在,我只能想象实现这种事情的两种非常通用的方法:

  • 使用某种搜索树,它会(总是?)给出 O(log n)最差情况下的运行时间,以便通过密钥查找值,或者,
  • 散列密钥,它实际上返回一个与数组中的索引相对应的自然数,给出 O(1)最差情况下的运行时间。

搜索功能的O(1) 最差情况 运行时间是否可以,而不使用数组?

只能通过使用数组来获得随机访问吗? 是否可以通过使用基于指针的数据结构(如链接列表,搜索树等)?

在做出某些特定假设时是否可能,例如,按键是按某种顺序?

换句话说,您能想到搜索功能的实现(如果可能的话)和将在字典中接收任何键并在O中返回其值的字典 (1)时间,不使用数组进行随机访问?

3 个答案:

答案 0 :(得分:3)

不是使用数组来进行查找O(1),而是查找时间不依赖于数据存储的大小。因此,任何直接访问数据而没有以某种方式与数据存储大小成比例的搜索的方法都是O(1)。

答案 1 :(得分:3)

Here's another answer I made on that general subject. 本质上,算法通过处理一定数量的信息来达到其结果。他们花费的时间长短取决于他们能以多快的速度完成。

只有2个分支的决策点不能处理超过1位的信息。但是,具有n个分支的决策点可以处理最多log(n)位(基数2)。

在计算机中,我能够知道的唯一一种机制,可以在一次操作中处理超过1位的信息,它是索引,无论是索引数组还是执行跳转表(索引数组) )。

答案 2 :(得分:1)

你可以使用trie树实现哈希。复杂度为O(max(length(string))),如果你有大小有限的字符串,那么你可以说它在O(1)中运行,它不依赖于你在结构中的字符串数量。 http://en.wikipedia.org/wiki/Trie