【发布时间】:2018-03-25 02:27:22
【问题描述】:
我想编写一个算法来查找 100000 个数组的最小值和最大值 100000 大小为 1000,包含从 1 到 1000 的随机数。该算法假设返回比较的平均次数。
假设我使用复杂度为 O(n) 的简单解决方案,那么平均比较次数应该是多少? 1999 年还是 2000 年(最小和最大)?
我也想问一下如何在cpp中创建一个随机数组。
【问题讨论】:
我想编写一个算法来查找 100000 个数组的最小值和最大值 100000 大小为 1000,包含从 1 到 1000 的随机数。该算法假设返回比较的平均次数。
假设我使用复杂度为 O(n) 的简单解决方案,那么平均比较次数应该是多少? 1999 年还是 2000 年(最小和最大)?
我也想问一下如何在cpp中创建一个随机数组。
【问题讨论】:
您必须将每个元素比较两次(一次与当前最小值,一次与当前最大值)。
这不是“幼稚”,而是找到未排序数字的最小值和最大值的最佳方法。
【讨论】:
天真和简单/最佳之间有很大的区别,寻找其他解决方案总是好的,但并不总是能找到更好或更优化的解决方案。
至于您的问题,您必须将它们比较两次,一次为最小值,一次为最大值
【讨论】:
好吧,我不同意 Sid 的回答,因为用 max 和 min 检查每个元素是最佳的。
首先,您可以取前两个元素并比较它们,并将一个设置为最小值,另一个设置为最大值。
然后您可以轻松地在循环中一次取 2 个元素,将它们一起比较,然后检查较小的元素与最小值,较大的元素与最大值。
因此,在 2 个元素上,您只有 3 个比较。
这比检查每个数字的最小值和最大值要好,因为您对 2 个元素进行了 4 次比较。
【讨论】: