imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 28.06.2004, 19:33     # 1
Perfilev
Junior Member
 
Регистрация: 28.12.2002
Сообщения: 178

Perfilev Известность не заставит себя ждать
Exclamation Задача о рюкзаке, ПОМОГИТЕ!!!

Нужна программа (исходник, желательно на си или паскале) решающая задачу о рюкзаке:
X=(1,2,3,...,N), A принадлежит множеству {0, 1};
sum(X[i]*a[i])=s;
Найти подпоследовательности размерности K (K<=N), сумма которых была бы равной S.

Помогите пожалуйста, а то экзамен завалю!!!
Perfilev вне форума  
Старый 28.06.2004, 22:29     # 2
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

EvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собой
А подробнее можно? Что за задача о рюкзаке?
EvroStandart вне форума  
Старый 28.06.2004, 23:00     # 3
LN berf
Member
 
Аватар для LN berf
 
Регистрация: 05.08.2003
Сообщения: 290

LN berf Луч света в тёмном царствеLN berf Луч света в тёмном царствеLN berf Луч света в тёмном царствеLN berf Луч света в тёмном царствеLN berf Луч света в тёмном царстве
Andy1

Может попроще расскажешь?. Размерность это сама одна большая задача
Расскажи детально.
__________________
Кончив одно дело, начинай другое.
LN berf вне форума  
Старый 28.06.2004, 23:25     # 4
Perfilev
Junior Member
 
Регистрация: 28.12.2002
Сообщения: 178

Perfilev Известность не заставит себя ждать
Вот по-другому:
Алгоритм решает задачу о рюкзаке, которая формулируется так: дан, упорядоченный по неубыванию, массив A вещественных положительных чисел и некоторое Sum, необходимо найти все подпоследовательности массива A, сумма элементов которых равна в точности Sum.
В результате работы алгоритма получаем переменную L равную количеству найденых последовательностей. Сами последовательности помещаются в масcив строк Results, каждая строка представляет номера элементов массива A, разделенные запятыми.

В нете много ссылок на алгоритмы, а самой проги нет
Вот ссылка, например: http://alglib.manual.ru/combinatorial/backpack.php

Вот ещё кое-что: http://www.isu.ru/~slava/teach/school/comb_ret.htm
Просто сам уже не успеваю прогу написать, теории учить ещё до фига!

Если чё, я в асе: 86835583

Можно, чтобы она(прога) работала по неоптимальному алгоритму, главное, чтобы работала и была не слишком запутана!
Perfilev вне форума  
Старый 29.06.2004, 08:20     # 5
SwiMMeR
::VIP::
Отыпный Саводод
 
Аватар для SwiMMeR
 
Регистрация: 27.10.2002
Адрес: Краснодар, Россия
Пол: Male
Сообщения: 452

SwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собой
Andy1
Задача о рюкзаке немного отличается от описанной тобой задачи.

Задача о рюкзаке:
Есть некоторое количество предметов, которые можно уложить в рюкзак. Для каждого предмета указан коэффициент полезности и его объем. Собрать рюкзак так, чтобы объем предметов не превышал указанный объем рюкзака и суммарная полезность предметов была максимальной.
__________________
The Information will be FREE!
SwiMMeR вне форума  
Старый 29.06.2004, 11:07     # 6
SwiMMeR
::VIP::
Отыпный Саводод
 
Аватар для SwiMMeR
 
Регистрация: 27.10.2002
Адрес: Краснодар, Россия
Пол: Male
Сообщения: 452

SwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собой
За неимением Pascal'я код на VisualBasic'е ...
Код:
 Public Sub Main()
  ' Определение переменных и заполнение массивов
  Dim X(), A() As Byte
  Dim Res() As String
  Dim N, Sum, tSum, I As Byte
  N = 5 ' n - размерность массива (последовательности)
  ReDim X(N) ' X() - массив (последовательность) чисел
  ReDim A(N) ' A() - принимает значени 0 или 1 взависимости от того, входит данный элемент в сумму или нет
  ReDim Res(2 ^ N) ' Res() - результирующие последовательности
  ' заполняем массив произвольным образом
  X(1) = 1 : X(2) = 2 : X(3) = 2 : X(4) = 3 : X(5) = 3
  Sum = 6 ' s - сумма
  ' вводные данные закончились, теперь расчет
  A(1) = 0 : A(2) = 0 : A(3) = 0 : A(4) = 0 : A(5) = 0
  tSum = 0
  If tSum = Sum Then
   Call Save(Res, A, N)
  End If
  For I = 1 To N
   A(I) = 1
   Call Summ(Sum, tSum, I, X, A, Res, N)
   A(1) = 0 : A(2) = 0 : A(3) = 0 : A(4) = 0 : A(5) = 0
  Next
  I = 1
  While Len(Res(I)) > 0 And I <= 2 ^ N
   MsgBox(Res(I))
   I = I + 1
  End While
 End Sub

 Public Sub Main()
  ' Определение переменных и заполнение массивов
  Dim X(), A() As Byte
  Dim Res() As String
  Dim N, Sum, tSum, I, Count As Byte
  N = 5 ' n - размерность массива (последовательности)
  ReDim X(N) ' X() - массив (последовательность) чисел
  ReDim A(N) ' A() - принимает значени 0 или 1 взависимости от того, входит данный элемент в сумму или нет
  ReDim Res(2 ^ N) ' Res() - результирующие последовательности
  ' заполняем массив произвольным образом
  X(1) = 1 : X(2) = 2 : X(3) = 2 : X(4) = 3 : X(5) = 3
  Sum = 6 ' s - сумма
  ' вводные данные закончились, теперь расчет
  Count = 0
  A(1) = 0 : A(2) = 0 : A(3) = 0 : A(4) = 0 : A(5) = 0
  tSum = 0
  If tSum = Sum Then
   Count = Count + 1
   Call Save(Res, A, N)
  End If
  For I = 1 To N
   A(I) = 1
   Call Summ(Sum, tSum, I, X, A, Res, N, Count)
   A(1) = 0 : A(2) = 0 : A(3) = 0 : A(4) = 0 : A(5) = 0
  Next
  MsgBox(Trim(Str(Count)))
  I = 1
  While Len(Res(I)) > 0 And I <= 2 ^ N
   MsgBox(Res(I))
   I = I + 1
  End While
 End Sub

 Public Sub Summ(ByVal Sum As Byte, ByVal tSum As Byte, ByVal tI As Byte, ByVal X() As Byte, ByRef A() As Byte, ByRef Res() As String, ByVal N As Byte, ByRef Count As Byte)
  Dim ttSum As Byte
  Dim sI As Byte
  ttSum = tSum + X(tI)
  If ttSum < Sum Then
   For sI = tI + 1 To N
    A(sI) = 1
    Call Summ(Sum, ttSum, sI, X, A, Res, N, Count)
    A(sI) = 0
   Next
  ElseIf ttSum = Sum Then
   Count = Count + 1
   Call Save(Res, A, N)
  Else
   A(tI) = 0
  End If
 End Sub

 Public Sub Save(ByRef Res() As String, ByVal A() As Byte, ByVal N As Byte)
  Dim Max_I, tI As Byte
  For tI = 1 To 2 ^ N
   If Len(Trim(Res(tI))) = 0 Then
    Max_I = tI
    Exit For
   End If
  Next
  Res(Max_I) = "{"
  For tI = 1 To N
   If A(tI) = 1 Then
    If tI > 1 And Len(Res(Max_I)) > 1 Then
     Res(Max_I) = Res(Max_I) & ","
    End If
    Res(Max_I) = Res(Max_I) & Trim(Str(tI))
   End If
  Next
  Res(Max_I) = Res(Max_I) & "}"
 End Sub
__________________
The Information will be FREE!
SwiMMeR вне форума  
Старый 29.06.2004, 13:29     # 7
SwiMMeR
::VIP::
Отыпный Саводод
 
Аватар для SwiMMeR
 
Регистрация: 27.10.2002
Адрес: Краснодар, Россия
Пол: Male
Сообщения: 452

SwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собой
Pascal последний раз юзал лет 6-7 назад, поэтому не судите строго
Код:
uses crt;

 const n=5;
 const nn=32; {nn=2^n}

 function stepen(x,y : integer) : integer;
 begin
  if y=0 then
   stepen:=1
  else
   if y=1 then
    stepen:=x
   else
    begin
     y:=y-1;
     stepen:=x*stepen(x,y);
    end;
 end;

 procedure save(var res : array of string; a : array of integer);
 var max_i, ti : integer;
            zz : string;
 begin
  max_i:=0;
  for ti:=0 to stepen(2,n)-1 do
   if (length(res[ti])=0) and (max_i=0) then
    max_i:=ti;
  res[max_i]:='{';
  for ti:=0 to n-1 do
   if a[ti]=1 then
    begin
     if (ti>0) and (length(res[max_i])>1) then
      res[max_i]:=res[max_i]+',';
     str(ti+1,zz);
     res[max_i]:=res[max_i]+zz;
    end;
  res[max_i]:=res[max_i]+'}';
 end;

 procedure summ(sum,tsum,ti : integer; var count : integer;x:array of integer;var a:array of integer;var res:array of string);
 var ttsum, si : integer;
            zz : string;
 begin
  ttsum:=tsum+x[ti];
  if ttsum<sum then
   for si:=ti+1 to n-1 do
    begin
     a[si]:=1;
     summ(sum,ttsum,si,count,x,a,res);
     a[si]:=0;
    end
  else
   if ttsum=sum then
    begin
     count:=count+1;
     save(res,a);
    end
   else
    a[ti]:=0;
 end;

 var sum, tsum, i, count : integer;
                      zz : string;
                    x, a : array[0..n-1] of integer;
                     res : array[0..nn-1] of string;
begin
 clrscr;
 x[0]:=1; x[1]:=2; x[2]:=2; x[3]:=3; x[4]:=3;
 sum:=6;
 count:=0;
 a[0]:=0; a[1]:=0; a[2]:=0; a[3]:=0; a[4]:=0;
 tsum:=0;
 if tsum=sum then
  begin
   count:=count+1;
   save(res,a);
  end;
 for i:=0 to n-1 do
  begin
   a[i]:=1;
   summ(sum,tsum,i,count,x,a,res);
   a[0]:=0; a[1]:=0; a[2]:=0; a[3]:=0; a[4]:=0;
  end;
 writeln;
 str(count,zz);
 writeln('Count of SubArrays = '+zz);
 i:=1;
 if count>0 then
  writeln;
 for i:=1 to count do
  begin
   writeln(res[i]);
  end;
 readkey;
end.
В архиве сам файл
Вложения
Тип файла: rar TEST.rar (640 байт, 30 просмотров - Кто скачивал? )
__________________
The Information will be FREE!

Последний раз редактировалось SwiMMeR; 29.06.2004 в 13:41.
SwiMMeR вне форума  
Старый 29.06.2004, 14:18     # 8
Perfilev
Junior Member
 
Регистрация: 28.12.2002
Сообщения: 178

Perfilev Известность не заставит себя ждать
А на паскале прога та же написана, что и на vb?
Какую задачу она решает: твою или вмоей формулировке?
Perfilev вне форума  
Старый 29.06.2004, 23:31     # 9
dex0r
Junior Member
 
Регистрация: 03.05.2004
Сообщения: 49

dex0r Нимб уже пробиваетсяdex0r Нимб уже пробивается
SwiMMeR, а зачем функция возведения в степень? а через exp (экспонента) слабо?
Andy1, это в твоей формулировке
dex0r вне форума  
Старый 30.06.2004, 03:59     # 10
SwiMMeR
::VIP::
Отыпный Саводод
 
Аватар для SwiMMeR
 
Регистрация: 27.10.2002
Адрес: Краснодар, Россия
Пол: Male
Сообщения: 452

SwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собой
dex0r
А через экспоненту это как?

exp(x) = e^x
а мне надо 2^x
__________________
The Information will be FREE!
SwiMMeR вне форума  
Старый 30.06.2004, 06:55     # 11
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
SwiMMeR
Если не ошибаюсь, a^x = e ^ (x * ln(a))
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума  
Старый 30.06.2004, 10:44     # 12
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

EvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собой
ну вы замудрили! Осталось ещё через силу ветра
EvroStandart вне форума  
Старый 30.06.2004, 11:22     # 13
dmkr
Guest
 
Сообщения: n/a

Цитата:
Сообщение от Andy1
А на паскале прога та же написана, что и на vb?
Какую задачу она решает: твою или вмоей формулировке?
На Паскале -- судя по всему в твоей формулировке.
Имнсхо, твоя задача NPC. Так что не стесняйся полного
перебора, принципиально лучшего алгоритма нет
 
Старый 30.06.2004, 12:23     # 14
SwiMMeR
::VIP::
Отыпный Саводод
 
Аватар для SwiMMeR
 
Регистрация: 27.10.2002
Адрес: Краснодар, Россия
Пол: Male
Сообщения: 452

SwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собой
dmkr
Полный перебор не подходит, т.к. не соответствует условиям задачи ... незря ведь там сказано
Цитата:
упорядоченный по неубыванию
__________________
The Information will be FREE!
SwiMMeR вне форума  
Старый 30.06.2004, 23:09     # 15
dex0r
Junior Member
 
Регистрация: 03.05.2004
Сообщения: 49

dex0r Нимб уже пробиваетсяdex0r Нимб уже пробивается
Ghost, асболютно точно
SwiMMeR, упс... а я не заметил
dex0r вне форума  
Старый 10.05.2010, 17:42     # 16
solnce
Guest
 
Сообщения: n/a

помогите решить задачу о рюкзаке на Builder желательно с помощью генетического алгоритма, очень нужно!!! если че пишите в аську 631504528
 
Старый 19.05.2010, 18:23     # 17
Машуля
Guest
 
Сообщения: n/a

помогите,пожалуста

я видела вы тут обсуждали когда-то задачу о рюкзаке....так вот...можете хотя бы натолкнуть на мысль,как решить ее методом отжига.....я вообще понятия не имею,как это сделать...в паскале
 


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 02:20.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.