- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
对于具有整数值的 NxM 矩阵,找到区域 (x1,y1) (x2,y2) 的最小元素的最有效方法是什么,其中 0 <= x1<=x2 < M 且 0 <= y1 <= y2
我们可以假设我们将多次查询不同的区域。
我想知道我们是否可以将范围最小查询方法扩展到这个问题。 http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=lowestCommonAncestor
非常简单的解决方案可以是使用最有效的 RMQ 解决方案 (Segment Tree),然后按行或按列应用它。
最坏情况下的复杂度为 min(N,M)*log(max(N,M))
但我仍然相信我们可以做得更好。
最佳答案
这取决于您所说的“最有效的方式”是什么意思。可以最大限度地减少查询时间本身、预处理时间或内存需求。
如果只想尽量减少查询时间,“最有效的方法”是预先计算所有可能的区域。然后通过返回一些预先计算的值来处理每个查询。查询时间为 O(1)。内存和预处理时间都很大:O((NM)2).
更实用的是使用Sparse Table algorithm来自OP中提到的页面。该算法准备了一个包含所有二次方长度区间的表,并使用一对这些区间来处理任何范围最小查询。查询时间为 O(1)。内存和预处理时间为 O(N log N)。并且该算法可以很容易地扩展到二维情况。
只需准备一个包含所有长度的二次方和高度的二次方的矩形的表格,并使用其中的四个矩形来处理任何范围最小查询。对于这些矩形中的每一个,结果只是至少四个最小值。查询时间为 O(1)。内存和预处理时间为O(NM*log(N)*log(M))。
本文:"Two-Dimensional Range Minimum Queries" by Amihood Amir, Johannes Fischer, and Moshe Lewenstein建议如何将该算法的内存需求和预处理时间减少到几乎 O(MN)。
本文:"Data Structures for Range Minimum Queries in Multidimensional Arrays" by Hao Yuan and Mikhail J. Atallah给出了具有 O(1) 查询时间和 O(NM) 内存和预处理时间的不同算法。
关于algorithm - 如何找到矩阵区域中的最小或最大元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14246443/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!