【问题标题】:Finding maximum value [duplicate]找到最大值[重复]
【发布时间】:2015-06-07 01:15:58
【问题描述】:

一千万个元素被输入到一个数组中(没有内存限制)。众所周知,在输入元素时,我们可以在输入值时通过检查来更新输入值的最大值。

但是想象一下,如果最大值的位置在 900 万左右

如果我删除位置 8 到 1000 万的 200 万个元素 不做任何比较,我们应该有下一个最大值。 这是否意味着在输入数据时,我们应该计划以某种方式组织数据以从剩余数据中获取最大值?

删除和插入将继续发生,但我们应该在更短的时间内以更少的步骤更新新的/剩余的最大值。 (使用多个堆栈可能会有所帮助。)

【问题讨论】:

  • 请不要在 Stack Overflow 上使用当地俚语(“lac”)。
  • @Jongware:美国人什么时候会停止在 Stack Overflow 上使用当地俚语?像十亿这样的东西——10^9 还是 10^12?或者像 ºF 和英寸、英尺和英里这样的奇怪单位,而不是国际标准单位?但是,如果他们没有拼错当地术语,那将会有所帮助。
  • @JonathanLeffler:我完全不知道 lac 是什么,只有 mileinch的模糊概念>。如果一个问题涉及“十亿项”并且实际价值是相关的,我会问。如果你不同意,那么我会在我的下一个答案中加入一些荷兰术语。
  • 您可以在 Wikipedia 上找到“crore”和“lakh”。我没有找到作为数字单位的“lac”的定义。而且,不幸的是,英国人放弃了他们对“十亿”的合理定义为 10^12(一百万的指数的两倍,10^6)和“万亿”为 10^18(一百万的指数的三倍)。偏爱语言不太健全的美国版本。所以,这对我来说不是一个特别好的论点。 OTOH,很少有地方使用“英制”单位(英寸、华氏度),而美国是主要的反对者(英国在道路上仍然使用英里,但其他地方是公制)。
  • 我不相信,@Naveen,你可以轻松地做你想做的事。您当然需要一种数据结构,该结构旨在处理此类块删除,同时保留有关“接近最大值”值的信息。副手,我不确定你是否需要树或堆结构,或其他东西。您需要根据插入值的记录的大小和索引号来索引。通过重新读取数据或重新处理已经读取的数据来重新建立最大值可能会更快。但是我并没有去寻找这样的数据结构。

标签: c


【解决方案1】:

为此,您还可以通过按排序顺序插入数组中的值来做到这一点,这意味着检查插入元素在排序表单中的正确位置。

【讨论】:

  • 按排序顺序插入数组会带来一些问题。首先,也是最严重的,你如何识别数组的哪些元素被插入到数据集中的 800 万到 1000 万行之间(以便以后可以删除它们)。问题说,这通常适用,因为会重复删除。其次,对数组进行打乱以使数据保持排序顺序可能会导致插入期间的二次行为,并且要加载大量行,二次行为会很重要。
【解决方案2】:

如果块删除是一种常见操作,您可以维护列表跨度最大值的层次结构。对于每次编辑,您都必须更新该数据,但如果您简单地遍历 m 个删除列表,将它们从堆中逐个删除,则类似于 O(log n) 而不是 O(m log n)。

【讨论】:

    猜你喜欢
    • 2015-02-18
    • 2023-03-18
    • 1970-01-01
    • 2018-08-22
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 2021-02-24
    相关资源
    最近更新 更多