我正在尝试使用散列中的索引映射来搜索数组中的元素。线性搜索将使用O(n)来搜索大小为n的数组中的元素。在散列中,我们正在做的事情基本上是通过创建零的二维矩阵(例如,hash [1000] [2])并将hash [a [i]] [0]分配给1,将时间复杂度降低到O(1)。 a [i]为正,如果a [i]为负,则hash [-a [i]] [1]。这里a [i]是我们应该从中搜索元素的数组。
for(i=0 ;i<n ;i++)
{
if(a[i]>=0)
has[a[i]][0]=1;
else
has[-a[i]][1]=1;
}
以上代码执行需要多少时间? 即使通过散列,我们是否也不像线性搜索那样具有O(n)的时间复杂度?在二维零数组中分配n 1是否等于线性搜索元素所花费的时间,这不是很费力吗?
答案 0 :(得分:0)
这里要做的典型事情是维护一个按哈希键排序的数组,然后使用二进制搜索来定位元素,从而给出O(log n)的最坏情况下的时间复杂度。
您可以通过使用与查找现有元素相同的二进制搜索来插入新元素来维护排序顺序。
最后一点很重要:如注释中所述,在每次搜索之前进行排序会使搜索时间降低到对于小型数据集而言蛮力线性搜索更快的程度。但是这种开销可以消除。如果您在插入新元素时保持排序顺序,则数组从不需要排序。