小编gui*_*gis的帖子

获得最大总和的子矩阵?

输入:二维数组NxN - 矩阵 - 具有正负元素.

输出:任何大小的子矩阵,使得其总和是所有可能子矩阵中的最大值.

要求:算法复杂度为O(N ^ 3)

历史:在Algorithmist,Larry和Kadane算法的修改的帮助下,我设法解决了部分问题,即仅在Java中确定求和.
感谢Ernesto设法解决问题的其余部分,即确定矩阵的边界,即左上角,右下角 - 在Ruby下面.

algorithm max dynamic-programming submatrix

63
推荐指数
4
解决办法
6万
查看次数

在循环排序数组中搜索元素

我们希望在复杂度不大于的循环排序数组中搜索给定元素O(log n).
示例:搜索13{5,9,13,1,3}.

我的想法是将循环数组转换为常规排序数组,然后对结果数组进行二进制搜索,但我的问题是我提出的算法是愚蠢的,它O(n)在最坏的情况下采取:

for(i = 1; i < a.length; i++){
    if (a[i] < a[i-1]){
        minIndex = i; break;
    }
}
Run Code Online (Sandbox Code Playgroud)

那么第i个元素的相应索引将由以下关系确定:

(i + minInex - 1) % a.length
Run Code Online (Sandbox Code Playgroud)

很明显,我的转换(从循环到常规)算法可能需要O(n),所以我们需要一个更好的.

根据ire_and_curses的想法,这是Java中的解决方案:

public int circularArraySearch(int[] a, int low, int high, int x){
    //instead of using the division op. (which surprisingly fails on big numbers)
    //we will use the unsigned right shift to get the average
    int mid = (low + high) >>> 1; …
Run Code Online (Sandbox Code Playgroud)

algorithm binary-search circular-buffer

27
推荐指数
4
解决办法
3万
查看次数

查找给定数组的每个(n-1)个子集的乘积

我很抱歉删除了原来的问题,这里是:我们有一个包或一组n个整数,我们需要找到每个(n-1)个子集的乘积.例如:

S = {
1,0,3,6 } ps [1] = 0*3*6 = 0;
ps [2] = 1*3*6 = 18; 等等

经过讨论,我们需要处理这三个案例,并在下面说明如下:

1. S is a set (contains one zero element)
  for i=1 to n
    if s[i]=0
      sp[i] = s[1] * s[2] * ...* s[i-1] * s[i+1] *.....*s[n]
    else
      sp[i] = 0;

2. S is a bag (contains more than one zero element) 
  for i=1 to n
      sp[i] = 0;

3. S is a set (contains no zero elements)
   product = 1 …
Run Code Online (Sandbox Code Playgroud)

algorithm subset

7
推荐指数
3
解决办法
3984
查看次数