找到最大跨度 (i,j) 的最快算法,使得 , ai + ai+1 +....+aj = bi +数组 a 和 b 中的 bi+1 +....+bj
我在准备考试时遇到了这个问题。
给定两个数字数组 a1,..., an 和 b1,....,bn,其中每个数字都是 0 或 1,找到最大跨度 (i,j) 的最快算法,使得 , ai + ai+1 +....+aj = bi + bi+1 +....+bj 或报告不存在这样的跨度。
(A) 如果允许散列,则需要 O(3^n) 和 omega(2^n) 时间。
(B) 在密钥比较模式下需要 O(n^3) 和 omega(n^2.5) 和时间
(C) 需要 theta(n) 时间和空间
(D) 仅需要 O(square-root(n)) 时间如果2n个元素的和是偶数。
I encountered this problem while preparing for my exams.
Given two arrays of numbers a1,..., an and b1,....,bn where each number is 0 or 1, the fastest algorithm to find the largest span (i,j) such that , ai + ai+1 +....+aj = bi + bi+1 +....+bj or report that there is not such span.
(A) Takes O(3^n) and omega(2^n) time if hashing is permitted.
(B) Takes O(n^3) and omega(n^2.5) and time in the key comparison mode
(C)Takes theta(n) time and space
(D)Takes O(square-root(n)) time only if the sum of 2n elements is an even number.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是一个 O(n) 算法,
Here is an O(n) algorithm,
如果有人愿意做正确的检查,我能想到的唯一解决方案是 O(n^2) 和 omega(n) 时间。如果有人设法找到一种方法来利用所有 0 和 1 的值,那么它可能会得到改进。
The only solution I can think of has O(n^2) and omega(n) time if anybody bothers to do the right check. It could probably be improved if anybody manages to find a way to take advantage of all values being 0 and 1.
该问题可以在θ(n)时间和空间内得到解决。
对于两个数组。
算法:
curr_diff 的点为-1,更新起始点为 i
The problem can be solved in θ(n) time and space.
for both arrays.
algorithm:
point of curr_diff is -1, update starting point as i