【发布时间】:2016-03-26 17:50:12
【问题描述】:
我需要一些提示来在 C 中实现这个算法。这是一个最大子数组问题。我制作了多项式时间程序和线性时间程序。我是 C 新手,所以我不知道如何从函数返回多个值,因为该算法需要它。例如算法中的这一行 (left-low,left-high,left-sum)=FIND-MAXIMUM-SUBARRAY(A,low,mid) 其中 FIND-MAX-SUBARRAY( A,low,mid)是递归函数调用。
这是 coremen 的算法:
下面我设置了全局变量 cross-low,cross-high,cross-sum 。我怎样才能为 left-low,left-high,left-sum 和 right-low,right-high,right-sum 做同样的事情?
#include "max_subarray_common.h"
#define SENTINAL -3000
int left_low,left_high,left_sum;
int right_low,right_high,right_sum;
int cross_low,cross_high,cross_sum;
void max_crossing_subarray(int low,int mid,int high)
{
int left_sum=SENTINAL;
int sum=0;
int max_left=low,max_right=high;
for(int i=mid;i>=low;i--)
{
sum=sum+change[i];
if(sum>left_sum)
{
left_sum=sum;
max_left=i;
}
}
int right_sum=0;
sum=0;
for(int j=mid+1;j<=high;j++)
{
sum=sum+change[j];
if(sum>right_sum)
{
right_sum=sum;
max_right=j;
}
}
cross_low=max_left;
cross_high=max_right;
cross_sum=left_sum+right_sum;
}
这是我的头文件:
#ifndef max_subarray_h
#define max_subarray_h
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
extern int price[];
extern int n;
extern int change[];
extern int from;
extern int to;
extern int max;
void init_change();
void max_subarray_poly();
void max_subarray_crossing();
void max_subarray_rec();
void max_crossing_subarray();
#endif
change[] 是要为其找到子数组的数组。我的输出也应该是这样的:
from=8
to=11
maximum profit=43
【问题讨论】:
-
您应该在问题文本中包含所有必需的信息。不要只是发布链接!
标签: c