Мне нужно немного намека на реализацию этого алгоритма в C. Это проблема с максимальным подмассивом. Я сделал программу полиномиального времени, а также программу линейного времени. Я новичок в C, поэтому я не знаю, как вернуть несколько значений из функции, как этого требует этот алгоритм. Например, эта строка в алгоритме (слева-слева, слева-вверх, левая-сумма) = НАЙТИ-МАКСИМАЛЬНАЯ СУБРАРИВАЯ (A, низкая, средняя), где FIND-MAX-SUBARRAY (A, низкий, средний) является вызовом рекурсивной функции.Возврат кортежа из функции в C
Это алгоритм из coremen:
Ниже я поставил глобальных переменных кросс-низкий, кросс-высокий, кросс-сумму. Как я могу сделать то же самое для 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
Вы должны включить всю необходимую информацию ** в ** Вы сомневаетесь текст. Не просто отправляйте ссылки! – Olaf