与整数数组的最大子阵

编程入门 行业动态 更新时间:2024-10-11 13:22:47
本文介绍了与整数数组的最大子阵的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

在接受记者采访时我的一个朋友被要求找到最大和数组的子数组,这是我解决问题的办法,我怎么能改进解决方案,使其更优化,要我宁可考虑做一个递归的方式?

高清get_max_sum_subset(X):         max_subset_sum = 0         max_subset_i = 0         max_subset_j = 0         因为我在范围(0,len个(X)+1):             对于在范围Ĵ第(i + 1,的len(x)的1):                 current_sum = SUM(X [I:J])                 如果current_sum> max_subset_sum:                     max_subset_sum = current_sum                     max_subset_i = I                     max_subset_j = j的         返回max_subset_sum,max_subset_i,max_subset_j

解决方案

您的解决方案是O(n ^ 2)。最优解是线性的。它的工作原理,以便在扫描阵列,从左至右,注意到最好总和和当前总和:

高清get_max_sum_subset(X):     bestSoFar = 0     bestNow = 0     bestStartIndexSoFar = -1     bestStopIndexSoFar = -1     bestStartIndexNow = -1     对我的xrange(LEN(X)):         值= bestNow + X [I]         如果值GT; 0:             如果bestNow == 0:                 bestStartIndexNow = I             bestNow =价值         其他:             bestNow = 0         如果bestNow> bestSoFar:             bestSoFar = bestNow             bestStopIndexSoFar = I             bestStartIndexSoFar = bestStartIndexNow     返回bestSoFar,bestStartIndexSoFar,bestStopIndexSoFar

这个问题也是在Programming珍珠:算法设计技术(强烈推荐)。在那里,你还可以找到一个递归的解决方案,这是不是最佳的(为O(n log n)的),但为O更好的(N ^ 2)。

In an interview one of my friends was asked to find the subarray of an array with maximum sum, this my solution to the problem , how can I improve the solution make it more optimal , should i rather consider doing in a recursive fashion ?

def get_max_sum_subset(x): max_subset_sum = 0 max_subset_i = 0 max_subset_j = 0 for i in range(0,len(x)+1): for j in range(i+1,len(x)+1): current_sum = sum(x[i:j]) if current_sum > max_subset_sum: max_subset_sum = current_sum max_subset_i = i max_subset_j = j return max_subset_sum,max_subset_i,max_subset_j

解决方案

Your solution is O(n^2). The optimal solution is linear. It works so that you scan the array from left to right, taking note of the best sum and the current sum:

def get_max_sum_subset(x): bestSoFar = 0 bestNow = 0 bestStartIndexSoFar = -1 bestStopIndexSoFar = -1 bestStartIndexNow = -1 for i in xrange(len(x)): value = bestNow + x[i] if value > 0: if bestNow == 0: bestStartIndexNow = i bestNow = value else: bestNow = 0 if bestNow > bestSoFar: bestSoFar = bestNow bestStopIndexSoFar = i bestStartIndexSoFar = bestStartIndexNow return bestSoFar, bestStartIndexSoFar, bestStopIndexSoFar

This problem was also discussed thourougly in Programming Pearls: Algorithm Design Techniques (highly recommended). There you can also find a recursive solution, which is not optimal (O(n log n)), but better than O(n^2).

更多推荐

与整数数组的最大子阵

本文发布于:2023-11-29 04:29:05,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1645282.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:大子   整数   数组

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!