搜索和插入操作在包含重复值的已排序和未排序数组中的时间复杂度

时间:2010-04-03 05:20:56

标签: algorithm search sorting complexity-theory

1-)对于排序数组,我使用了二进制搜索。 我们知道排序数组中SEARCH操作的最坏情况复杂度是O(lg N),如果我们使用二进制搜索,其中N是数组中的项数。 使用二进制搜索的数组中包含重复值的搜索操作的最坏情况复杂度是多少? 它是否是相同的O(lg N)??如果我错了请纠正我!!

使用二进制搜索的排序数组中INSERT操作的最坏情况是什么? 我的猜测是O(N)......就是这样吗?

2-)对于未排序的数组,我使用过线性搜索。 现在我们有一个未排序的数组,它也接受重复的元素/值。  SEARCH和INSERT操作的最佳最坏情况复杂性是什么。 我认为我们可以使用线性搜索来为我们提供O(N)最差情况下的搜索时间 并删除操作。 对于未排序的数组,我们能做得比这更好吗?如果我们接受数组中的重复项,复杂性是否会发生变化。

3 个答案:

答案 0 :(得分:2)

  1. 是。

  2. 最好的情况是无趣的。 (想想为什么会这样。)最坏的情况是O(N),插入除外。插入到未排序的数组是快速的,一个操作。 (再次考虑一下,如果你没有看到它。)

  3. 一般情况下,重复项除了极端的病理分布外几乎没有什么区别。

答案 1 :(得分:0)

途中有一些帮助 - 但不是整个解决方案。

  1. 二进制搜索的最佳情况是,搜索的项目是第一个枢轴元素。最糟糕的情况是,必须一直钻到两个相邻的元素,但仍然没有找到你想要的东西。如果数据中有重复项,这会改变吗?将数据插入到排序数组中包括以“向右一步”的更高排序顺序移动所有数据。最糟糕的情况是您插入的排序顺序低于任何现有项目。
  2. 搜索未排序的数组,除了线性搜索之外别无选择。如果您不关心排序顺序,则可以更快,更简单地执行插入操作。删除可以被认为是先搜索然后删除。

答案 2 :(得分:0)

我们可以更好地从无序数组中删除!由于在这种情况下顺序无关紧要,我们可以将要删除的元素与最后一个元素交换,这可以避免数组中元素的不必要的移位。因此在O(1)时间内删除。