代码之家  ›  专栏  ›  技术社区  ›  d11wtq Vadim Baryshev

我需要对此实现b树搜索吗?

  •  2
  • d11wtq Vadim Baryshev  · 技术社区  · 14 年前

    我有一个整数数组,它可以运行到数十万(或更多),按数字升序排序,因为这是它们最初的堆叠方式。

    >= 一些投入,尽可能有效。我知道的唯一方法是在不考虑它的情况下迭代数组测试条件,直到它返回true,此时我将停止迭代。然而,这是这个问题最昂贵的解决方案,我正在寻找最好的算法来解决它。

    我用Objective-C编写代码,但我将用JavaScript给出一个示例,以扩大能够响应的用户的范围。

    // Sample set
    var numbers = [1, 7, 23, 23, 23, 89, 1002, 1003];
    
    var indexAfter100 = getIndexOfValueGreaterThan(100);
    var indexAfter7 = getIndexOfValueGreaterThan(7);
    
    // (indexAfter100 == 6) == true
    // (indexAfter7 == 2) == true
    

    有能力改变数据结构,或者在我构建数组时存储额外的数据结构,因为我的程序已经将每个数字一个一个地推送到这个堆栈上,所以我只需修改将它们添加到堆栈中的代码。当索引被添加到堆栈中时,搜索索引是不可能的,因为事实发生后,搜索操作将以不同的值频繁重复。

    5 回复  |  直到 14 年前
        1
  •  7
  •   svick Raja Nadar    14 年前

    你应该用 binary search . 目标C甚至可以有一个内置的方法(我知道很多语言都有)。除非你想把数据存储在磁盘上,否则B-tree可能不会有多大帮助。

        2
  •  2
  •   Tim Čas    14 年前

    bsearch (此外,AFAIK,Obj-C可以很好地调用C函数):

    http://www.cplusplus.com/reference/clibrary/cstdlib/bsearch/

        3
  •  1
  •   arcwhite    14 年前

    我认为,一个快速搜索算法应该能够在不花费太长时间的情况下处理这样大的整数数组(而且数组是排序的,所以二进制搜索可能是可行的方法)。

    我想一棵树可能有点过头了。。。

        4
  •  0
  •   eliezer    14 年前

        5
  •  0
  •   kalu khtri    10 年前

    线性搜索也称为顺序搜索,从一开始就按顺序查看每个元素,以查看数据结构中是否存在所需的元素。当数据量很小时,这种搜索很快。它很简单,但所需的工作与要搜索的数据量成比例。如果所需元素不存在,则将元素数加倍将使搜索时间加倍。

    推荐文章