当前位置: 首页 > 知识库问答 >
问题:

提取最小值和最大值的最有效方法是什么

欧阳意蕴
2023-03-14

给定一个向量

到目前为止,我想出的最好的主意是一个接一个地调用std::nth_element 3次。但这仍然需要3N比较,对吧?有没有办法重用在以前的迭代中完成的部分排序


共有2个答案

仲孙向明
2023-03-14
匿名用户

另一个选项是为< code>std::nth_element指定一个自定义比较,它捕获最小值和最大值。它可能会做更多的比较和分支,所以在某些特定的硬件上可能会慢一些,这可能取决于你的数据被缓存了多少等等。,所以——一如既往——如果您有理由关心的话,可以进行基准测试,但是对于非空的< code > vector < code > a 来说,技术是这样的:

int min = a[0], max = a[0];
std::nth_element(a.begin(), a.begin() + n, a.end(),
    [&](int lhs, int rhs) {
        min = std::min(min, std::min(lhs, rhs));
        max = std::max(max, std::max(lhs, rhs));
        return lhs < rhs;
    });

不管它值多少钱,在我的(~10yo i5-660)HTPC上,使用GCC 7.4,100万随机ints介于0和1000之间,nth_。

章景同
2023-03-14

使用<code>std::n_。

如果您需要它比这更快,那么请根据std::nth_element滚动您自己的版本。

 类似资料:
  • 问题内容: 是否有一种简洁的方法可以一次性提取流的最小值和最大值(基于某个比较器)? 似乎有很多方法可以分别获取最小值和最大值,或者我可以将流分类为一个临时对象,例如: 但这并不简洁,需要分配一个临时对象。我宁愿不分配一个临时对象,也不希望两次通过流。有其他选择吗? 问题答案: 如果这是经常需要的功能,我们最好做一个。我们将需要一个类来保存,并需要使用工厂方法来创建统计收集器。 (也许更好的便捷方

  • 是否有一种简洁的方法可以在一次过程中提取流的最小值和最大值(基于某个比较器)? 似乎有很多方法可以单独获取最小值和最大值,或者我可以将流排序为临时对象,例如: 但这并不简洁,需要分配一个临时对象。我宁愿不要分配一个临时对象,也不要在流中进行两次传递。有其他选择吗?

  • 问题内容: 我正在寻找python中整数的最小值和最大值。例如,在Java中,我们有和。python中是否有类似的东西? 问题答案: Python 3 在Python 3中,此问题不适用。普通int类型是无界的。 但是,你实际上可能正在寻找有关当前解释器的字长的信息,在大多数情况下,该信息将与机器的字长相同。该信息在Python 3中仍以形式提供,这是一个有符号的单词可以表示的最大值。等效地,它是

  • 主要内容:普通算法,分治算法程序中,我们经常使用数组(列表)存储给定的线性序列(例如 {1,2,3,4}),那么如何查找数组(序列)中的最大值或者最小值呢? 查找数组(序列)中最大值或最小值的算法有很多,接下来我们以 {3,7,2,1} 序列为例讲解两种查找最值的算法,一种是普通算法,另一种是借助 分治算法解决。 普通算法 普通算法的解决思路是:创建两个变量 max 和 min 分别记录数组中的最大值和最小值,它们的初始值都

  • 我试图了解两个线程是更新的的可能值是什么,当我运行程序时输出总是20,但我想了解为什么它会发生以及什么是mimumum,的最大值

  • 我有一个Java计算问题,其中我得到了一个整数数组: 例如: 3-2-10 0 1 我应该计算出可以从这些整数形成的最小整数和最大三元组是什么。(在这种情况下,最小值=-30,最大值=60) 我最初认为最大值总是正的,最小值总是负的。 因此, 我最初的算法是: 扫描数组并取出其中的3个最大元素,存储到数组中。 同时,取出里面的3个最小的元素,存储到另一个数组中。 通过不等式,我们可以推断如下: v