优化搜索-任何人都可以帮助计算该算法的复杂性

Lance Shi

当我查看二进制搜索算法时。我有一种感觉,可以通过不总是查看中间点来优化搜索点。例如,如果我们在字典中查找单词而不查看菜单,我们将不会总是转到中间页进行比较。如果单词以“ A”开头,我们会期望它在开头附近。如果以“ Z”开头,我们一定会在最后尝试页面。

但是,如果阵列的密度急剧变化,则始终使用当前目标阵列的密度会引起一些严重的问题,这将导致算法在某些情况下最终以接近O(n)的复杂度结束。因此,我根据先前的搜索计算了密度,并始终根据较小的除法来计算密度。并始终根据先前的搜索点计算搜索点。这样,它减轻了密度变化的影响。

因此,我编写了这段代码,试图生成优化的搜索。我还没有测试(甚至还没有编译)。但是我想它解释了算法:

public int OptimizedSearch(int a[], int target) {
        return OptimizedSearch(a, target, 0, a.size(), 0, true);
    }

    public int OptimizedSearch(int a[], int target, int start, int end, double density, boolean fromStart) {
        // Since density is different from the density in current target array, the search point calculated from density will
        // always start from last search point. fromStart records whether the last search point happens at start or end of
        // current array
        if (0 == density) { //Initial density
            density = (a[end] - a[start]) / (end - start);
        }

        int searchPoint;    
        if (fromStart) {
            searchPoint = start + ((target - a[start]) / density).intValue();
        }
        else {
            searchPoint = end - ((a[end] - target) / density).intValue();
        }

        if (a[searchPoint] == target) {
            return searchPoint;
        }
        else if (target < a[searchPoint]) {
            double currentDensity;
            if (end - searchPoint > searchPoint - start) {
                currentDensity = (a[searchPoint] - a[start]) / (searchPoint - start);
            }
            else {
                currentDensity = (a[end] - a[searchPoint]) / (end - searchPoint); 
            } //Density is always calculated from the smaller part since it will be more accurate. 
            return OptimizedSearch(a, target, start, searchPoint - 1, currentDensity, false);
        }
        else {
            double currentDensity;
            if (end - searchPoint > searchPoint - start) {
                currentDensity = (a[searchPoint] - a[start]) / (searchPoint - start);
            }
            else {
                currentDensity = (a[end] - a[searchPoint]) / (end - searchPoint); 
            } //Density is always calculated from the smaller part since it will be more accurate. 
            return OptimizedSearch(a, target, searchPoint + 1, end, currentDensity, true);
        }
    }

但是我真的很难计算复杂度。我觉得它应该低于log(N),但我无法证明这一点。有人可以帮忙吗?

伊娃(Ivaylo Strandjev)

这是插值搜索的一种实现,如果元素分布的近似值足够好,则具有复杂度log(log(n))。然而,证明这一点绝非易事。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

任何人都可以在dart中优化此代码。我正在为每个单词制作搜索过滤器

来自分类Dev

任何人都可以解释`$ {}`表示法,但我无法在Google上搜索该表示法

来自分类Dev

需要帮助进行搜索优化

来自分类Dev

任何人都可以降低我的代码的复杂性。Codeforces Round113 Div.2的问题E

来自分类Dev

MongoDb中优化复合索引搜索的算法

来自分类Dev

相关性的内部搜索优化

来自分类Dev

任何人都可以帮助我有关SQL查询的问题(在何处)

来自分类Dev

任何人都可以通过PIPELINED函数帮助我吗?

来自分类Dev

在viewpost.php遇到错误,任何人都可以帮助我

来自分类Dev

任何人都可以帮助我解决 Hibernate 和 JSF 的这个缺点吗?

来自分类Dev

任何人都可以帮助我在 intelliJ 中使用 GUI 页面

来自分类Dev

任何人都可以帮助 webapps 中的缓存过程吗?

来自分类Dev

任何人都可以帮助我们解决这些 Xcode 错误吗?

来自分类Dev

任何人都可以帮助我在 jQuery 中进行修剪吗?

来自分类Dev

任何人都可以帮助我使用 keras 合并层

来自分类Dev

任何人都可以帮助我在颤振中对齐布局吗?

来自分类Dev

我对执行流程感到震惊,任何人都可以帮助我

来自分类Dev

任何人都可以建议以下代码的时间复杂度

来自分类Dev

任何人都可以简化与计算车费有关的程序吗?

来自分类Dev

任何人都可以解释它+(+ i--)

来自分类Dev

任何人都可以逐步解释该过程

来自分类Dev

任何人都可以不登录就提交

来自分类Dev

任何人都可以解释以下声明

来自分类Dev

任何人都可以更正此代码吗?

来自分类Dev

任何人都可以处理吗?

来自分类Dev

推荐的用于控制域的本地搜索优化算法

来自分类Dev

二维数组搜索算法的优化

来自分类Dev

如何优化广度搜索算法以解决更大的迷宫

来自分类Dev

拼写检查算法如何优化其对建议单词的搜索?

Related 相关文章

  1. 1

    任何人都可以在dart中优化此代码。我正在为每个单词制作搜索过滤器

  2. 2

    任何人都可以解释`$ {}`表示法,但我无法在Google上搜索该表示法

  3. 3

    需要帮助进行搜索优化

  4. 4

    任何人都可以降低我的代码的复杂性。Codeforces Round113 Div.2的问题E

  5. 5

    MongoDb中优化复合索引搜索的算法

  6. 6

    相关性的内部搜索优化

  7. 7

    任何人都可以帮助我有关SQL查询的问题(在何处)

  8. 8

    任何人都可以通过PIPELINED函数帮助我吗?

  9. 9

    在viewpost.php遇到错误,任何人都可以帮助我

  10. 10

    任何人都可以帮助我解决 Hibernate 和 JSF 的这个缺点吗?

  11. 11

    任何人都可以帮助我在 intelliJ 中使用 GUI 页面

  12. 12

    任何人都可以帮助 webapps 中的缓存过程吗?

  13. 13

    任何人都可以帮助我们解决这些 Xcode 错误吗?

  14. 14

    任何人都可以帮助我在 jQuery 中进行修剪吗?

  15. 15

    任何人都可以帮助我使用 keras 合并层

  16. 16

    任何人都可以帮助我在颤振中对齐布局吗?

  17. 17

    我对执行流程感到震惊,任何人都可以帮助我

  18. 18

    任何人都可以建议以下代码的时间复杂度

  19. 19

    任何人都可以简化与计算车费有关的程序吗?

  20. 20

    任何人都可以解释它+(+ i--)

  21. 21

    任何人都可以逐步解释该过程

  22. 22

    任何人都可以不登录就提交

  23. 23

    任何人都可以解释以下声明

  24. 24

    任何人都可以更正此代码吗?

  25. 25

    任何人都可以处理吗?

  26. 26

    推荐的用于控制域的本地搜索优化算法

  27. 27

    二维数组搜索算法的优化

  28. 28

    如何优化广度搜索算法以解决更大的迷宫

  29. 29

    拼写检查算法如何优化其对建议单词的搜索?

热门标签

归档