Algorithm 处理「;“更新要素”&&引用;获取所有元素中的最小值“;高效查询 问题:
给您一个数组Algorithm 处理「;“更新要素”&&引用;获取所有元素中的最小值“;高效查询 问题:,algorithm,performance,minimum,Algorithm,Performance,Minimum,给您一个数组a=[a0,a1,…,an-1],处理这些Q查询。查询有以下两种类型: 给定两个整数i和x,将ai更新为x 查找数组中所有元素的最小值 我已经知道使用段树(范围最小查询)的算法,时间复杂度是O(nlogn)。但这种方法也可以计算任何部分中的最小值,所以我认为有一种更简单、性能更好的方法可以处理这两种类型的查询 还有其他解决方法吗?使用数组和最小堆,并引用数组中的堆 数组具有按索引排列的元素(它基本上是您拥有的实际数组),堆按值排序,因此最小值始终位于顶部。您可以将每个数组元素的引
a=[a0,a1,…,an-1]
,处理这些Q
查询。查询有以下两种类型:
- 给定两个整数
和i
,将x
更新为ai
x
- 查找数组中所有元素的最小值
O(nlogn)
。但这种方法也可以计算任何部分中的最小值,所以我认为有一种更简单、性能更好的方法可以处理这两种类型的查询
还有其他解决方法吗?使用数组和最小堆,并引用数组中的堆 数组具有按索引排列的元素(它基本上是您拥有的实际数组),堆按值排序,因此最小值始终位于顶部。您可以将每个数组元素的引用(指针)添加到堆中对应的节点,以便在那里轻松找到它 要执行第一个查询,请访问索引
i
处的数组,并将元素值设置为x
(在索引验证和所有这些之后)。然后更新堆中ai
指向的节点并进行heapify。这将花费O(logn)
要执行第二个查询,只需从堆中获取最小值。O(1)。您想要在线算法还是离线算法?