【问题标题】:finding the average number of comparisons查找平均比较次数
【发布时间】:2018-03-25 02:27:22
【问题描述】:

我想编写一个算法来查找 100000 个数组的最小值和最大值 100000 大小为 1000,包含从 1 到 1000 的随机数。该算法假设返回比较的平均次数。

假设我使用复杂度为 O(n) 的简单解决方案,那么平均比较次数应该是多少? 1999 年还是 2000 年(最小和最大)?

我也想问一下如何在cpp中创建一个随机数组。

【问题讨论】:

    标签: c++ algorithm


    【解决方案1】:

    您必须将每个元素比较两次(一次与当前最小值,一次与当前最大值)。

    这不是“幼稚”,而是找到未排序数字的最小值和最大值的最佳方法。

    【讨论】:

    • 如何证明?
    • 如果元素匹配最小值,最好不要检查最大值 - 反之亦然。尽管平均而言,改进可以忽略不计。
    【解决方案2】:

    天真和简单/最佳之间有很大的区别,寻找其他解决方案总是好的,但并不总是能找到更好或更优化的解决方案。

    至于您的问题,您必须将它们比较两次,一次为最小值,一次为最大值

    【讨论】:

      【解决方案3】:

      好吧,我不同意 Sid 的回答,因为用 max 和 min 检查每个元素是最佳的。

      首先,您可以取前两个元素并比较它们,并将一个设置为最小值,另一个设置为最大值。

      然后您可以轻松地在循环中一次取 2 个元素,将它们一起比较,然后检查较小的元素与最小值,较大的元素与最大值。

      因此,在 2 个元素上,您只有 3 个比较。

      这比检查每个数字的最小值和最大值要好,因为您对 2 个元素进行了 4 次比较。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-22
        • 1970-01-01
        • 1970-01-01
        • 2017-11-11
        • 1970-01-01
        • 2017-07-31
        • 1970-01-01
        • 2021-12-22
        相关资源
        最近更新 更多