C 寻找最大值

C 寻找最大值,c,C,一个数组中输入了1000万个元素(没有内存限制)。正如我们所知,在输入元素时,只要输入值,我们就可以通过检查来更新输入值的最大值 但是想象一下,如果最大值的位置在900万左右 如果我移除800万到1000万个位置的200万个元素 不做任何比较,我们应该得到下一个最大值。 这是否意味着在输入数据时,我们应该有一个计划,以某种方式组织数据,以从剩余数据中获取最大值 删除和插入将继续发生,但我们应该用更少的步骤在更短的时间内更新新的/剩余的最大值。(使用多个堆栈可能会有所帮助。)为此,您还可以按排序顺

一个数组中输入了1000万个元素(没有内存限制)。正如我们所知,在输入元素时,只要输入值,我们就可以通过检查来更新输入值的最大值

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

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


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

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

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

请不要对堆栈溢出使用本地俚语(“lac”)。@Jongware:美国人什么时候也会停止对堆栈溢出使用本地俚语?比如10亿-10^9或10^12?还是像ºF、英寸、英尺和英里这样奇怪的单位而不是国际标准单位?但如果他们没有拼错当地的术语,这会有所帮助。@JonathanLeffler:我根本不知道lac是什么,只是对英里和英寸有一个模糊的概念。如果一个问题涉及到“十亿个项目”,而实际价值是相关的,我会问。如果你不同意,那么我会在接下来的回答中加入一些荷兰术语。你可以在维基百科上找到“crore”和“lakh”。我没有找到“lac”的定义,它是一个数字单位。不幸的是,英国人放弃了将“十亿”定义为10^12(100万的两倍指数,10^6)和将“万亿”定义为10^18(100万的三倍指数)的明智定义,而选择了语言不那么健全的美国版本。所以,我认为这不是一个特别好的论点。奥托,很少有地方使用“英制”单位(英寸,华氏度),美国是主要的反对者(英国在道路上仍然使用英里,但在其他方面是公制的)。我不相信,@Naveen,你可以轻松地做你想做的事。您肯定需要一个数据结构,该结构设计用于处理此类块删除,同时保留有关“接近最大”值的信息。顺便说一下,我不确定您是否需要一个树或堆结构,或者其他什么。您需要根据插入该值的记录的大小和索引号进行索引。通过重新读取数据或重新处理已读取的数据来重新建立最大值可能会更快。但我并没有去寻找这样的数据结构。按排序顺序插入数组会带来一些问题。首先,也是最重要的一点,您如何识别数组中的哪些元素被插入到数据集中的800万到100万行之间(以便以后可以删除它们)。问题说,这通常适用,因为会重复删除。其次,在插入过程中,对数组进行无序排列以保持数据的有序性可能会导致二次行为,而在要加载大量行的情况下,二次行为将很重要。