Показать сообщение отдельно
  #1  
Старый 06.10.2011, 20:22
U.B.M. U.B.M. вне форума
Новичок
 
Регистрация: 06.10.2011
Сообщения: 94
Версия Delphi: Delphi 7
Репутация: 13
По умолчанию Переполнение стэка

Встретился с проблемкой одной... Нужно определить минимальное значение элементов дико огромного массива (порядка 1 млн элементов ).

Простецкая функция нижеуказанного вида работает только для 100тыщ элементов, а для 1млн выдает ошибку о переполнении стэка.

Код:
function _Find_Min(_data: array of integer): integer;
var
  _i, _value : integer;
begin
  _value := _data[0];

  for _i := 1 to Length(_data)-1 do
    _value := min(_value, _data[_i]);

  _Find_Min := _value;
end;

Вижу несколько вариантов решения:
1. в динамическую память запихать этот массив (слышал краем уха про это где-то);
2. рекурсивно как-нибудь задать функцию чтоб она била массив напополам и от половинок минимум искала в самой себе (но с точки зрения кол-ва операций выигрыша практически нет), так что скорее всего не прокатит.

Граждане форумчане, если можете предложить другой приемлемый вариант буду крайне признателен.
Ответить с цитированием