Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2014, 01:18   #1
nelo_001
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 58
По умолчанию Еврейский алгоритм (жадный) обьясните код

Это Дан массив из N целых чисел. Найти три числа, произведение которых максимально.
Код:
var
   n : longint; 
   max1, max2, max3 ,pr : longint;
   min1, min2 : longint;
     
   k : integer; 
   i : longint;
begin
     assign(input, 'input.txt');
     reset(input);
     assign(output, 'output.txt');
     rewrite(output);
     max1 := -10000; max2 := max1; max3 := max1;
     min1 := 10000; min2 := min1;
     readln(n);
    
     for i:=1 to n do
      begin
         read(k);
         if k > max1 then 
           begin 
 max3 := max2; max2 := max1; max1 := k; 
           end 
         else
         if k > max2 then 
           begin 
 max3 := max2; max2 := k; 
           end 
         else
         if k > max3 then 
              max3 := k;

         if k < min1 then 
          begin 
              min2 := min1; min1 := k; 
          end 
         else
         if k < min2 then 
              min2 := k;
      end;

      if (max1 > 0) and (min1*min2 > max2*max3) then
         writeln(max1, ' * ', min1, ' * ', min2)
      else
      begin
         write(max1, ' * ', max2, ' * ', max3); 
          pr:=max1*max3*max2;
          write (' = ',pr);
      
      close(input);
      close(output);
      end;
end.

Последний раз редактировалось Stilet; 28.06.2014 в 09:03.
nelo_001 вне форума Ответить с цитированием
Старый 28.06.2014, 09:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если я правильно понял то нет тут никакого массива... А сам алгоритм прост: Есть три переменные. Берется первое число. Если оно больше чем первая переменная, то значение первой переменной переходит во вторую переменную, а перед этом значение второй переходит в третью, сохраняя а-ля стеком данные. И так для каждой переменной. После чего число попадает в первую (или вторую смотря какая переменка сравнивается) переменную. Таким образом:
Код:
Число 1М 2М 3М
  1      0    0   0
  2      2    0   0
  3      3    2   0
  8      8    3   2
  4      8    4   3
  6      8    6   4
Т.е. переменные как бы раздвигают свои значения. Если первая больше - раздвигается вторая, если вторая больше подвигается третья.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.06.2014, 12:17   #3
SlavaSSU
Пользователь
 
Регистрация: 15.04.2012
Сообщений: 46
По умолчанию

это решение неверно, если есть отр. элементы
НИУ СГУ им. Чернышевского
SlavaSSU вне форума Ответить с цитированием
Старый 28.06.2014, 12:59   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
решение неверно, если есть отр. элементы
Почему не верно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.06.2014, 19:29   #5
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Почему не верно?
наверное имеется ввиду случай когда лучше взять 2 отрицательных числа и третье положительное (- на - дают +), чем 2 положительных (но больше) и одно отриц...

к примеру
-4 3 2 -9
по вашему принципу возьмет -4 3 2
но наиболее подходящий вариант -9 -4 3
или

-2 4 5 -9 -18 8
если брать по возрастанию только
8 5 4
хотя лучше было бы -18 -9 5

а когда все числа отрицательные или все числа положительные, то вышеупомянутый вами вариант подходит.
пишу код не только за печеньки

Последний раз редактировалось VIK_aka_TOR; 28.06.2014 в 19:31.
VIK_aka_TOR вне форума Ответить с цитированием
Старый 28.06.2014, 19:59   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
VIK_aka_TOR
Нда, действительно... Школа по мне плачет. В плане математики...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.06.2014, 20:13   #7
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Это не жадный алгоритм ИМХО.

Жадный алгоритм должен содержать какое-то предположение, на основе которого сокращается перебор и, соответственно, уменьшается сложность.

Тут я ничего такого не вижу.
rrrFer вне форума Ответить с цитированием
Старый 28.06.2014, 21:01   #8
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

к примеру можно отсортировать массив по убыванию
и затем уже смотреть, что больше
произведение первый трех (когда там все положительные), или первого и последних двух (положительное и два отрицательных)
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 28.06.2014, 21:14   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,316
По умолчанию

VIK_aka_TOR, если смотреть именно на такие произведения, то именно они и рассматриваются в исходном коде, но без сортировки массива.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 28.06.2014, 21:17   #10
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
VIK_aka_TOR, если смотреть именно на такие произведения, то именно они и рассматриваются в исходном коде, но без сортировки массива.
ну если сортировать, то и код меньше будет... и думаю быстродействие более менее (тут уже смотря какую сортировку взять)... ну а по правильности думаю будет норм... если чисел будет больше 3 )
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Жадный алгоритм на графе slimper86 Помощь студентам 4 27.06.2013 09:31
Жадный алгоритм? Loki_veil Помощь студентам 0 27.06.2012 12:05
Жадный алгоритм(Delphi) maddanil Помощь студентам 0 26.05.2012 17:59
Жадный алгоритм merhaba1992 Помощь студентам 1 05.11.2011 00:24
Жадный алгоритм и перебор mailjaffka Помощь студентам 10 17.05.2010 16:20