Re: Ускорение поиска максимума...
- From
- Yurij Zabelyshynskij ()
- To
- Andrew Starsh
- Date
- 2002-12-23T22:17:47Z
- Area
- RU.ALGORITHMS
From: "Yurij Zabelyshynskij" <ergo@sky.net.ua>
Hi, Andrew.
Andrew Starsh wrote
>> Меньше нельзя (только при нечетном N должно
>> быть 1.5N - 1.5).
> Увы, Вы забыли, что может быть нечетное число,
Судя по моей фразе, как раз не забыл.
> Ваш коppеспондент забыл посчитать еще одно сpавнение.
Т.к. "мой корреспондент" не написал свой алгоритм, то мы не можем
говорить, что он забыл, а что нет.
> var
> N,c,min,max:byte;
> m:array[1..255] of byte;
> s:word;
> BEGIN
> n:=1;
> while n>0 do
> begin
> writeln('Введите N, выход - 0');
> readln(n);
> (* for c:=1 to n do m[c]:=c;*)
> for c:=1 to n do m[n-c+1]:=c;
И что же будет, если пользователь введет n=300?
> s:=1;
> if m[1]>m[n] then
Это лишнее: ведь только что мы присвоили
m[1] := n, m[n] := 1
> begin
> min:=m[n];
> max:=m[1];
> end
> else
> begin
> min:=m[1];
> max:=m[n];
> end;
> for c:=2 to (n div 2) do
> begin
> s:=s+3;
> if m[c]>m[n-c] then
> begin
> if m[c]>max then max:=m[c];
> if m[n-c]<min then min:=m[n-c];
> end
> else
> begin
> if m[n-c]>max then max:=m[n-c];
> if m[c]<min then min:=m[c];
> end;
> end;
А как же m[n-1]? Оно вообще ни с чем не сравнивается?
> s:=s+1;
> if (n div 2)<>(n/2) then
Т.е. Вы считаете еще проверку n на четность? Это лежит несколько в
стороне от задачи, потому что имеются в виду сравнения элементов
массива. Иначе надо еще учитывать, например, проверку выхода из цикла.
> [...]
В остальном идея правильная, но если уж писать код, то его проверять
нужно.
> Пpиятная задачка, хотелось бы веpить, что можно за
> меньшее число сpавнений...
Вы, видимо, плохо читали мое сообщение. Я в нем написал, что за
меньшее количество сравнений это невозможно сделать.
--
WBR, Yura.
--- ifmail v.2.15dev5
* Origin: Demos online service (2:5020/400)